C# 控件基础2——属性配置控件PropertyGrid使用详解,PropertyGrid自定义下拉框TypeConverter,PropertyGrid自定义弹窗UITypeEditor,特性

这篇具有很好参考价值的文章主要介绍了C# 控件基础2——属性配置控件PropertyGrid使用详解,PropertyGrid自定义下拉框TypeConverter,PropertyGrid自定义弹窗UITypeEditor,特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • 最近比较忙,一段时间没写博文了。最近仿vs做了一个自定义界面的功能,使用到了PropertyGrid控件,让我的代码量减少了很多,就抽个晚上把PropertyGrid控件的使用技巧分享一下。
  • PropertyGrid控件估计大家都很熟悉,但凡使用winform开发过界面的都认识,就是配置控件属性的控件,如下图:

c# propertygrid,c#,c#,ui,开发语言

用途

当然,以上只是vs软件的功能,我们如果想要实现类似vs的这个功能,其实官方已经帮我们封装好了,拖出来用就行了。只要给PropertyGrid控件的SelectedObject属性绑定对象,该对象的所有属性都会自动显示在PropertyGrid控件的网格中,进而可以配置。下面展示一下我的使用:
c# propertygrid,c#,c#,ui,开发语言

PropertyGrid属性介绍

  • PropertyGrid的属性很多,我们需要使用的也很多。由于篇幅有限,我就挑几个重要的说一下,需要用到的同学还得自己去了解仔细:
  • SelectedObject:所绑定的单个对象;
  • HelpVisible:显示属性描述区域,对应特性Description的内容;
  • SelectedObjects:绑定多个对象,展示他们同名属性。

PtopertyGrid事件介绍

  • 同样,挑常用的几个:
  • PropertyValueChanged:这个事件很重要,当我们修改PtopertyGrid网格里面的内容(当前绑定的对象的值)时,这个事件会触发,我们相应需要把一下逻辑写到这个事件的实现里面。

基础特性

  • 当我们想给某属性添加某些修饰或者限制时,可以通过特性来完成。当然,PtopertyGrid控件也能根据该特性做些改变
    c# propertygrid,c#,c#,ui,开发语言

  • BrowsableAttribute:在PtopertyGrid控件中显示属性,属性默认显示,当该特性设为false时不显示;

  • Category:在PtopertyGrid控件中分类,如上图的“关联信息”、“外观”等类型,可以把某些属性归类;

  • DisplayName:在PtopertyGrid控件中名字,如上图的“文字位置”、“文本”、“宽高”等信息;

  • Description:在PtopertyGrid控件中对选中属性的描述,如上图最底下的文字;

  • 当然还可以自定义特性,有兴趣的同学可以深入了解一下

高级特性(自定义下拉框)

  • TypeConverter:类型转换,将任意类型转换成另一种类型,是它帮助我们实现自定义下拉框配置属性值,这个特性是本文章重点。
    c# propertygrid,c#,c#,ui,开发语言
  • 如上图,工程名称属性就使用了自定义下拉框,配置属性非常方便;
        /// <summary>
        /// 当前工程名称
        /// </summary>
        [Browsable(true), DisplayName("工程名称"), Category("关联信息"), Description("关联所选工程"),
            TypeConverter(typeof(PojNameType))]
        public string ProjName
  • 如上代码,其中“TypeConverter(typeof(PojNameType))”中的PojNameType是我自定义的类型转换器,继承自StringConverter,当然也可以继承TypeConverter等。这里是使字符串对象与其他表示形式之间相互转换,所以使用StringConverter。
  • 如果Converter是用于该属性的类型uint与用于显示的类型string之间的转换,Converter是用于该属性的类型uint与用于显示的类型string之间的转换;ConvertFrom是string转换成uint;
  • 通过以下代码实现自定义下拉框:
/// <summary>
    /// 输入链接所选工程名称
    /// </summary>
    public class PojNameType : StringConverter
    {
        List<string> allToolName = new List<string> { };

        //重写,支持从标准模板中选中值作为返回值
        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            return true;
        }

        //重写,提供转换器并
        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {
            allToolName.Clear();
            //遍历提取传进编辑界面的所有流程
            if (context.Instance is LinkProjControlBase)
            {
                LinkProjControlBase linkProjControlBase = context.Instance as LinkProjControlBase;
                foreach (var item in linkProjControlBase.ProjNameToIntptr)
                {
                    allToolName.Add(item.Key);
                }
            }
            return new StandardValuesCollection(allToolName); //编辑下拉框中的items
        }

        //重写,不支持编辑文本(true为不支持)
        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
        {
            return false;
        }
    }

高级特性(自定义弹窗)

  • Editor:编辑器,当我们想实现自定义弹窗的编辑器时,使用这个可以帮助我们,当然其不仅仅等实现弹窗,下拉框也可以实现;
    c# propertygrid,c#,c#,ui,开发语言
  • 如上图,自定义一个选择项目的弹窗,来配置属性。
        /// <summary>
        /// 链接的工具名称,选中相同的无法触发Set,即无法更新ToolIntptr
        /// </summary>
        [Browsable(true), Category("关联信息"), Description("关联的工具名称"), Editor(typeof(ToolNameItemsType), typeof(UITypeEditor))]
        public string ToolName
  • 以上代码是使用Editor的特性方法,其中ToolNameItemsType是自定义弹窗类型转换器,继承UITypeEditor
	/// <summary>
    /// 继承UITypeEditor类,弹窗形式选择
    /// 链接工具名称—单工具
    /// </summary>
    public class ToolNameItemsType : UITypeEditor
    {
        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
        {
            return UITypeEditorEditStyle.Modal;
        }
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            List<string> allToolName = new List<string>();
            if (context != null && context.Instance is LinkToolControlBase)
            {
                //类型转换
                LinkToolControlBase toolControl = context.Instance as LinkToolControlBase;
                
                allToolName = new List<string>(toolControl.toolNameAll.ToArray());
            }

            IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
            if (edSvc != null)
            {
                //弹窗选择
                FrmSelectTool f = new FrmSelectTool(allToolName);
                edSvc.ShowDialog(f);
                //赋值属性
                value = f.SelectName;
            }
            return value;
        }
    }

结论

  • PropertyGrid在软件开发中,能帮省略很多代码,用起来非常方便
  • Converter用于处理输入值时的行为,常用于有效性验证、格式转换等,而Editor用于处理下拉或打开新窗口时的行为。它们可以在同一个属性上共存。
  • 后面再写一篇关于自定义界面布局的文章剖析PropertyGrid的妙处

注:
转载本文需要标明出处!
谷子彭:1062484747@163.com文章来源地址https://www.toymoban.com/news/detail-707150.html

到了这里,关于C# 控件基础2——属性配置控件PropertyGrid使用详解,PropertyGrid自定义下拉框TypeConverter,PropertyGrid自定义弹窗UITypeEditor,特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Android控件】HorizontalScrollView的基础使用记录(滚动条自定义)

    目录 ​​​​​​​ 效果图 简介 注意事项 基础属性 滚动条全部设置 滚动条是否总显示 自定义滚动条滑动背景和滚动条背景 设置滚动条的宽度 设置滚动条距离 其它常规设置 设置滚动速度 布局代码示例 总结 HorizontalScrollView是水平滚动标签。垂直滚动动是 ScrollView标签 H

    2024年02月10日
    浏览(41)
  • C# 自定义控件库之Lable组合控件

    1、创建类库 2、在类库中添加用户控件(Window窗体) 3、控件视图 4、后台代码

    2024年02月07日
    浏览(41)
  • JavaFx基础学习【四】:UI控件的通用属性

    目录 前言 一、介绍  二、继承关系 三、常用通用属性 四、属性Properties 五、属性绑定 六、属性监听 七、事件驱动 八、其他章节 如果你还没有看过前面的文章,可以通过以下链接快速前往学习: JavaFx基础学习【一】:基本认识_明天再去学习的博客-CSDN博客 JavaFx基础学习【

    2024年02月12日
    浏览(34)
  • C# 通过自定义控件实现炫酷的时间显示

    先看效果 话不多说,直接上代码 基础的自定义控件 LED_Num

    2024年02月09日
    浏览(48)
  • C# Window form 自定义控件的结构和设计(三)

    C# Window form 自定义控件的结构和设计 (三) 一、前面介绍了如何来创建第一个自定义的控件,以及一个测试程序。下面我们来看下如何在自定义控件中添加属性。 C#和其他.NET语言支持属性作为语言的第一类成员。把属性作为语言的基础属性有两点主要的有点: ①利用属性使放

    2024年04月15日
    浏览(42)
  • Android开发——控件EditText, 2.获取EditText输入的数据,通过按钮点击实现,ImageView控件,缩放类型,控件ProgressBar,常用属性详解,进度条设置

    1. android : hint 输入提示 2. android : textColorHint  输入提示文字的颜色 3. android : inputType  输入类型 4. android : drawableXxxx 在输入框的指定方位添加图片 5. android : drawablePadding  设置图片与输入内容的间距 6. android : paddingxxxx  设置内容与边框的间距 7. android : backgrou

    2024年02月07日
    浏览(48)
  • C# DataGridView控件的基础应用实例

      DataGridView我把他叫做网格数据控件 。我们在显示表格数据的时候,经常会用想到用它, 他就像Excel表格一样。我们知道只要是数据表,就一定逃不掉表的增删查改操作。   该篇,我在VS2019的环境下通过demo实例来实现DataGridView控件的一系列功能,包括添加一行数据、切

    2023年04月09日
    浏览(44)
  • C#控件编程详解之文本框(TextBox)

    摘要:以自身开发经验,从属性与事件详解文本框(TextBox)的用法。 编程语言:C# 编程环境:Visual Studio 2019 目录 TextBox控件属性  布局 设计 外观 行为  TextBox控件事件  小结  每篇寄语         TextBox提供文字输入和显示功能,应用广泛,随处可见,作为一个Winform开发者,

    2024年02月16日
    浏览(41)
  • Android开发基础——自定义控件

    Android中常用控件和布局的继承结构如下图所示:  从上面可以看出,所有控件都是直接或间接继承自View的,所用的所有布局都是直接或间接继承自ViewGroup的。View是Android中最基本的一种UI组件,其可以在屏幕上绘制一块矩形区域,并能够响应这块区域的各种事件,因此,用户

    2023年04月10日
    浏览(36)
  • qml用基础控件自定义柱状图

    本想用qtchart来做,但是用了一下发现限制太多不太满足需求,所以使用自定义的方式实现,支持图例数量变化,标签数量变化,值为0时不显示 内容过长可滑动查看 用的都是基础控件,思路是把一个标签中的每个柱子视为重复项,用repeater构建,把柱状图中每个标签的所有内容(柱子)整体

    2024年01月17日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包