【问题标题】:Add Elements to Microsoft WinForm Control将元素添加到 Microsoft WinForm 控件
【发布时间】:2010-12-08 19:58:54
【问题描述】:

能否告诉我是否可以向 Microsoft WinForms 控件添加元素?

例如:假设您的应用程序有多个用户,每个用户都有自己的“权限”,这些权限仅由字符串“1”、“2”、“3”等表示。您还有您的应用程序上的几个按钮,应根据当前用户的权限级别启用/禁用。

是否可以在“按钮”控件中添加一个“字符串”,它可以指示该按钮所代表的权限级别。

这是有帮助的,因为如果当前用户的权限级别不够高,我可以循环访问所有按钮并禁用它们。

我希望这是有道理的。

谢谢。

【问题讨论】:

  • IExtenderProvider 接口就是为此而生的。

标签: c# winforms controls


【解决方案1】:

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

【讨论】:

  • 那行得通。谢谢。我会在几分钟后将其添加为答案。
【解决方案2】:

在 UI 后面维护和存储逻辑不是一个合适的解决方案,随着项目规模的扩大,这会使事情变得更加困难,将逻辑存储在数据结构中,并通过使用数据使 UI 兼容和适用。

无论如何,您的问题的解决方案是 Hans 和 Matt's Answer 所说的IExtenderProvider

----编辑----

          //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 

【讨论】:

  • “在数据结构中”是什么意思?我在一个单独的文件/类中有我的逻辑,我传入表单并从那里操作它。我知道我可能没有以正确的方式做事,因此我会感谢有经验的人提供的任何见解/提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
相关资源
最近更新 更多