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