.net – 使用可浏览,可扩展字段创建属性
为了澄清我的要求,请查看设计器中的Font属性.单击其下拉列表时,您将获得ForeColor,ImeMode,Language等选项.
我想要同样的下拉列表,允许我输入我自己添加到设计器的属性的多个值(它将用于我的自定义控件中的数据库属性,并为您提供选择版本,类型等的选项. ). 我该怎么做呢?我看了一遍,我找不到解决方案. 谢谢. 解决方法
您正在寻找的是由TypeConverter提供的.具体来说,您需要一个ExpandableObjectConverter – 这会“打破”子属性.我的假类型 – 它是你控制的替身:
Public Class Widget Public Property Name As String Public Property FooValue As Integer Public Property XYOffset As Offset ... 偏移本身就是一个由三个属性组成的类型: Public Class Offset Public Property Name As String Public Property X As Int32 Public Property Y As Int32 ... Public Overrides Function ToString() As String Return String.Format("{0}: ({1},{2})",Name,X.ToString,Y.ToString) End Function 如果不清楚,Widget将是您的控件,XYOffset将是您要询问的属性. ToString()覆盖是为了使您不会在属性网格中获得丑陋的类型名称(WindowsApplication14.SomeType). PropertyGrid控件中的结果: 它被禁用,因为NET不知道如何编辑Offset对象.这只需要一个最简单的TypeConverters: Public Class XYOffsetConverter Inherits ExpandableObjectConverter ' more to come End Class 装饰物业: Public Class Offset ... <TypeConverter(GetType(XYOffsetConverter))> Public Property XYOffset As Offset Offset属性可以使用:< TypeConverter(GetType(ExpandableObjectConverter))>但是既然你提到这是一个CustomControl,你稍后需要在TypeConverter中使用其他功能(参见注释).结果是核心功能几乎没有工作: 由于NET确实知道如何编辑String和Int32,因此编辑可以处理打开的属性.缺少两件事: 修复第一个很容易.只需在Offset属性中添加一个属性: Public Class Offset <NotifyParentProperty(True)> Public Property Name As String <NotifyParentProperty(True)> Public Property X As Int32 <NotifyParentProperty(True)> Public Property Y As Int32 现在,每个子属性编辑后的摘要更新: 修复B并不难 – 你只需要解析你在ToString()中创建的字符串并从中返回一个新的偏移量.然而,它没有必要,只是很好,因为他们可以打开它并编辑每个值. 另一件事是它取决于那些东西是什么,我不想猜你的类型(类)是什么样的.大多数TypeConverters都是特定类型的,我不知道你的样子. 我为示例使用了属性网格,但控件在VS属性窗口中的工作方式相同. 注意你表示这是一个自定义控件.在这种情况下,您将需要帮助VS序列化您的类型,因为它不知道如何创建在设计器中创建的偏移类型.这是TypeConverter的另一项工作.我只是不知道你的样子. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |