gpt4 book ai didi

.net - 如何强制对系统类型使用自定义 UITypeEditor

转载 作者:行者123 更新时间:2023-12-01 18:59:09 24 4
gpt4 key购买 nike

我有一个自定义的 UITypeEditor,用于使用 propertygrid 与我的程序进行颜色选择,但如果我只公开 system.drawing.color,我似乎无法激活它。我需要用 CustomType 包装 Color,然后它才会调用我的 UITypeEditor。

注意属性TheColour它的工作原理。 颜色没有。

当我打开 propertyGrid 时,我可以看到 GetEditStyle 是通过两种方法调用的,但是当涉及到 EditValue 时,只有当您在 propertygrid 中选择 TheColour 时才会调用它。当您选择“颜色属性”时,将显示“正常颜色”下拉列表

我错过了什么?

<CategoryAttribute("Order Colour"), _
Browsable(True), _
DisplayName("The Colour"), _
Description("The background colour for orders from this terminal"), _
EditorAttribute(GetType(IKMDependency.ColourSelectorEditor), _
GetType(System.Drawing.Design.UITypeEditor))> _
Public Property TheColour() As MyColour
Get
Return mMyColor
End Get
Set(ByVal value As MyColour)
If value.Colour <> mMyColor.Colour Then
mColor = value.Colour
mMyColor = value
mIsDirty = True
End If
End Set
End Property

<CategoryAttribute("Order Colour"), _
Browsable(True), _
DisplayName("Colour"), _
Description("The background colour for orders from this terminal"), _
EditorAttribute(GetType(IKMDependency.ColourSelectorEditor), _
GetType(System.Drawing.Design.UITypeEditor))> _
Public Property Colour() As Color
Get
Return mColor
End Get
Set(ByVal value As Color)
If mColor <> value Then
mColor = value
mMyColor = New MyColour(mColor)
mIsDirty = True
End If
End Set
End Property

最佳答案

问题在于它注意到关联的 TypeConverter 支持枚举值。我们需要禁用它;请注意,我们还可以继承默认实现来获取诸如颜色预览绘画之类的内容(C# 中的示例,但应该很容易翻译):

class MyColorEditor : ColorEditor {
public override UITypeEditorEditStyle GetEditStyle(
ITypeDescriptorContext context) {
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(
ITypeDescriptorContext context, IServiceProvider provider, object value) {
MessageBox.Show(
"We could show an editor here, but you meant Green, right?");
return Color.Green;
}
}
class MyColorConverter : ColorConverter { // reference: System.Drawing.Design.dll
public override bool GetStandardValuesSupported(
ITypeDescriptorContext context) {
return false;
}
}
class TestObject
{
[Category("Order Colour"), Browsable(true), DisplayName("Colour")]
[Description("The background colour for orders from this terminal")]
[Editor(typeof(MyColorEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(MyColorConverter))]
public Color Colour {get;set;}
}

如果您希望将其应用于所有 Color 属性,还有一种方法可以做到这一点,这样您就不需要装饰每个属性;在应用程序初始化代码的某个位置,执行:

TypeDescriptor.AddAttributes(typeof(Color),
new EditorAttribute(typeof(MyColorEditor), typeof(UITypeEditor)),
new TypeConverterAttribute(typeof(MyColorConverter)));

关于.net - 如何强制对系统类型使用自定义 UITypeEditor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4067010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com