首页 > 编程语言 >C# Winform之propertyGrid控件分组后排序功能

C# Winform之propertyGrid控件分组后排序功能

时间:2024-07-11 15:59:20浏览次数:17  
标签:控件 PropertySort 排序功能 自定义 get C# 排序 public 属性

在 WinForms 的 PropertyGrid 控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid 控件会根据 [Category][DisplayName] 属性装饰器对属性进行分组和排序。

如果你想要自定义排序规则,你可以通过以下几种方法:

  1. 使用 [PropertyOrder] 或自定义属性装饰器 如果你想要改变特定属性的显示顺序,可以在类的属性上使用自定义的属性装饰器,例如:

     Csharp 
    1[CustomOrder(1)] // 假设你有一个名为 CustomOrder 的装饰器
    2public int FirstProperty { get; set; }
    3
    4[CustomOrder(2)]
    5public int SecondProperty { get; set; }

    这个装饰器需要实现相应的逻辑,例如:

     Csharp 
    1[AttributeUsage(AttributeTargets.Property)]
    2public class CustomOrderAttribute : Attribute
    3{
    4    public int Order { get; private set; }
    5
    6    public CustomOrderAttribute(int order)
    7    {
    8        Order = order;
    9    }
    10}

    然后在 PropertyGridGetProperties 方法中,你可以读取这个装饰器并按其顺序对属性进行排序。

  2. 重写 PropertyDescriptor 你也可以通过继承 PropertyDescriptor 并重写 GetChildProperties 方法来控制属性的显示顺序。

  3. 使用 PropertyGrid.PropertySort 属性 你可以设置 PropertyGrid.PropertySort 属性为 PropertySort.Alphabetical 来强制属性按字母顺序排序,或者设置为 PropertySort.Categorized 来按照类别排序(这是默认行为)。

  4. 手动排序 你还可以在代码中手动获取 PropertyDescriptorCollection,然后对其进行排序,再重新应用到 PropertyGrid 中。

下面是一个使用自定义属性装饰器和 PropertySort 的简单示例:


Csharp

1// 自定义属性装饰器
2[AttributeUsage(AttributeTargets.Property)]
3public class DisplayOrderAttribute : Attribute
4{
5    public int Order { get; }
6
7    public DisplayOrderAttribute(int order)
8    {
9        Order = order;
10    }
11}
12
13public class MyClass
14{
15    [DisplayOrder(1)]
16    [Category("FirstGroup")]
17    public string PropertyA { get; set; }
18
19    [DisplayOrder(2)]
20    [Category("SecondGroup")]
21    public string PropertyB { get; set; }
22
23    [DisplayOrder(3)]
24    [Category("ThirdGroup")]
25    public string PropertyC { get; set; }
26}
27
28public partial class MainForm : Form
29{
30    public MainForm()
31    {
32        InitializeComponent();
33        this.propertyGrid1.SelectedObject = new MyClass();
34        // 可选: 强制按字母顺序排序
35        this.propertyGrid1.PropertySort = PropertySort.Alphabetical;
36    }
37}

如果你想要在类别内部对属性进行排序,需要创建一个自定义的 PropertyDescriptor 类,并在其中实现排序逻辑。这通常涉及重写 GetChildProperties 方法,然后返回一个根据你的需求排序的 PropertyDescriptorCollection

标签:控件,PropertySort,排序功能,自定义,get,C#,排序,public,属性
From: https://blog.csdn.net/danielli/article/details/140354456

相关文章

  • C# Winform之propertyGrid控件使用详解和分组设置
    PropertyGrid控件在WinForms中是一个非常有用的工具,它允许用户查看和编辑一个对象的属性。这个控件非常适合用于配置对话框或任何需要动态显示对象属性的地方。下面我会详细介绍PropertyGrid的使用方法和如何对属性进行分组。使用详解1.添加 PropertyGrid 控件在Vi......
  • 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保......