Как в Group Box сделать не кликабельные кнопки?
Вопрос такой, при входе через 1 форму у меня есть 3 пользователя: 1.Админ 2.Мастер 3.Клиент Каким образом можно сделать так чтобы панель элементов Group Box и находящиеся в нем кнопки были не кликабельные? Частичка кода:
public MainForm(int x)
{
string status;
InitializeComponent();
switch (x)
{
case 1: status = "Вы зашли как: Администратор";
label1.Text = status;
break;
case 2: status = "Вы зашли как: Мастер";
label1.Text = status;
break;
case 3: status = "Вы зашли как: Клиент";
label1.Text = status;
break;
}
}
Ну суть в том, что допустим можно сделать groupbox1.Visible==false;, но это не совсем то, что я хотел увидеть. Хочется чтобы оно не исчезало, а просто не кликалось.

Ответы (1 шт):
Не пишите свой код в конструкторе окна, используйте обработчик события Form.Load. В конструкторе допускается только запись полученных в аргументы данных в поля или свойства класса. Конструктор должен выполняться максимально быстро и не должен содержать кода, способного вызвать исключение.
Используйте runtime структуры данных для того, что может изменяться, нарример словарь Dictionary<>. Например, вдруг вы захотите добавить еще одну роль, тогда придется переписывать код. Роли можно сохранить например в бд. Для каждой роли можно выделить список привелегий, при это интерфейс должен будет реагировать именно на привелегии у роли, а не на роль. Но это на будущее.
Чтобы отключить взаимодействие с контролом, используйте свойство Control.Enabled.
Если оставить то, что есть, то можно завести такой словарик.
private readonly Dictionary<int, string> _roleNames = new Dictionary<int, string>
{
[1] = "Администратор",
[2] = "Мастер",
[3] = "Клиент"
};
private readonly int _currentRole;
public MainForm(int role)
{
InitializeComponent();
_currentRole = role;
}
private void MainForm_Load(object sender, EventArgs e)
{
label1.Text = $"Вы зашли как: {_roleNames[_currentRole]}";
groupbox1.Enabled = _currentRole < 3; // 1 и 2
groupbox2.Enabled = _currentRole < 2; // только 1
}