在设计时为复杂属性实现自定义编辑器时,我仍在学习绳索。
作为一个简单的起始点,我正在尝试对ICollection<string>
类型的属性进行设计时编辑。
到目前为止我所做的是:
StringsEditor
类,它派生自UITypeEditor
并显示一个下拉列表,开发人员可以在不同的行中输入一串字符串,然后将这些字符串添加到集合中。这很好。StringsConverter
类,它派生自TypeConverter
并在类型为string
和ICollection<string>
的对象之间进行转换(以及任何实现T
的类型ICollection<string>
{1}})以便当开发人员关闭StringsEditor
显示的下拉列表时,框中显示的文本是逗号分隔的输入字符串列表。重新打开下拉列表会再次显示字符串,每行一个。到目前为止,我的工作成果是,在设计时,一切似乎都很有效。用户可以修改属性,在其内容中添加和删除字符串,并且属性网格中显示的文本与集合中的内容相匹配。
我还没弄清楚 - 这并不让我感到惊讶 - 是如何实际保存此系列超出设计时间,以便输入的值...你知道, 。我的理解是,目前,属性正在设计时(由我)编辑,但由于我所应用的任何更改都没有对控件的生成InitializeComponent
方法产生任何影响,因此对该属性没有任何影响。 class 我正在设计(只有我的IDE当前显示的实例)。
但很明显,可以将您的值放入InitializeComponent
调用中。事实上,我偶然发现这对于DirectoryInfo
类型的属性具有适当的UITypeEditor
神奇地“正常工作”(我创建了另一个名为DirectoryEditor
的编辑器,它只显示一个{ {1}}并为所选的任何路径提供FolderBrowserDialog
对象,这令人惊讶 最终更新了类的DirectoryInfo
方法。所以我知道可以做到。我只是想找人指点我正确的方向。