Как изменить BackColor всей моей панели в моей форме - PullRequest
0 голосов
/ 19 сентября 2019

Мне нужна помощь с моим инструментом.Я пытаюсь изменить Color мой Panel на ColorDialog, но не работает Я хочу изменить все цвета Panel в моем Form.Конструктор панели:

Panel p = new Panel();

Обработчики событий:

private void button104_Click_1(object sender, EventArgs e)
{
   this.bg.FullOpen = true;
   if (this.bg.ShowDialog() == DialogResult.OK)
   {
      this.setBgColor(this.bg.Color);
   }
}

public void setBgColor(Color rgb)
{
   p.BackColor = rgb;
}

Ответы [ 3 ]

3 голосов
/ 19 сентября 2019

Вы можете выбрать все элементы управления определенного типа, используя метод расширения System.Linq, OfType, и, если вы перебираете их в цикле, вы можете установить все их свойства BackColor:

private void button1_Click(object sender, EventArgs e)
{
    ColorDialog cd = new ColorDialog();

    if (cd.ShowDialog() == DialogResult.OK)
    {
        foreach (var panel in Controls.OfType<Panel>())
        {
            panel.BackColor = cd.Color;
        }
    }
}

Обратите внимание, что это только перебирает элементы управления, принадлежащие непосредственно самой форме.Если какая-либо из панелей находится внутри элемента управления контейнера, то нам нужно просмотреть каждый элемент управления, чтобы увидеть, содержит ли он какие-либо панели.

Мы можем написать вспомогательный метод для этого, который потребует Control для проверки, Color для использования для BackColor и Type, который определяет тип элемента управления, который мы хотимустановите цвет спины для.

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

private void SetBackColorIncludingChildren(Control parent, Color backColor, Type controlType)
{
    if (parent.GetType() == controlType)
    {
        parent.BackColor = backColor;
    }

    foreach(Control child in parent.Controls)
    {
        SetBackColorIncludingChildren(child, backColor, controlType);
    }
}

private void button1_Click(object sender, EventArgs e)
{
    ColorDialog cd = new ColorDialog();

    if (cd.ShowDialog() == DialogResult.OK)
    {
        // Pass 'this' to the method, which represents this 'Form' control
        SetBackColorIncludingChildren(this, cd.Color, typeof(Panel));
    }
}
1 голос
/ 19 сентября 2019

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

private void button1_Click(object sender, EventArgs e)
{
  this.bg.FullOpen = true;
  if ( this.bg.ShowDialog() == DialogResult.OK )
  {
    setBgColor(Controls, bg.Color);
  }
}

public void setBgColor(Control.ControlCollection controls, Color rgb)
{
  foreach ( Control control in controls )
  {
    if ( control is Panel )
      ( (Panel)control ).BackColor = rgb;
    setBgColor(control.Controls, rgb);
  }
}

Он анализирует все элементы управления формы и для каждого рекурсивно анализирует все элементы управления.

Затем изменяется цвет всех панелей формы, всех «корневых» панелей и всех панелей в панелях в панелях в панелях ...

0 голосов
/ 19 сентября 2019

Это выглядит как winforms.Предполагая, что это так, вам нужно перебрать все элементы управления в форме, и для каждого, который является Panel, установить его цвет.немного)

public void setBgColor(Color rgb)
{
    foreach (Control c in this.Controls)
    {
        if (c.GetType() == typeof(System.Windows.Forms.Panel))
        {
            c.BackColor = rgb;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...