Tag: uitypeeditor

如何在运行时没有PropertyGrid的情况下打开复杂属性的属性对话框

考虑一个带有一些自定义UserControl和Button的表单。 在Visual Studio设计器中,您可以单击属性右侧的按钮(就像更改控件(如Font或Image )上的其他常用属性时一样)并使用此属性的编辑器。 在运行时,如果已将PropertyGrid添加到表单并将其指向此UserControl ,则还可以在运行时单击该复杂属性右侧的按钮,并获取相同的UITypeEditor对话框。 如何在运行时通过单击按钮而不在表单上显示PropertyGrid来获取此编辑器窗口? 虽然我从这个描述符中获得了PropertyDescriptor和UITypeEditor ,但是在调用UITypeEditor.EditValue以显示编辑器时,我不知道要调用什么来获取ITypeDescriptorContext和IServiceProvider的实例。 这与为属性构建自定义UITypeEditor有关: 使用丰富的设计时function构建Windows窗体控件和组件 。 在这种情况下,我已经配置了所有这些并且它都运行得很漂亮所以我只想在运行时调用编辑器窗口。

带参数的C#UITypeEditor

我创建了一个自定义UITypeEditor ,它启动一个表单(StringSelector)来显示用户选择的字符串列表。 问题是这个表单需要知道要使用的StringManager(stringmanage只是一个包含List中允许的所有字符串的类)。 当我创建这个表单时,我将StringManager作为参数传递给构造函数,但我无法弄清楚如何使用UITypeEditor执行此操作。 下面是我当前的代码,它使用一个没有参数的构造函数,只是为了得到要显示的表单,但是显然没有字符串,因为我没有调用构造函数的参数版本。 如何将参数传递给UITypeEditor,然后我可以在EditValue函数中使用它? 非常感谢。 class StringSelectorEditor : UITypeEditor { public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value) { IWindowsFormsEditorService svc = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; StringItem item = value as StringItem; if (svc != null) { // ###### How do I pass a […]

自定义ColorEditor在Color结构上无法正常工作

我在这里问如何在Color结构的属性网格中使用自定义颜色对话框: 在PropertyGrid中使用自定义颜色选择器对话框 从该链接可以看到MyColorEditor类的代码(如果需要)。 现在我可以使用自定义颜色对话框,但前提是我使用自己的结构,即该示例中的RGBA。 如果我在color struct上使用这个自定义类型编辑器,它在属性网格中看起来像这样: 但是,如果我使用我创建的RGBA结构,它看起来正确: 出现问题,因为我认为UITypeEditorEditStyle.Modal不适用于GetEditStyle()。 使用Color结构可能比使用我的自定义颜色结构更好,因为我可以为Color属性设置DefaultValue,而无需编写我自己的类型转换器。 所以我的问题是如何在Color struct上使用自定义编辑器。

如何为闭源类型的所有属性注入自定义UITypeEditor?

我想避免在我编写自定义UITypeEditor的某个类型的每个实例上放置EditorAttribute。 我不能在类型上放置EditorAttribute,因为我无法修改源代码。 我引用了将要使用的唯一PropertyGrid实例。 我是否可以告诉PropertyGrid实例(或所有实例)在遇到特定类型时使用自定义UITypeEditor? 这是一篇MSDN文章,它提供了如何在.NET 2.0或更高版本中执行此操作的起点。