C#PropertyGrid下拉选择数据报错

server/2024/10/25 10:43:25/
1、问题点--PropertyGrid下拉框报错

 PropertyGrid:属性窗口:滚轮选择或者手动输入不报错,下拉框选择报错  属性值无效:类型“System:String”的对象无法转化为类型“System:Int32”

 

PropertyGrid:属性窗口:滚轮选择或者手动输入不报错,下拉框选择报错  属性值无效:类型“System:String”的对象无法转化为类型“System:Boolean” 

2、原有问题代码代码
 public class IntValueConverter : TypeConverter{public override bool GetStandardValuesSupported(ITypeDescriptorContext context){return true; // 支持标准值}public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context){return new StandardValuesCollection(new[] { -1, 0, 1, 2 });}public override bool GetStandardValuesExclusive(ITypeDescriptorContext context){return true; // 只允许选择标准值}public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value){if (value is string strValue && int.TryParse(strValue, out int intValue)){return intValue;}return base.ConvertFrom(context, culture, value);}}

 

    public class BoolValueConverter : TypeConverter{public override bool GetStandardValuesSupported(ITypeDescriptorContext context){return true; // 支持标准值}public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context){return new StandardValuesCollection(new[] { true, false }); // 返回字符串选项}public override bool GetStandardValuesExclusive(ITypeDescriptorContext context){return true; // 只允许选择标准值}public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value){if (value is string strValue){// 尝试将字符串转换为布尔值if (bool.TryParse(strValue, out bool boolValue)){return boolValue;}}return base.ConvertFrom(context, culture, value);}}
3、解决问题代码
 public class IntValueConverter : TypeConverter{public override bool GetStandardValuesSupported(ITypeDescriptorContext context){return true; // 支持标准值}public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context){return new StandardValuesCollection(new[] { "-1", "0", "1", "2" });}public override bool GetStandardValuesExclusive(ITypeDescriptorContext context){return true; // 只允许选择标准值}public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value){if (value is string strValue){if (int.TryParse(strValue, out int intValue)){return intValue; // 转换为整数}}return base.ConvertFrom(context, culture, value);}}

 

    public class BoolValueConverter : TypeConverter{public override bool GetStandardValuesSupported(ITypeDescriptorContext context){return true; // 支持标准值}public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context){return new StandardValuesCollection(new[] { "true", "false" }); // 返回字符串选项}public override bool GetStandardValuesExclusive(ITypeDescriptorContext context){return true; // 只允许选择标准值}public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value){if (value is string strValue){return bool.TryParse(strValue, out bool boolValue) ? boolValue : base.ConvertFrom(context, culture, value);}return base.ConvertFrom(context, culture, value);}}
4、解决问题思路

在处理 PropertyGrid 中的下拉框选择时,确保类型转换器能够正确处理从下拉框返回的字符串值是关键。以下是解决问题的思路:

理解类型转换:

PropertyGrid 在显示下拉框时,会将选项作为字符串返回。因此,转换器需要能够处理字符串并将其转换为目标类型(如 int 或 bool)。

修改 GetStandardValues 方法:

在 IntValueConverter 中,返回的标准值应为字符串类型(例如 "-1", "0", "1", "2"),以便与下拉框的返回值匹配。

实现 ConvertFrom 方法:

在 ConvertFrom 方法中,确保能够将字符串转换为目标类型。对于整数,使用 int.TryParse;对于布尔值,使用 bool.TryParse。

确保一致性:

确保在整个代码中,属性的类型与转换器返回的类型一致。例如,如果属性是 int 类型,转换器应该返回字符串表示的整数,并在 ConvertFrom 中进行转换。

测试:

在 PropertyGrid 中测试下拉框选择,确保选择的值能够正确转换为属性的类型。


http://www.ppmy.cn/server/134692.html

相关文章

Prisma ORM 第三章 新增 更新 删除

1. 新增数据 在 Prisma 中,新增数据是一个常见的操作,可以通过 create 和 createMany 方法来实现。这两个方法分别用于创建单个记录和多个记录。下面详细介绍这两个方法及其配置项。 1. create 方法 create 方法用于在数据库中创建单个记录。你可以指…

基于Ubuntu24.04,下载并编译Android12系统源码 (一)

1. 前言 1.1 编译源码可以干什么 定制Android系统将最新版本的Android系统刷入到自己的Android设备中将整个系统源码导入到Android Studio中(可以不用编译源码来实现)。 只要有对应的Android源码版本的android.iml和android.ipr文件,就可以…

python基础综合案例(数据可视化-地图可视化)

1.基础地图使用 注意写名字的时候要写全名,比如上海市不能写出上海,不然看不到数据 鼠标点击即可看到数据 设置属性的时候不要忘记导包 # 演示地图可视化的基础使用 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts # 准…

全栈面试题】模块5-1】Oracle/MySQL 数据库基础

目录 面试题5.1 Oracle和Mysql的区别? 面试题5.2 SQL语句有多少类型 面试题5.3 mysql常用数据类型、oracle常用数据类型 面试题5.4 char、varchar2、varchar有什么区别? 面试题5.5 什么是BLOB、CLOB?MySQL的Text类型了解过吗 面试题5.6 null的…

基于卷积神经网络和 Swin Transformer 的图像处理模型

实现了一个基于卷积神经网络和 Swin Transformer 的图像处理模型。该模型主要用于对输入图像进行特征提取和处理,以实现特定的图像任务,如图像增强、去噪等。 项目完整代码下载链接:https://download.csdn.net/download/huanghm88/89909179 import torch from torch import…

Parasoft C/C++test CT 荣获TÜV SÜD认证,在安全关键应用开发与验证方面达到最佳实践标准

新闻亮点 严格而全面的认证进一步巩固了Parasoft以安全、保障和质量为优先的发展流程。 前瞻性的功能支持与开源测试框架、现代开发工作流无缝对接。 C/Ctest CT 旨在大规模自动化,将久经考验的旗舰产品的优势扩展至更广泛的测试自动化和持续合规性领域。 在北美…

【Django】增加一个自定义字段

在查询GET的结果里增加自定义字段,这个字段只展示; 这样的字段通常有:枚举类型的、外键、其它查询内容; 枚举类型 1、在models.py里枚举类型的数据通常要使用 大写的字段名称 _CHOICES 来表示; class Snort(CoreMo…

使用休眠的方式来解决电脑合盖后偶尔不能正常睡眠的问题

背景描述 用过Windows笔记本电脑的用户应该都偶尔遇到过这样的一个问题,就是电脑直接合上盖后放在包里,按道理来说应该会自动进入睡眠模式,但是等电脑再从包里拿出来时发现电脑很烫,并且已经没电了,似乎并没有进入到休…