前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使枚举类型的选项在VS的属性窗里显示为中文

使枚举类型的选项在VS的属性窗里显示为中文

作者头像
明年我18
发布于 2019-09-18 03:37:44
发布于 2019-09-18 03:37:44
1.2K00
代码可运行
举报
文章被收录于专栏:明年我18明年我18
运行总次数:0
代码可运行

我们自己做的组件,一般希望它的属性在设计时能够在属性窗里显示为中文,可以在属性上添加System.ComponentModel.DisplayNameAttribute标注达到这个目的。但是,枚举的选项如何以中文的形式显示在属性窗里呢?

假设我们有如下枚举:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: public enum MyEnum   2: {       3:     A,      4:     B   5: }

在某个组件里有一个MyEnum类型的属性,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: [DisplayName("我的枚举")]   2:  public MyEnum MyEnum   3:  {   4:      get;set;   5:  }

在设计时把这个组件拖到设计器中,发现属性窗中出现了“我的枚举”这个属性,但选项是A和B,如何让它们示为“选项一”和“选项二”呢?这就需要利用到TypeConverter了,因为PropertyGrid利用TypeConverter来显示枚举的选项的。另外,为了使扩展性更好,我们还需要DescriptionAttribute.

继承System.ComponentModel.EnumConverter,实现自己的Converter,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: public class MyEnumConverter : EnumConverter   2: {   3:     private IDictionary<object, string> dic;   4:     private IDictionary<string, object> dic2;   5:     private readonly Type type = typeof(MyEnum);   6:     7:     public MyEnumConverter()   8:         : base(typeof(MyEnum))   9:     {  10:     }  11:       12:    13:     public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)  14:     {  15:         if(value is string)  16:         {  17:             if(dic2 != null && dic2.ContainsKey(value as string))  18:             {  19:                 return dic2[value as string];  20:             }  21:         }  22:         return base.ConvertFrom(context, culture, value);  23:     }  24:    25:     public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)  26:     {  27:         if(destinationType == typeof(string))  28:         {  29:             if(dic == null)  30:             {  31:                 dic = new Dictionary<object, string>();  32:                 dic2 = new Dictionary<string, object>();  33:                 Type reflectionType = TypeDescriptor.GetReflectionType(this.type);  34:                 if (reflectionType == null)  35:                 {  36:                     reflectionType = this.type;  37:                 }  38:                 FieldInfo[] fields = reflectionType.GetFields(BindingFlags.Public | BindingFlags.Static);  39:                 ArrayList list = null;  40:                 if ((fields != null) && (fields.Length > 0))  41:                 {  42:                     list = new ArrayList(fields.Length);  43:                 }  44:                 if (list != null)  45:                 {  46:                     foreach (FieldInfo info in fields)  47:                     {  48:                         object fieldValue = info.GetValue(info);  49:                         string desc = fieldValue.ToString();  50:                         DescriptionAttribute descriptionAttribute = null;  51:                         foreach (DescriptionAttribute a in info.GetCustomAttributes(typeof(DescriptionAttribute), false))  52:                         {  53:                             descriptionAttribute = a;  54:                             break;  55:                         }  56:                         if (descriptionAttribute != null)  57:                         {  58:                             desc = descriptionAttribute.Description;  59:                         }  60:                         dic[fieldValue] = desc;  61:                         dic2[desc] = fieldValue;  62:                     }  63:                 }  64:             }  65:             return dic[value];  66:         }  67:           68:         return base.ConvertTo(context, culture, value, destinationType);  69:     }  70: }

然后修改MyEnum,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: public enum MyEnum   2: {   3:     [Description("选项一")]   4:     A,   5:     [Description("选项二")]   6:     B   7: }

并且修改组件里的属性,加入TypeConverterAttribute,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1: [DisplayName("我的枚举")]   2: [TypeConverter(typeof(MyEnumConverter))]   3: public MyEnum MyEnum   4: {   5:     get;   6:     set;   7: }

这样,就可以以中文的形式在属性窗里显示枚举的选项了,如下图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-06-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Metasploit渗透测试指南(全)
《metasploit渗透测试指南》介绍metasploit——近年来最强大、最流行和最有发展前途的开源渗透测试平台软件,以及基于metasploit进行网络渗透测试与安全漏洞研究分析的技术、流程和方法。
用户3157710
2018/10/10
1.1K0
Metasploit渗透测试指南(全)
为什么你的企业需要渗透测试
渗透测试是在安全、符合规定并且受控的条件下针对公司精心策划的经过批准的网络攻击。渗透测试人员努力发现和利用组织环境的设定范围内的漏洞,在黑客等犯罪分子利用它们之前提前分析弱点。
德迅云安全--陈琦琦
2024/03/29
1880
红蓝对抗中的近源渗透
近源渗透是这两年常被安全业内人员谈起的热门话题。不同于其他虚无缥缈的安全概念,近源渗透涉及到的无线安全、物理安全、社会工程学都十分容易落地实践,许多企业内部的攻防对抗演练也都出现了看上去“很过分”的近源渗透攻击手法,给防守方团队上了生动的一课。
FB客服
2020/09/24
9760
红蓝对抗中的近源渗透
优秀的 WIFI 渗透工具汇总
今天给大家收集和整理了一些常用的 WiFi 渗透工具,工具对于我们这些人来说是最熟悉的东西之一了,选择一个好的工具会让你事半功倍。(工具顺序不分名次)
信安之路
2018/08/08
6.7K0
优秀的 WIFI 渗透工具汇总
常用渗透测试系统
是基于Ubuntu的自启动运行光盘,它包含了一套安全及计算机取证工具。它其实是依靠融合Auditor Security Linux和WHAX(先前的Whoppix)而创建成的。
黄啊码
2020/05/29
1.2K0
Metasploit渗透测试魔鬼训练营
首本中文原创Metasploit渗透测试著作,国内信息安全领域布道者和资深Metasploit渗透测试专家领衔撰写,极具权威性。以实践为导向,既详细讲解了Metasploit渗透测试的技术、流程、方法和技巧,又深刻阐释了渗透测试平台背后蕴含的思想。
用户3157710
2018/10/10
1.4K0
Metasploit渗透测试魔鬼训练营
渗透测试流程与方法
渗透测试(penetration test)是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析师从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。渗透测试还具有的两个显著特点是:渗透测试是一个渐进的并且逐步深入的过程。渗透测试是选择不影响业务系统正常运行的攻击方法进行的测试。
Ms08067安全实验室
2019/11/21
1.1K0
渗透测试流程与方法
如何写好一份渗透测试报告?
当你连续奋战了好几天,终于合上了笔记本,想要出去透透风时,一个熟悉的问句传来:“你好,请问什么时候可以交付报告?” 有成千上万的书籍讲解什么是信息安全,什么是渗透测试,也有数不清的培训课程视频。但是,我敢打赌,在这些材料中,只有不到10%是在讲写报告的事情。在一个完整的渗透测试过程中,有将近一半的时间都用在了编写报告上,这听起来很让人吃惊,但是也并不奇怪。 教会某人写报告不像教会某人制作一个完美的缓冲区溢出那么有意思,大部分的渗透测试人员情愿复习19次TCP数据包结构的工作原理,也不愿意写一份报告。 不管我
FB客服
2018/02/08
2.3K0
如何写好一份渗透测试报告?
Web端渗透测试初探
在数字化时代,Web 应用程序已经成为我们个人和职业生活中不可或缺的一部分。无论是网上购物、银行业务,还是社交网络和通讯,这些应用程序已经彻底改变了我们与虚拟世界的互动方式。然而,随着我们对 Web 应用程序的依赖越来越深,它们也成为了网络威胁和攻击的主要目标。这就是 Web 应用程序安全测试发挥作用的地方。
FunTester
2024/07/05
1370
Web端渗透测试初探
用Kali Linux做渗透测试,这篇就够了!
近年正是国内网络安全相关产业飞速发展的阶段,网络安全问题已经成为社会“热点中的热点”,对Kali Linux的研究也越来越热门。过去,几乎是高手才会涉及的Kali Linux,也成为了网信爱好者们争相学习的工具,从而受到了广大网络安全从业人员的喜爱。
物联网安全小编
2021/04/21
2.9K0
为渗透测试准备的 10 大黑客工具评论(0)
Fiddler 是一个免费的 Web 代理工具,具有浏览器和平台不可知性的特点。它有许多功能用来辅助渗透测试人员。它是一个跨平台工具(几乎所有操作系统),允许用户调试来自任何系统的网络流,甚至包括智能手机和平板。从渗透测试者的角度看,Fiddler 主要用来拦截和解密 HTTPS 流,就像它的名字建议的那样,用户能方便地修改和检查数据包来识别应用漏洞。
用户1673664
2018/08/03
9870
无线安全系列 2.1 了解你的实验环境
第二章的目标是搭建一个无线网络的渗透测试环境,本节是第一节,对无线渗透实验环境做了解和概述。
用户1631416
2019/10/09
5920
无线安全系列 2.1 了解你的实验环境
无线安全系列 1.3 熟悉Wi-Fi攻击工作流程
本文由 玄魂工作室 power-li 根据《building a pentesting lab for wireless network》翻译修改而来
用户1631416
2019/09/24
5670
如何利用Fluxion诱惑目标用户获取WPA密码
前言 由于ISP替代了易受攻击的路由器,供渗透测试人员选择的诸如Reaver这样的工具越来越少,对于特定的目标,哪些工具有用与否能够确定的也很少。而如果采用暴力破解WPA密码,可能会需要大量的时间。幸运的是,几乎所有的系统都有一个常见的漏洞,那就是用户。 挑选最弱的一环攻击 用户几乎总是系统中最薄弱的环节,所以对他们的攻击往往是首选,因为他们成本低而又有效。尤其是对于那些网络安全经验比较匮乏的用户或者是非专业技术型的中小型企业来说,他们的电脑或者系统存在许多易受攻击和未修复的漏洞,比如默认的路由管理密码
FB客服
2018/02/24
2.3K0
如何利用Fluxion诱惑目标用户获取WPA密码
什么是渗透测试?
渗透测试告诉系统上采用的现有防御措施是否足够强大,可以防止任何安全漏洞。渗透测试报告还建议了可以采取的对策,以减少系统被黑客入侵的风险。
用户7466307
2020/06/16
1.4K0
『渗透测试基础』| 什么是渗透测试?有哪些常用方法?如何开展?测试工具有哪些?优势在哪里?
虫无涯
2023/12/04
1.6K2
渗透测试流程及方法论讲解(web安全入门04)
渗透测试人员应能理解安全弱点,将之分类并按照风险等级(高危、中危、低危、信息泄露)
黑战士
2022/01/15
2.8K0
红蓝对抗之近源渗透
近源渗透(物理渗透)是红蓝对抗演练中的一个关键点,从相关新闻及实际测试结果来看,许多企业线上部署各种安全设备严阵以待,结果马奇诺防线在线下被物理渗透绕过 —— 物理安全或许就是部分企业的短板。本期TSRC特别邀请到腾讯企业IT部蓝军团队成员、《黑客大揭秘:近源渗透测试》第二作者杨芸菲(yyf),他将撰文与大家一起探讨近源渗透攻防。同时也向对近源渗透感兴趣的同志推荐该书。
腾讯安全应急响应中心
2020/09/24
1.4K0
红蓝对抗之近源渗透
Kali Linux 无线渗透测试入门指南 第五章 攻击 Web 设施
这一章中,我们会攻击 WLAN 设施的核心。我们作为攻击者,会专注于如何使用不同的新型攻击向量和诱使授权客户端连接我们,来渗透授权网络。
ApacheCN_飞龙
2022/12/01
7020
18款好用的网络安全渗透测试工具推荐
渗透测试,是专业安全人员为找出系统中的漏洞而进行的操作,这也是进行攻击前的第一个环节。
网络安全自修室
2022/01/04
6.1K0
18款好用的网络安全渗透测试工具推荐
推荐阅读
相关推荐
Metasploit渗透测试指南(全)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档