C#PropertyGrid下拉选择数据报错

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 中测试下拉框选择,确保选择的值能够正确转换为属性的类型。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记:SIBO: A Simple Booster for Parameter-Efficient Fine-Tuning

ACL 2024 1 intro 基于 Transformer 的大模型一般都有很多层 在广泛采用的 PEFT 技术(包括 Adapters 和 LoRA)中,尤其是在深层中,也存在过度平滑现象(即token之间的相似度很高)论文评估了同一语句中 toke…

【Linux学习】(3)Linux的基本指令操作

前言 配置Xshell登录远程服务器Linux的基本指令——man、cp、mv、alias&which、cat&more&less、head&tail、date、cal、find、grep、zip&tar、bc、unameLinux常用热键 一、配置Xshell登录远程服务器 以前我们登录使用指令: ssh 用户名你的公网…

华为云容器引擎(CCE):赋能企业云原生转型

在当今数字化时代,企业面临着日益复杂的应用部署和管理挑战。为了解决这些问题,容器技术应运而生,成为云原生架构的核心。华为云容器引擎(CCE)作为一款全面的容器管理解决方案,旨在帮助企业实现高效、灵活的…

Redis 安装部署与常用命令

目录 一、关系数据库与非关系型数据库 1.1 关系型数据库 1.2 非关系型数据库 1.3关系型数据库和非关系型数据库区别 (1)数据存储方式不同 (2)扩展方式不同 (3)对事务性的支持不同 1.4 非关系型数据…

腾讯推出ima.copilot智能工作台产品 由混元大模型提供技术支持

腾讯公司近期推出了一款名为ima.copilot(简称ima)的智能工作台产品,它由腾讯混元大模型提供技术支持。这款产品旨在通过其会思考的知识库,为用户开启搜读写的新体验。ima.copilot的核心功能包括知识获取、打造专属知识库以及智能写…

【算法】递归系列:递归初介绍,练习:231.2 的幂、

目录 一、理解递归 1、什么是递归? 2、为什么会使用递归? 3、递归使用的场景? 4、那么如何写出递归解法? 二、实践 231. 2的幂 1.函数头的设计 2.只关心某一个子问题是如何解决的 ->函数体的书写 3.注意一下递归函数的出…

个人品牌塑造与商业增长的加速器:开源AI智能名片2+1链动模式S2B2C商城小程序源码的应用研究

摘要:本文旨在深入探讨个人品牌塑造与商业增长过程中的核心要素,特别是“开源AI智能名片21链动模式S2B2C商城小程序源码”在提升品牌影响力、吸引潜在客户、促进团队协作及推动商业增长方面的具体应用与显著成效。通过详细分析一位微商从业者的实际案例&…

零代码快速开发智能体 |甘肃旅游通

在互联网信息爆炸的时代,寻找一处让人心动的旅游胜地往往需要花费大量的时间和精力。而今天,我要向大家介绍一款能够帮助你轻松规划甘肃之行的智能体——“甘肃旅游通”。这款智能体通过低代码开发,集合了丰富的旅游信息和个性化推荐功能&…

4种鼓励创业创新的方法

随着市场趋于饱和,许多企业,尤其是初创企业,很难在竞争中保持领先地位。技术为企业彻底改变其营销和管理策略铺平了道路。另一个经过实践检验的成功渗透特定市场的方法是在办公室内部激发创新,从员工到品牌皆如此。 那么究竟如何…

Ajax笔记

介绍 Ajax是一种网页开发技术,全称是Asynchronous JavaScript and XML(异步JavaScript和XML)。作用如下: 数据交换:可以通过Ajax给服务器发送请求,并获取服务器响应的数据。即前端动态的发送Ajax到服务器端…

秦时明月2搭建笔记

1.具体配置 数据库不修改,如果修改了,gm那边也要 2.数据库 3.上传配置文件出现问题 参考:对于测试时,错误信息 Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large-CSDN博客 4.启动tomcat&#x…

指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路

定义一些关键字代表的意义 STRUCT: 代表需要输入的格式化的信息IMPORT: 代表需要输入的外部信息, 这些信息通常是客观的SEARCH: 需要从某地比如数据库检索搜集信息SUM: 一种宏观的加和操作, 比如两个股票户ABAB,微观上实际还是有差异GROUP: …

Umi UI报错:连接失败,请尝试重启dev服务

Umi UI连接失败,请尝试重启dev服务 使用umi ui时遇到以下问题 报错如下 从报错可以看出是淘宝镜像失效的问题,检查淘宝镜像 可以看出淘宝镜像是最新的,并无问题 经过查找发现报错是因为依赖文件中使用了旧的淘宝镜像,在node…

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS,从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…

开发涉及的安全规范整理

#1024程序员节|征文# 文章目录 前言安全场景与措施API调用方式鉴权参数校验日志打印数据保存加密 总结 前言 这篇文章我们来整理下写代码和方案设计中的安全规范问题,内容偏服务端,即使是入门的新人,如果你对安全有所了解会让成熟…

go语言中的Scanf()输入函数

Scanf() 第一种情况 package mainimport "fmt"func main() {var a intfor {fmt.Println("请输入一个整数:")fmt.Scanf("%d", &a)fmt.Println("----------------", a)} }运行结果: 解释: 出现这种现象是因…

CentOS 8在Linux虚拟机修改IP地址,出现:错误:“ens160“ 不是活动的连接。错误:未提供活动连接。

问题:错误:"ens160" 不是活动的连接。错误:未提供活动连接。 1.查看网络服务运行状态: 1)CentOS 7执行命令:systemctl status network 2)CentOS 8执行命令:systemctl status NetworkManager&a…

双十一有哪些适合学生党的好物?五款学生党必备好物分享

在双十一这个全民狂欢的购物盛宴中,不仅仅是寻找生活的小确幸,更是自我提升与投资的最佳时机。学习,作为个人成长的阶梯,其相关的好物选择显得尤为重要。本文精选了一系列学习、生活神器,旨在为您的学习之旅增添动力与…

手机防窥膜的工作原理是怎样的?有必要使用防窥膜吗?

在信息高度发达的社会中,我们通过手机可以实现非常多的操作,同时手机中有存在许多我们的隐私信息,伴随使用手机的时间增多,手机中的信息也有可能被暴露,尤其是在公共场所旁人很容易通过瞥视你的手机屏幕获取到一些信息…

青少年编程能力等级测评CPA C++(三级)-试卷1

青少年编程能力等级测评CPA C(三级)-试卷1 一、单项选择题(共15题,每题3分,共45分) CP3_1_1.以下有关模拟算法的叙述中,不正确的是( )。 A.模拟…