【发布时间】:2013-05-29 17:23:17
【问题描述】:
我有一个小问题。这是我的问题的简化版本。
我有一个类,它有一个按钮列表及其名称(新建、编辑、删除)以及一个“类型”类型的对象
class test
{
private List<Button> buttons; //
private Type type;
public test(Type t)
{
this.type = t;
/* some code to create the buttons from the enum.
got this already covered but "Restore" does not get created by intention*/
}
public void setButtons(int i)
{
}
}
类型是带有 flags 属性的枚举
[Flags] enum EnumTest{None=0, New=1, Edit=2, Delete=4, Restore=8}
我想做的是让“setButtons”方法创建一个“type”实例,将“int i”的值设置为标志值,浏览按钮列表并设置“Enabled” " 按钮的属性取决于是否引发了标志,其中按钮的“名称”属性取决于枚举中的标志名称(EnumTest 或任何其他)
我尝试了几种类似
的东西 var enu = Enum.ToObject(type, i);
但我无法设置标志,或者我不知道如何设置。我正在考虑在创建它时使用反射。似乎“ToObject”方法不能很好地与 flags 属性配合使用。 “TryParse”似乎可以,但我不知道如何让它从“Type”动态加载。
请考虑到这是我的问题的高度简化版本,但它会保留其含义。
【问题讨论】:
-
当您可以将
EnumTest作为参数传递时,为什么还要传递Type? -
因为这是一个多用途类。它不仅适用于 EnumTest,而且还必须适用于其他枚举。
-
不相关,但如果这是 WPF,则不应在过程代码中创建或操作 UI 元素。那些令人作呕的类似 winforms 的 hack 真的不受欢迎,WPF 不能很好地处理它们。
标签: c# wpf winforms enums flags