Добавление элементов в элемент управления Microsoft WinForm

#c# #winforms #controls

#c# #winforms #элементы управления

Вопрос:

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

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

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

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

Я надеюсь, что это имеет смысл.

Спасибо.

Комментарии:

1. Интерфейс IExtenderProvider предназначался для этого.

Ответ №1:

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

 myButton.Ta& = "1";
  

Если вы хотите сохранить более одной вещи, создайте для нее класс:

 class UserTa&
{
    public strin& Permission {&et;set;}
    public strin& Name {&et;set;}
}

....
myButton.Ta& = new UserTa& { Permission="1", Name="Alice" };
....
// Use like this:  ((UserTa&)myButton.Ta&).Permission
  

Комментарии:

1. Это сработает. Спасибо. Я добавлю это в качестве ответа через несколько минут.

Ответ №2:

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

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

—-РЕДАКТИРОВАТЬ—-

           //this is just a simple sample! :D
        Dictionary<strin&, int[]&&t; CtrlType = new Dictionary<strin&, int[]&&t;();
        CtrlType.Add(button1.Name, new int[] { 2, 3 });
        //add another controls status or attributes for user customizin&
        //.
        //.
        //.

        //somewhere in your form UI Customization for users
        button1.Enabled = CtrlType[button1.Name].Contains(UserID) ? true : false;
        //handle another controls attributes 
  

Комментарии:

1. Что вы имеете в виду «в структурах данных»? У меня есть моя логика в отдельном файле / классе, и я передаю форму и манипулирую ею оттуда. Я знаю, что, вероятно, я делаю что-то неправильно, поэтому я был бы признателен за любую информацию / советы от кого-то опытного.