Изменить цвет фона всех кнопок по формуле - PullRequest
0 голосов
/ 27 февраля 2019

Я создал класс с именем Design

, содержащий эти коды

public static void Edit(Form frm, Color bkColor, Color btnColor,Color pnlColor)
{
    frm.BackColor = bkColor;
    frm.RightToLeft = RightToLeft.Yes;
    frm.RightToLeftLayout = true;
    foreach (Button btn in frm.Controls.OfType<Button>())
    {
        btn.BackColor = btnColor;
    }
    foreach (Panel pnl in frm.Controls.OfType<Panel>())
    {
        pnl.BackColor = pnlColor;
    }
}

, и я вызываю его следующим образом:

Design.Edit(this, Color.Blue, Color.Green, Color.Yellow);

СЕЙЧАС это хорошо работает на фоне формы, НО на панели и кнопки вообще не работают

1 Ответ

0 голосов
/ 27 февраля 2019

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

Делая это:

frm.Controls.OfType<Button>()

вы ищете только в первом слое элементов управления ваших форм, поэтомуесли у вас есть кнопка внутри панели или другого элемента (99,999999% ситуаций), то ваш foreach не может найти его.

адаптирует принятый ответ на ваш вопрос:

public IEnumerable<Control> GetAll(this Control control,Type type)
{
    var controls = control.Controls.Cast<Control>();

    return controls.SelectMany(ctrl => ctrl.GetAll(type))
                              .Concat(controls)
                              .Where(c => c.GetType() == type);
}

[...]

foreach (Button btn in frm.GetAll(typeof(Button)))
    {
        btn.BackColor = btnColor;
    }

L-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...