首页 > 编程语言 >C# Winform之propertyGrid控件使用详解和分组设置

C# Winform之propertyGrid控件使用详解和分组设置

时间:2024-07-11 15:58:46浏览次数:14  
标签:Category 控件 propertyGrid get C# set PropertyGrid 属性

PropertyGrid 控件在 WinForms 中是一个非常有用的工具,它允许用户查看和编辑一个对象的属性。这个控件非常适合用于配置对话框或任何需要动态显示对象属性的地方。下面我会详细介绍 PropertyGrid 的使用方法和如何对属性进行分组。

使用详解

1. 添加 PropertyGrid 控件

在 Visual Studio 的工具箱中找到 PropertyGrid 控件并拖放到你的窗体上。

2. 绑定对象到 PropertyGrid

要使 PropertyGrid 显示对象的属性,你需要将一个对象实例绑定到 PropertyGrid 上。这可以通过设置 PropertyGrid.SelectedObject 属性来完成:

Csharp
1this.propertyGrid1.SelectedObject = myObject;

其中 myObject 是你想显示其属性的对象。

3. 自定义属性显示

你可以使用属性装饰器(Attributes)来改变属性在 PropertyGrid 中的显示方式。例如:

Csharp
1public class MyClass
2{
3    [DisplayName("Display Name")]
4    [Description("This is the description of the property.")]
5    [Category("My Category")]
6    [TypeConverter(typeof(MyConverter))]
7    [Editor(typeof(MyEditor), typeof(UITypeEditor))]
8    [Browsable(true)]
9    [EditorBrowsable(EditorBrowsableState.Always)]
10    [RefreshProperties(RefreshProperties.All)]
11    public string MyProperty { get; set; }
12}
  • [DisplayName] 设置属性在 PropertyGrid 中显示的名字。
  • [Description] 提供属性的描述,当鼠标悬停在属性上时会显示。
  • [Category] 将属性归类,便于在 PropertyGrid 中进行分组。
  • [TypeConverter] 指定类型转换器,以改变属性的编辑方式。
  • [Editor] 指定属性的编辑器。
  • [Browsable] 控制属性是否在 PropertyGrid 中可见。
  • [EditorBrowsable] 控制属性是否在设计时可见。
  • [RefreshProperties] 控制何时刷新属性网格。
4. 分组设置

使用 [Category] 属性装饰器可以将属性分组。例如:


Csharp

1[Category("Appearance")]
2public Color BackgroundColor { get; set; }
3
4[Category("Behavior")]
5public bool IsEnabled { get; set; }

PropertyGrid 中,属性将根据 [Category] 装饰器自动分组到不同的类别下。

高级用法

  • 属性过滤:你可以通过 PropertyGrid.PropertySort 属性来改变属性的排序方式,或者使用事件处理来过滤属性。
  • 属性编辑:你可以创建自定义编辑器和类型转换器来更精细地控制属性的编辑界面。

示例代码


Csharp

1public partial class MainForm : Form
2{
3    private MyClass myObject;
4
5    public MainForm()
6    {
7        InitializeComponent();
8        myObject = new MyClass();
9        propertyGrid1.SelectedObject = myObject;
10    }
11}
12
13public class MyClass
14{
15    [Category("Appearance")]
16    [DisplayName("Back Color")]
17    [Description("The background color of the control.")]
18    public Color BackColor { get; set; }
19
20    [Category("Behavior")]
21    [DisplayName("Is Enabled")]
22    [Description("Whether the control is enabled.")]
23    public bool IsEnabled { get; set; }
24}

5. 高级自定义

PropertyGrid 支持高级自定义,比如使用自定义的编辑器和类型转换器。例如,你可以使用 [TypeConverter][Editor] 装饰器来指定属性的编辑器类型和转换器。


Csharp

1[TypeConverter(typeof(ColorConverter))]
2public Color CustomColor { get; set; }
3
4[Editor(typeof(FontEditor), typeof(UITypeEditor))]
5public Font CustomFont { get; set; }

6. 动态修改属性可见性

你还可以在运行时动态地控制属性的可见性,通过监听 PropertyGridPropertyValueChanged 事件,根据当前状态决定哪些属性应该显示或隐藏。


Csharp

1private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
2{
3    if (e.ChangedItem.Label == "IsEnabled")
4    {
5        var isEnabled = (bool)e.NewValue;
6        foreach (var item in propertyGrid1.Properties)
7        {
8            if (item.Label != "IsEnabled")
9                item.IsBrowsable = isEnabled;
10        }
11    }
12}

以上代码创建了一个简单的 MainForm,并在其中使用了 PropertyGrid 控件,展示了如何绑定一个对象并使用装饰器来定制属性的显示。

标签:Category,控件,propertyGrid,get,C#,set,PropertyGrid,属性
From: https://blog.csdn.net/danielli/article/details/140349247

相关文章

  • C++冒泡排序(使用vector动态数组)
    #include<iostream>#include<vector>usingnamespacestd;voidsort(vector<int>&a){  constintsize=a.size();  inttemp;  intflag=1;  while(flag==1)  {  flag=0;  for(inti=0;i<size;++i)  {   if(a[i]>......
  • 【ChatGPT 微服务应用体系构建】开发文档
    ChatGPT微服务应用体系构建1.需求分析2.技术选型3.功能开发3-1.Nginx简单访问认证3-2.Shiro登录授权发放访问token3-3.Docker镜像构建和容器部署3-4.ChatGPT-SDK组件开发3-5.微信公众号验签和初步对接OpenAI1.需求分析2.技术选型3.功能开......
  • 【java】实现sse调用websocket接口,忽略wss证书并控制sse吐字速度
    maven<dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.5.3</version></dependency>AsyncConfigpackag......
  • Vue 中 v-pre、v-once、v-cloak 标签的深度解析与案例展示
    目录v-prev-once​​​​​​​v-cloak​​​​​​​v-cloak介绍​​​​​​​插值表达式闪烁问题v-pre        当使用v-pre指令时,不会进行编译操作。所有的Vue模板语法都将得以完整保留,并会按照其初始的形态进行渲染。其中,最为常见的应用场景便是......
  • c++方法
    std::transform方法std::transform是C++标准库算法中的一个非常有用的函数,它定义在头文件中。这个函数用于将给定范围内的每个元素按照指定的操作进行转换,并将转换结果存储在另一个位置(可以是原始范围的另一个容器,或者完全不同的位置)。std::transform提供了一个灵活的......
  • Linux-Cgroup V2 初体验
    本文主要记录LinuxCgroupV2版本基本使用操作,包括cpu、memory子系统演示。1.开启CgroupV2版本检查通过下面这条命令来查看当前系统使用的CgroupsV1还是V2stat-fc%T/sys/fs/cgroup/如果输出是cgroup2fs那就是V2,就像这样root@tezn:~#stat-fc%T/sys/fs/......
  • 星环科技推出语料开发工具TCS,重塑语料管理与应用新纪元
    5月30-31日,2024向星力·未来数据技术峰会期间,星环科技推出一款创新的语料开发工具——星环语料开发工具TCS(TranswarpCorpusStudio),旨在通过全面的语料生命周期管理,极大提升语料开发效率,助力企业或机构高质量地构建大模型及其应用。星环科技语料开发工具 (TranswarpCorpusSudi......
  • 已有SpringBoot后端项目 升级为 芋道框架(yudao-cloud)指南
    已有SpringBoot后端项目升级为芋道框架(yudao-cloud)指南启动芋道框架后端:快速启动(后端项目)前端:快速启动(后端项目)注意:必须要下载Redis和Nacaos,在后端的快速启动中有教程启动nacos的命令在教程中有误,没有进行集群部署的nacos要使用以下命令启动startup.cmd-m......
  • Rocketmq双主双从部署
    一、概要RocketMQ是一个分布式消息和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可扩展性。整个流程如下:1)启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来完成注册,相当于一个路由控制中心。2)Broker启动,跟所有的NameServer保......
  • CN-Celeb 论文阅读:CN-Celeb: multi-genre speaker recognition
    摘要Inthiswork,wefirstlypublishCN-Celeb,alarge-scalemulti-genrecorpusthatincludesin-the-wildspeechutterancesof3,000speakersin11differentgenres.Secondly,usingthisdataset,weconductacomprehensivestudyonthemulti-genrephe......