C# 如何在 PropertyGrid 中,对同一double的成员显示出不同的长度的内容?

news/2025/2/7 21:12:59/文章来源:https://www.cnblogs.com/pencilstart/p/18583765

这段时间搞东西,接触到这个,整了好几天。终于 Stackoverflow 上找到一个与我思路上一样的答案。之前用了好多遍 百度 AI 的方法都牛头不对马嘴。

看来 自己对 这一套 C# 的中的反射机制中的内容还不是太熟悉。所以摸了好久。

主要思路是这样的:

PropertyGrid 可以把一个对象中 public 成员 都显示到界面上去,供使用者修改,如下:

这个对象的类是这样的:

1 public class testObject
2 {
3     [TypeConverter(typeof(CustomDoubleConverter)), PrecisonAttribute(3), Category("all"), Description("this is a double 1")]
4     public double MyDouble1 { get; set; }
5 
6     [TypeConverter(typeof(CustomDoubleConverter)), PrecisonAttribute(2), Category("all"), Description("this is a double 2")]
7     public double MyDouble2 { get; set; }
8 }

在主程序里是这样把这个 对象 与 PropertyGrid 关联起来的:

public Form1()
{
   testObject to = new testObject();
InitializeComponent();to.MyDouble1
= 1.2222f;to.MyDouble2 = 2.1f;propertyGrid1.SelectedObject = to; }

显示出来是这样的:

可以看到,通过指定不同值的 PrecisonAttribute,让两个都是 double 的值,在 PropertyGrid 里显示出不同长度的小数点后长度值。

上面 testObject 里,两个 double 成员,都指定了 自定义的 typeConverter 的类 CustomDoubleConverter,如下:

public class CustomDoubleConverter : DoubleConverter
{public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType){if (destinationType == typeof(string) && value is double doubleValue){int d = 0;if ( context != null ){AttributeCollection ac = context.PropertyDescriptor.Attributes;PrecisonAttribute pa = (PrecisonAttribute)ac[typeof(PrecisonAttribute)];if (pa != null)d = pa.Precison;}return doubleValue.ToString("N" + d, culture);}return base.ConvertTo(context, culture, value, destinationType);}
}
public class PrecisonAttribute : Attribute
{// The constructor is called when the attribute is set.public PrecisonAttribute(int value){_precison = value;}// Keep a variable internally ...protected int _precison;// .. and show a copy to the outside world.public int Precison{get { return _precison; }set { _precison = value; }}
}

以上这段代码里:

AttributeCollection ac = context.PropertyDescriptor.Attributes;PrecisonAttribute pa = (PrecisonAttribute)ac[typeof(PrecisonAttribute)];

这两句就是本文精华。之前整了好久,都找不到如何在这里获得传入的其它元数据的。主要还是自己对 TypeConverter 结构 以及 反射机制不是很熟悉。所以也没仔细去看 context 这个参数。现在想想应该还是蛮合理的:上下文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/846019.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】20241203

我觉得人活着吧,有些事儿就得逼着自己不去想。因为想了,你就感觉没法活;想活,你就不能想。【每日一题】如图所示,将物块 \(a\) 分别放入光滑的 \(A\) 轨道和 \(B\) 轨道的最高点,以零初速度滑至轨道的最低点所用时间分别为 \(t_1\) 与 \(t_2\).则已知 \(A\) 轨道与 \(B\…

编译OpenCV——ubuntu x86_64平台

在x86_64平台上编译得到两个版本的opencv:x86_64和arm64 方式与此博客一样编译OpenCV——jetson嵌入式平台 - 夕西行 - 博客园,区别只有如下几个地方 1、编译x86_64版本时最终放到默认的/usr/local目录里 2、编译arm64版本时 最终放到/opt/opencv_aarch64目录里,以便与本地默…

Azure DevOps搭建自动化部署CICD流水线

微软的CICD 1.完成CICD的组件叫做 Azure Devops 官方的链接:https://dev.azure.com/ Azure Devops 我们用的是微软的 - 云平台 不需要部署到本地部署到云上就可以了 第二种方式CICD 大多数企业不是微软系的 常用这个 Azure Devops jinkes 本期用的是第一种,微软的 (1)第一…

微软CICD有眼有手就可以部署

微软的CICD 1.完成CICD的组件叫做 Azure Devops 官方的链接:https://dev.azure.com/ Azure Devops 我们用的是微软的 - 云平台 不需要部署到本地部署到云上就可以了 第二种方式CICD 大多数企业不是微软系的 常用这个 Azure Devops jinkes 本期用的是第一种,微软的 (1)第一…

多系统集成分析——ERP与OA、PLM、MES、CRM、WMS、SRM、HR

“集成审批抓OA、集成设计抓PLM、集成生产抓MES、集成销售抓CRM、集成仓储抓WMS、集成采购抓SRM、集成人力抓HR。” 一、ERP与OA系统的集成 1、业务的审批流集成:在ERP系统中发起的销售、采购等审批流程可统一集成到OA系统中进行,审批结果再反馈回ERP系统。 2、基础数据同步集…

XMES合并主分支的操作

一、IDEA 1、先切换到远程的main分支注意:如果切换的时候,提示本地有未提交的,你可以先暂存提交(git stash)2、执行git pull。拉取最新的main分支代码。3、选择develop分支的提交,优选合并到main分支 4、推送git push,将本地main分支代码,推送到远程5、直接将本地代码…

进度管理有哪些最佳实践?

在当今快节奏的商业环境中,企业无论大小都面临着巨大的市场压力和竞争。为了在激烈的市场竞争中占有一席之地,企业不仅要追求创新和质量,还必须注重高效的执行力,尤其是在项目管理过程中,进度管理显得尤为重要。进度管理是项目管理的重要组成部分,它关系到项目能否按时交…

[编程笔记] JavaScript作用域问题

很有意思的一个bug,起初看到同事对一段代码的批注很有意思的一个bug,起初看到同事对一段代码的批注:批注地方的代码(也就是for里面的i),在实际触发时,返回是是7,而理想情况下我们希望点击哪个datagrid就返回哪个i,实际则是每次都是7,也就是for结束后的结果,6,i++,…

AtomicBoolean与ReentrantLock

AtomicBoolean与ReentrantLock AtomicBoolean 主要用来解决并发编程中的线程安全问题,防止某段代码重复执行或确保某项任务只能执行一次。代码中常用来作为一个标志变量,以控制并发流程。AtomicBoolean体现的是一种无锁机制,依靠底层的高效的CAS原子操作实现,提供高效的线程…

zsh-autosuggestions如何安装

zsh-autosuggestions如何安装 不同操作系统下安装 zsh-autosuggestions 插件的常见方法: macOS系统安装步骤确保已安装 Homebrew(若未安装,先安装 Homebrew):打开终端,输入以下命令安装 Homebrew(用于方便地安装各类软件包和工具):/bin/bash -c "$(curl -fsSL ht…

H5-19 字体属性

CSS字体属性定义字体,颜色、大小、加粗、文字样式  1、color规定文本的颜色div{color:red;}div{color:#fff000} 最常用div{color:rgb(255,0,0)}div{color:rgba(255,0,0,0-1中间任意数值)}2、font-size设置文本的大小能否管理文字的大小,在网页设计中是非常重要的。但是…

Windows mstsc 连接Ubuntu18.04 远程桌面原理和过程

前言全局说明Windows mstsc 连接Ubuntu18.04 远程桌面原理和过程一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.3737Ubuntu 18.04.6 LTS (Linux qt-vm 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux)1.2 名词…