您能否告诉我是否可以向Microsoft WinForms控件添加元素?
例如:假设您有一个具有多个用户的应用程序,每个用户都有自己的“权限”,这些权限仅由字符串“1”,“2”,“3”等表示。您还有应用程序上的几个按钮,应根据当前用户的权限级别启用/禁用。
是否可以在“按钮”控件中添加“字符串”,这可以指示此按钮所代表的权限级别。
这有用的原因是因为我可以遍历所有按钮并在当前用户的权限级别不够高时禁用它们。
我希望这是有道理的。
感谢。
答案 0 :(得分:4)
WinForms控件上有一个Tag
属性,可用于存储对相关信息的引用。它的类型为object
,因此它可以存储任何内容。 (msdn reference)
myButton.Tag = "1";
如果您想存储多个内容,请为其创建一个类:
class UserTag
{
public string Permission {get;set;}
public string Name {get;set;}
}
....
myButton.Tag = new UserTag { Permission="1", Name="Alice" };
....
// Use like this: ((UserTag)myButton.Tag).Permission
答案 1 :(得分:1)
维护和存储UI背后的逻辑并不是一个合适的解决方案,随着项目规模的扩大,使事情变得更加困难,将逻辑存储在数据结构中,并通过使用数据使UI兼容和合适。
无论如何,问题的解决方案都是IExtenderProvider
Hans和Matt的答案所说的。
---- ---- EDIT
//this is just a simple sample! :D
Dictionary<string, int[]> CtrlType = new Dictionary<string, int[]>();
CtrlType.Add(button1.Name, new int[] { 2, 3 });
//add another controls status or attributes for user customizing
//.
//.
//.
//somewhere in your form UI Customization for users
button1.Enabled = CtrlType[button1.Name].Contains(UserID) ? true : false;
//handle another controls attributes