【发布时间】:2019-11-25 01:10:37
【问题描述】:
我有 enum 比如说:
public enum Color
{
red,
green,
blue
}
并且有两个班级。具有 enum 的属性。
public class ClassA
{
public Color Color{get;set;}
}
public class ClassB
{
[InvisibleFlag(Color.red)] // I want something like that
public Color Color{get;set;}
}
现在在 Windows 窗体设计器中,我只想从 ClassB 的 Color 枚举中隐藏红旗。
我知道我可以创建一个单独的枚举。但为什么重复值?我只举了一个简单的例子。
我想可能会对可以帮助我的上级有所帮助。
描述符 API。我讨厌。 ;(
也许像TypeDescriptor.AddAttributes(object, new BrowsableAttribute(false));
这个answer 在这种情况下不起作用。我不想将Browsable 属性应用于枚举标志,因为它在所有类的属性网格中隐藏了该标志。我希望能够仅隐藏特定类的特定枚举值,而不是所有类。
【问题讨论】:
-
您可以使用 TypeConverter,其中,在
GetStandardValues()方法覆盖中,您可以过滤 Enum 值以返回排除InvisibleFlag属性指定的值的新集合。您还必须覆盖CanConvertFrom和ConvertFrom,以将 Enum 的字符串表示形式转换为 Enum 值。您还需要使用两个构造函数创建InvisibleFlag自定义属性:一个接受枚举类型,一个接受字符串。应使用[DefaultValue(...)]属性,以避免默认分配给排除的枚举值。 -
@Ňɏssa:“这与 Windows 窗体设计器毫无关系”——不是吗?他们似乎在要求专门调整设计器中的行为。 IE。防止
red值在设计器中显示时成为类的属性网格中的选项。
标签: c# .net winforms windows-forms-designer propertygrid