C# Winform之propertyGrid控件分组后排序功能
在 WinForms 的 PropertyGrid 控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid 控件会根据 [Category] 和 [DisplayName] 属性装饰器对属性进行分组和排序。
如果你想要自定义排序规则,你可以通过以下几种方法:
-
使用
Csharp[PropertyOrder]或自定义属性装饰器 如果你想要改变特定属性的显示顺序,可以在类的属性上使用自定义的属性装饰器,例如:1[CustomOrder(1)] // 假设你有一个名为 CustomOrder 的装饰器 2public int FirstProperty { get; set; } 3 4[CustomOrder(2)] 5public int SecondProperty { get; set; }这个装饰器需要实现相应的逻辑,例如:
Csharp1[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}然后在
PropertyGrid的GetProperties方法中,你可以读取这个装饰器并按其顺序对属性进行排序。 -
重写
PropertyDescriptor类 你也可以通过继承PropertyDescriptor并重写GetChildProperties方法来控制属性的显示顺序。 -
使用
PropertyGrid.PropertySort属性 你可以设置PropertyGrid.PropertySort属性为PropertySort.Alphabetical来强制属性按字母顺序排序,或者设置为PropertySort.Categorized来按照类别排序(这是默认行为)。 -
手动排序 你还可以在代码中手动获取
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。
相关文章:
C# Winform之propertyGrid控件分组后排序功能
在 WinForms 的 PropertyGrid 控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid 控件会根据 [Category] 和 [DisplayName] 属性装饰器对属性进行分组和…...
Java基础(十九):集合框架
目录 一、Java集合框架体系二、Collection接口及方法1、添加2、判断3、删除4、其它 三、Iterator(迭代器)接口1、Iterator接口2、迭代器的执行原理3、foreach循环 四、Collection子接口1:List1、List接口特点2、List接口方法3、List接口主要实现类:Array…...
execute_script与JS
JavaScript简称JS,有的测试场景需要JS脚本辅助完成Selenium无法做到的测试工作。webdriver提供了execute_script()方法调用JS代码。execute_script()可以在当前窗口/框架中执行JS脚本,并返回结果。可以使用它操作DOM元素、获取元素属性、执行异步操作等。…...
访问 Postman OAuth 2.0 授权的最佳实践
OAuth 2.0 代表了 web 安全协议的发展,便于在多个平台上进行授权服务,同时避免暴露用户凭据。它提供了一种安全的方式,让用户可以授权应用程序访问服务。 在 Postman 中开始使用 OAuth 2.0 Postman 是一个流行的API客户端,支持 …...
《BASeg: Boundary aware semantic segmentation for autonomous driving》论文解读
期刊:Neural Networks | Journal | ScienceDirect.com by Elsevier 年份:2023 代码:https://github.com/Lature-Yang/BASeg 摘要 语义分割是自动驾驶领域街道理解任务的重要组成部分。现有的各种方法要么专注于通过聚合全局或多尺度上下文…...
高效利用iCloud指南
高效利用iCloud的指南主要包括以下几个方面: 一、注册与登录 创建Apple ID: 如果尚未拥有Apple ID,可以在苹果官网或iOS设备的设置中创建。Apple ID是访问iCloud服务的前提。登录iCloud: 在苹果设备上,进入“设置”应…...
【MySQL】常见的MySQL日志都有什么用?
MySQL日志的内容非常重要,面试中经常会被问到。同时,掌握日志相关的知识也有利于我们理解MySQL 底层原理,必要时帮助我们排查解决问题。 MySQL中常见的日志类型主要有下面几类(针对的是InnoDB 存储引擎): 错误日志(error log):对 MySQL 的启…...
IDEA社区版使用Maven archetype 创建Spring boot 项目
1.新建new project 2.选择Maven Archetype 3.命名name 4.选择存储地址 5.选择jdk版本 6.Archetype使用webapp 7.create创建项目 创建好长这样。 检查一下自己的Maven是否是自己的。 没问题的话就开始增添java包。 [有的人连resources包也没有,那就需要自己添…...
C/C++ list模拟
模拟准备 避免和库冲突,自己定义一个命名空间 namespace yx {template<class T>struct ListNode{ListNode<T>* _next;ListNode<T>* _prev;T _data;};template<class T>class list{typedef ListNode<T> Node;public:private:Node* _…...
android studio开发
Kotlin 编程简介 | Android Basics Compose - First Android app | Android Developers (google.cn) 这是官网的教程,实现试一下。 之后进入课程 您的第一个 Kotlin 程序 (google.cn) 程序可以被视为一系列指示计算机或设备执行某项操作的指令,...
PostgreSQl 物化视图
物化视图(Materialized View)是 PostgreSQL 提供的一个扩展功能,它是介于视图和表之间的一种对象。 物化视图和视图的最大区别是它不仅存储定义中的查询语句,而且可以像表一样存储数据。物化视图和表的最大区别是它不支持 INSERT…...
Win10工具:批量word转png图片
首先声明这个小工具是小编本人开发的,无任何广告,会员收费机制等,永久使用。允许公司或个人使用,不允许倒卖,否则发现后会追究法律责任,毕竟开发不易。工具是用python开发的。 功能非常单一,就…...
期货量化交易客户端开源教学第八节——TCP通信服务类
private FReciveStr: AnsiString; {接收到的数据} IsConErr: Boolean; {网络连接是否失败} FSocket_LB: Integer; {TCP连接类别,0为交易,1为行情,2为查询} FRetryCount: Integer; {网络连接重试次数} FLoginErrEvent: TLoginErrEvent; {…...
bi项目笔记
1.bi是什么 bi项目就是商业智能系统,也就是数据可视画、报表可视化系统,如下图的就是bi项目了 2.技术栈...
金蝶云苍穹-插件开发(四)GPT开发相关插件
我只对GPT开发的相关插件进行讲解,因为我的是插件开发教程,关于GPT的一些提示词的写法,GPT任务的配置,请去金蝶云苍穹的文档和社区内学习。 GPT自定义操作 GPT自定义操作的代码的类要实现 IGPTAction 这个接口,这个接…...
【机器学习】精准农业新纪元:机器学习引领的作物管理革命
📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 🔍1. 引言📒2. 精准农业的背景与现状🍁精准农业的概念与发展历程🍂国内外精准农业实践案…...
一键掌握天气动态 - 基于Vue和高德API的实时天气查询
前言 本文将学习如何使用Vue.js快速搭建天气预报界面,了解如何调用高德地图API获取所需的天气数据,并掌握如何将两者有机结合,实现一个功能丰富、体验出色的天气预报应用 无论您是前端新手还是有一定经验,相信这篇教程都能为您带来收获。让我们一起开始这段精彩的Vue.js 高德…...
PostgreSQL修改最大连接数
在使用PostgreSQL 的时候,经常会遇到这样的错误提示, sorry, too many clients already,这是因为默认PostgreSQL最大连接数是 100, 一般情况下,个人使用时足够的,但是在生产环境,这个连接数是远远不够的&am…...
C# SqlSugar 如何使用Sql语句进行查询,并带参数进行查询,防注入
一般ORM查询单表数据已经是很简单的一种方式了 详情可以看我的另一篇文章:ORM C# 封装SqlSugar 操作数据库_sqlsugar 基类封装-CSDN博客 下面是介绍有些数据是需要比较复杂的SQL语句来进行查询的时候,则需要自行组装SQL语句来进行查询,下面…...
slf4j日志框架和logback详解
slf4j作用及其实现原理 SLF4J(Simple Logging Facade for Java)是一种日志框架的抽象层,它并不是一个具体的日志实现,而是一个接口或门面(Facade),旨在为各种不同的日志框架提供一个统一的API。…...
Python办公自动化教程 - openpyxl让Excel处理变得轻松
Python办公自动化教程 - openpyxl让Excel处理变得轻松适用人群:零基础办公人员、想提高工作效率的非IT专业人士 学习目标:掌握使用Python处理Excel文件,实现日常办公自动化 前置知识:不需要任何编程基础,只要会操作电脑…...
Unity游戏自动翻译插件XUnity.AutoTranslator:打破语言壁垒的终极解决方案
Unity游戏自动翻译插件XUnity.AutoTranslator:打破语言壁垒的终极解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一款功能强大的开源Unity游戏自动翻译插件&…...
MTKClient完全指南:设备调试与固件管理的创新方法 - 适用于开发者与维修工程师
MTKClient完全指南:设备调试与固件管理的创新方法 - 适用于开发者与维修工程师 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient是一款功能强大的跨平台工具࿰…...
OpenClaw语音转写方案:千问3.5-9B处理会议录音与摘要
OpenClaw语音转写方案:千问3.5-9B处理会议录音与摘要 1. 为什么需要本地化的语音处理方案 上个月我连续参加了三场跨时区技术会议,每次会后都要花两小时整理录音和纪要。尝试过主流语音转写工具后,发现两个痛点:一是敏感技术术语…...
嵌入式Linux牛棚养殖监护系统开发实战
1. 项目概述作为一名在嵌入式系统开发领域摸爬滚打多年的工程师,我最近完成了一个很有意思的实战项目——基于嵌入式Linux的牛棚养殖监护系统。这个项目完美结合了嵌入式开发、传感器技术和Qt界面设计,实现了对养殖环境的智能化管理。不同于市面上那些简…...
SEO原创文章的发布频率应该如何确定
SEO原创文章的发布频率应该如何确定 在当今的互联网时代,搜索引擎优化(SEO)已经成为网站运营的关键环节之一。为了在百度上获得更好的排名,发布高质量的原创文章是必不可少的策略。如何确定SEO原创文章的发布频率,是许…...
QT界面设计小技巧:用QListWidget+CheckBox打造可交互列表(避坑指南)
QT界面设计实战:QListWidget与CheckBox的高效交互方案 在桌面应用开发中,列表控件与复选框的组合堪称经典交互模式。这种设计不仅直观地呈现多项选择场景,还能有效提升用户操作效率。作为QT框架中的核心组件,QListWidget与QCheckB…...
如何快速构建推荐系统:Learn-Data-Science-For-Free中的协同过滤算法终极指南
如何快速构建推荐系统:Learn-Data-Science-For-Free中的协同过滤算法终极指南 【免费下载链接】datascience This repositary is a combination of different resources lying scattered all over the internet. The reason for making such an repositary is to co…...
10个imaskjs性能优化技巧:大型表单与高频输入场景的终极实践指南
10个imaskjs性能优化技巧:大型表单与高频输入场景的终极实践指南 【免费下载链接】imaskjs vanilla javascript input mask 项目地址: https://gitcode.com/gh_mirrors/im/imaskjs imaskjs是一个功能强大的JavaScript输入掩码库,专为处理表单输入…...
DAMO-YOLO代码实例:OpenCV-Python图像预处理与后处理结果渲染详解
DAMO-YOLO代码实例:OpenCV-Python图像预处理与后处理结果渲染详解 1. 引言:从炫酷界面到核心引擎 当你打开DAMO-YOLO的赛博朋克界面,看到霓虹绿的识别框在图片上闪烁时,有没有想过这背后发生了什么?那个漂亮的界面只…...
