Возврат кнопки к цвету по умолчанию - PullRequest
0 голосов
/ 02 ноября 2018

Я настраиваю цвета кнопок и т. Д., И я хочу иметь возможность сбросить форму на цвета по умолчанию. Я знаю, что я должен делать, так как я нашел ответ, когда гуглил, но UseVisualStyleBackColor не работает?!?! Я зацикливаюсь на кнопках, и Visual Studio подчеркивает команду.

this.BackColor = Control.DefaultBackColor;
foreach (Control c in this.Controls)
{
  if (c.GetType() == typeof(Button))
  {
    c.UseVisualStyleBackColor = true;
    c.BackColor = Control.DefaultBackColor;
  }
}

Получена ошибка

CS1061 «Control» не содержит определения для «UseVisualStyleBackColor», и метод расширения «UseVisualStyleBackColor», принимающий первый аргумент типа «Control», не найден (отсутствует директива using или ссылка на сборку?)

Если я пытаюсь получить прямой доступ к кнопке, я получаю ту же ошибку?

Ответы [ 4 ]

0 голосов
/ 02 ноября 2018

Небольшая проблема в порядке кода, необходимого для его работы. Пришлось изменить порядок настройки цвета и визуального стиля ....

            this.BackColor = Control.DefaultBackColor;
        foreach (Control c in this.Controls)
        {
            if (c is Button b)
            {
                b.BackColor = Control.DefaultBackColor;
                b.UseVisualStyleBackColor = true;
            }
        }
0 голосов
/ 02 ноября 2018

Я предлагаю использовать Linq (.OfType<Button>()) для фильтрации кнопок:

using System.Linq;

...

foreach (Button btn in this.Controls.OfType<Button>()) 
{
    btn.UseVisualStyleBackColor = true;
    btn.BackColor = Control.DefaultBackColor;
}
0 голосов
/ 02 ноября 2018

Для любой версии C # вы можете использовать приведение типа:

((Button)c).UseVisualStyleBackColor = true;

Начиная с C # 7, вы можете использовать Pattern Matching (попытайтесь разыграть его + при успехе, присвойте результат новой переменной):

if (c is Button b))
{
    b.UseVisualStyleBackColor = true;
    b.BackColor = Control.DefaultBackColor;
}
0 голосов
/ 02 ноября 2018
this.BackColor = Control.DefaultBackColor;
foreach (Control c in this.Controls)
{
  if (c is Button)
  {
     var button = (Button)c;
     button.UseVisualStyleBackColor = true;
     button.BackColor = Control.DefaultBackColor;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...