Извините, мой вопрос не ясен, поэтому я редактирую его снова:

Я использую конструктор окон Visual Studio и создаю группу из n кнопок, чтобы они выполняли одно и то же действие, поэтому мой код выглядит так:

void main()
{
   f1();
   f2();
   ...
   fn();
}

void f1()
{
    button1.Enable = true;
}

void f2()
{
    button2.Enable = true;
}
...
void fn()
{
    buttonn.Enable = true;
}

Я хочу изменить код для удобства управления и редактирования с помощью одной и той же кнопки действий, например:

void main()
{
   for (int i = 1; i <=n; i++)
      f(i);
}

void f(int i)
{
   button[i].Enable = true;
}

Но я не знаю, как реализовать функцию е.

Я могу сделать список кнопки и вручную ее инициализировать, но она потеряет автодизайнер VS. Я просто хочу использовать группу кнопок из конструктора и вызвать ее по параметру счетчика.

Может ли кто-нибудь предложить мне идею или код, пожалуйста? Спасибо за прочтение

-2
Thuy Nguyen 10 Фев 2020 в 07:08

2 ответа

Лучший ответ

Вы можете использовать так:

void main()
{
   for (int i = 1; i <=n; i++)
     f(i);
}

И ваша функция может быть реализована так:

private void f(int i)
{
    var allButtons = Controls.OfType<Button>().ToList();
    allButtons.Single(x => x.Name.EndsWith(i.ToString())).Enabled = false;
}

Или это тоже может быть так:

private void f(int i)
{
    var allButtons = Controls.OfType<Button>().ToList();
    allButtons[i].Enabled = false;
}

Но будьте осторожны, вы не превысили список

-1
Jafar ashrafi 10 Фев 2020 в 07:43

Вы можете получить все кнопки с методом расширения oftype следующим образом:

foreach(var button in this.Controls.OfType<Button>())
{
    button.Enabled = true;
}

Или используйте это:

foreach (var control in this.Controls)
{
     if (control.GetType() == typeof(Button))
     {
         //do stuff with control in form
     }
 }
0
Jafar ashrafi 10 Фев 2020 в 04:52