Добавить элементы в элемент управления Microsoft WinForm - PullRequest
3 голосов
/ 08 декабря 2010

Не могли бы вы сказать, возможно ли добавить элемент в элемент управления Microsoft WinForms?

Например: предположим, у вас есть приложение, в котором есть несколько пользователей, у каждого из которых есть свои «разрешения», которые представлены просто строками «1», «2», «3» и т. Д. У вас также есть несколько кнопок в вашем приложении, которые должны быть включены / отключены в соответствии с уровнем разрешений текущего пользователя.

Можно ли добавить «String» к элементу управления «Button», который мог бы указывать, какой уровень разрешений представляет эта кнопка.

Причина, по которой это полезно, заключается в том, что я могу перебрать все мои кнопки и отключить их, если уровень разрешений текущего пользователя недостаточно высок.

Надеюсь, это имеет смысл.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 08 декабря 2010

В элементах управления WinForms есть свойство Tag, которое можно использовать для хранения ссылки на связанную информацию. Он имеет тип object, поэтому может хранить все что угодно. (ссылка на MSDN)

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 голос
/ 08 декабря 2010

Поддержка и хранение логики в пользовательском интерфейсе не является подходящим решением, оно усложняет процесс по мере роста ваших проектов, хранит вашу логику в структурах данных и делает UI-совместимым и подходящим с использованием данных.

В любом случае, решением вашей проблемы является и IExtenderProvider, сказанное Гансом и Ответом Мэтта.

---- 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...