返回顶部
首页 > 资讯 > 精选 >C#中怎么利用WinForm控件实现一个下拉式属性编辑器
  • 945
分享到

C#中怎么利用WinForm控件实现一个下拉式属性编辑器

2023-06-17 22:06:14 945人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关C#中怎么利用winform控件实现一个下拉式属性编辑器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先我们要创建一个用于编辑属性的控件,在本系列文章的开始,我

这篇文章将为大家详细讲解有关C#中怎么利用winform控件实现一个下拉式属性编辑器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

首先我们要创建一个用于编辑属性的控件,在本系列文章的开始,我们介绍了自定义控件有三种类型:复合控件,扩展控件,自定义控件。在本例中我们制作一个复合控件(Compsite control),复合控件的C# WinFORM控件开发比较简单,不在本系列文章的讲解范围。

我简单做个介绍,在Solution 浏览器里右键点击CustomControlSample工程选择Add->User Control…,输入文件名ScopeEditorControl.cs。我们做的这个复合控件上一篇文章介绍的模态对话框所包含子控件基本一样,除了用于确认和取消的按钮,如下图:

C#中怎么利用WinForm控件实现一个下拉式属性编辑器
C# WinForm控件开发下拉式属性编辑器

由于我们取消了用于确认和取消的按钮,并且是一个下拉的编辑器控件,在出现下面三种情况的时候下拉的编辑器控件会关闭:用户敲了回车,用户敲了ESC键,用户点击了编辑器以外的地方。当下拉编辑器控件关闭的时候我们就需要更新属性的值。下边是这个控件的代码:

  1. using System;  

  2. using System.Collections.Generic;  

  3. using System.ComponentModel;  

  4. using System.Drawing;  

  5. using System.Data;  

  6. using System.Text;  

  7. using System.windows.Forms;  

  8. namespace CustomControlSample  

  9. {  

  10.     public partial class ScopeEditorControl : UserControl  

  11.     {  

  12.         private Scope _oldScope;  

  13.         private Scope _newScope;  

  14.         private Boolean canceling;  

  15.         public ScopeEditorControl(Scope scope)  

  16.         {  

  17.             _oldScope = scope;  

  18.             _newScope = scope;  

  19.             InitializeComponent();  

  20.         }  

  21.         public Scope Scope  

  22.         {  

  23.             get 

  24.             {  

  25.                 return _newScope;  

  26.             }  

  27.         }  

  28.         private void textBox1_Validating(object sender, CancelEventArgs e)  

  29.         {  

  30.             try 

  31.             {  

  32.                 Int32.Parse(textBox1.Text);  

  33.             }  

  34.             catch (FormatException)  

  35.             {  

  36.                 e.Cancel = true;  

  37.                 MessageBox.Show("无效的值", "验证错误",
    MessageBoxButtons.OK, MessageBoxIcon.Error);  

  38.             }  

  39.         }  

  40.         private void textBox2_Validating(object sender, CancelEventArgs e)  

  41.         {  

  42.             try 

  43.             {  

  44.                 Int32.Parse(textBox2.Text);  

  45.             }  

  46.             catch (FormatException)  

  47.             {  

  48.                 e.Cancel = true;  

  49.                 MessageBox.Show("无效的值", "验证错误",
    MessageBoxButtons.OK, MessageBoxIcon.Error);  

  50.             }  

  51.         }  

  52.        protected override bool ProcessDialogKey(Keys keyData)  

  53.         {  

  54.             if (keyData == Keys.Escape)  

  55.             {  

  56.                 _oldScope = _newScope;  

  57.                 canceling = true;  

  58.             }  

  59.             return base.ProcessDialogKey(keyData);  

  60.         }  

  61.         private void ScopeEditorControl_Leave(object sender, EventArgs e)  

  62.         {  

  63.             if (!canceling)  

  64.             {  

  65.                 _newScope.Max = Convert.ToInt32(textBox1.Text);  

  66.                 _newScope.Min = Convert.ToInt32(textBox2.Text);  

  67.             }  

  68.         }  

  69.         private void ScopeEditorControl_Load(object sender, EventArgs e)  

  70.         {  

  71.             textBox1.Text = _oldScope.Max.ToString();  

  72.             textBox2.Text = _oldScope.Min.ToString();  

  73.         }  

  74.     }  

和模态对话框编辑器一样,C# WinForm控件开发环境并不会直接调用我们的编辑器控件,而是用过UITypeEditor类的派生来实现编辑器的调用,所以我们必须实现一个下拉式编辑器。代码如下:

  1. using System;  

  2. using System.ComponentModel;  

  3. using System.Drawing.Design;  

  4. using System.Windows.Forms.Design;  

  5. using System.Windows.Forms;  

  6. namespace CustomControlSample  

  7. {  

  8.     public class ScopeDropDownEditor : UITypeEditor  

  9.     {  

  10.         public override UITypeEditorEditStyle GetEditStyle
    (ITypeDescriptorContext context)  

  11.         {  

  12.             if (context != null && context.Instance != null)  

  13.             {  

  14.                 return UITypeEditorEditStyle.DropDown;  

  15.             }  

  16.             return base.GetEditStyle(context);  

  17.         }  

  18.         public override object EditValue(ITypeDescriptorContext context, 
    IServiceProvider provider, object value)  

  19.         {  

  20.             IWindowsFormsEditorService editorService = null;  

  21.             if (context !=
    null && context.Instance != null && provider != null)  

  22.             {  

  23.                 editorService = 
    (IWindowsFormsEditorService)provider.GetService
    (typeof(IWindowsFormsEditorService));  

  24.                 if (editorService != null)  

  25.                 {  

  26.                     MyListControl control = 
    (MyListControl)context.Instance;  

  27.                     ScopeEditorControl editorControl = 
    new ScopeEditorControl(control.Scope);  

  28.                     editorService.DropDownControl(editorControl);  

  29.                     value = editorControl.Scope;  

  30.                     return value;  

  31.                 }  

  32.             }  

  33.             return value;  

  34.         }  

  35.     }  

  36. }  

  37.  

看过上一篇文章的朋友应该对这段代码很熟悉,是的,这两个编辑器的代码只有几行不同之处,在GetEditStyle方法中,我们返回的是UITypeEditorEditStyle.DropDown,而不是UITypeEditorEditStyle.Modal,表明我们的编辑器是一个下拉式的编辑器。

在EditValue中的不同之处是,我们使用DropDownControl方法来显示编辑器。编辑器制作完毕,我们把Scope以前的编辑器替换成下拉式编辑器,如下:

[Browsable(true)]          [Editor(typeof(ScopeDropDownEditor), typeof(UITypeEditor))]          public Scope Scope          {              get             {                  return _scope;              }              set             {                  _scope = value;              }          }

现在build CustomControlSample工程,然后切换到测试工程查看Scope属性。当我们点击属性的值,在属性值的后边出现了一个按钮:

C#中怎么利用WinForm控件实现一个下拉式属性编辑器
C# WinForm控件开发下拉式属性编辑器

当点击这个按钮的时候,下拉的属性编辑器出现了:

好了,C# WinForm控件开发的下拉式属性编辑器的编辑到这里就讲完了。

C#中怎么利用WinForm控件实现一个下拉式属性编辑器 
C# WinForm控件开发下拉式属性编辑器

关于C#中怎么利用WinForm控件实现一个下拉式属性编辑器就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: C#中怎么利用WinForm控件实现一个下拉式属性编辑器

本文链接: https://lsjlt.com/news/293625.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#中怎么利用WinForm控件实现一个下拉式属性编辑器
    这篇文章将为大家详细讲解有关C#中怎么利用WinForm控件实现一个下拉式属性编辑器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先我们要创建一个用于编辑属性的控件,在本系列文章的开始,我...
    99+
    2023-06-17
  • C#中怎么利用Button实现一个下拉菜单
    C#中怎么利用Button实现一个下拉菜单,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在项目中,要用到按钮实现下拉菜单的功能,而且是在MDI窗体中。当菜单的显...
    99+
    2023-06-17
  • C#中怎么利用 WinForm实现一个进度条效果
    C#中怎么利用 WinForm实现一个进度条效果,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先是进度条窗体,需要在上面添加进度条,然后去掉ControlBox。除此外,还要...
    99+
    2023-06-17
  • C#中怎么实现一个日历样式的下拉式计算器
    C#中怎么实现一个日历样式的下拉式计算器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。本文介绍了如何在Visual Studio中创建用户控件来显示下拉式计算器...
    99+
    2023-06-17
  • 怎么在c#中使用WinForm制作一个图片编辑工具
    今天就跟大家聊聊有关怎么在c#中使用WinForm制作一个图片编辑工具,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1 功能介绍程序主界面点击打开图片,可选择多个图片文件。图片缩略图...
    99+
    2023-06-07
  • Vue中怎么利用枚举类型实现一个HTML下拉框
    今天就跟大家聊聊有关Vue中怎么利用枚举类型实现一个HTML下拉框,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一步: 编写下拉框需要的枚举类型&...
    99+
    2024-04-02
  • 利用bootstrap怎么实现一个下拉框搜索功能
    本篇文章为大家展示了利用bootstrap怎么实现一个下拉框搜索功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、第一个下拉框代码<div class="btn-gro...
    99+
    2023-05-31
    bootstrap strap
  • C#中怎么实现一个日历控件
    本篇文章给大家分享的是有关C#中怎么实现一个日历控件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。定制C#日历控件在把会议添加到数据库中之前,先修改一下日历的显示。***用另一...
    99+
    2023-06-18
  • 怎么在Android应用中利用PopuWindow实现一个下拉列表功能
    这篇文章将为大家详细讲解有关怎么在Android应用中利用PopuWindow实现一个下拉列表功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基础依赖,由于下拉列表是用RecycleVie...
    99+
    2023-05-31
    popuwindow roi android
  • C#中怎么实现一个文件下载
    这篇文章给大家介绍C#中怎么实现一个文件下载,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先,打开Visual Studio.Net,新建一个Visual C# Windows应用程序的工程,不妨命名为\"...
    99+
    2023-06-17
  • C#中怎么利用listbox实现一个双击事件
    这篇文章将为大家详细讲解有关C#中怎么利用listbox实现一个双击事件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。private void Page_Load(obj...
    99+
    2023-06-17
  • VB.NET中怎么实现一个属性生成器
    这期内容当中小编将会给大家带来有关VB.NET中怎么实现一个属性生成器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Name String中间为空格,CTRL+S 生成的VB.NET属性生成器的文本已经C...
    99+
    2023-06-17
  • 怎么在CSS3中利用transition属性实现下划线
    怎么在CSS3中利用transition属性实现下划线?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。transition属性transition: 简写属性,用于在一个属性中设...
    99+
    2023-06-08
  • Android开发中利用ListView实现一个渐变式的下拉刷新动画
    本篇文章给大家分享的是有关Android开发中利用ListView实现一个渐变式的下拉刷新动画,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。主要要点listview刷新过程中主...
    99+
    2023-05-31
    android listview roi
  • 怎么在html中实现一个markdown编辑器效果
    今天就跟大家聊聊有关怎么在html中实现一个markdown编辑器效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一:下载Editor.md进入官网直接进行下载使用npm进行下载n...
    99+
    2023-06-09
  • C#中怎么利用类实现一个接口
    这篇文章给大家介绍C#中怎么利用类实现一个接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#类实现接口前面我们已经说过,接口定义不包括方法的实现部分。接口可以通过类或结构来实现。我们主要讲述通过类来实现接口。用类来...
    99+
    2023-06-17
  • Android应用中怎么实现一个下拉刷新功能
    Android应用中怎么实现一个下拉刷新功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、下拉才出现的视图pull_to_refresh_header.xml<x...
    99+
    2023-05-31
    android roi
  • 怎么在Android中利用ImageView控件实现一个圆角功能
    今天就跟大家聊聊有关怎么在Android中利用ImageView控件实现一个圆角功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。创建CustomImageView 类在你的项目中(...
    99+
    2023-05-31
    android age imageview
  • 怎么使用C#实现一个PPT遥控器
    这篇文章给大家分享的是有关怎么使用C#实现一个PPT遥控器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。说明本项目参考了 https://github.com/yangzhongke/PhoneAsPrompte...
    99+
    2023-06-15
  • 利用Servlet怎么实现一个文件下载功能
    本篇文章给大家分享的是有关利用Servlet怎么实现一个文件下载功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Web容器为Servlet生成并且传递的HttpServlet...
    99+
    2023-05-31
    servlet 一个文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作