Вызов значения переопределения на основе логического значения (C#, WinForms)C#

Место общения программистов C#
Anonymous
Вызов значения переопределения на основе логического значения (C#, WinForms)

Сообщение Anonymous »

Может быть, это глупый вопрос, но я не смог найти четких и прямых подсказок. Я использую два класса: ToolStripProfessionalRenderer и ProfessionalColorTable. Это потому, что я настраиваю изменение цвета меню. На данный момент у меня все работает, но я хотел написать код получше, если это возможно, и сделать это просто. Сейчас я делаю следующее:

Код: Выделить всё

    class MenuColorTable : ProfessionalColorTable
{
bool dark = false;
public MenuColorTable(string color)
{
if (color == "dark")
{
dark = true;
base.UseSystemColors = false;
}
else
{
base.UseSystemColors = true;
}
}
public override Color MenuItemSelectedGradientBegin
{
get { return dark ? Color.FromArgb(12, 46, 73) : base.MenuItemPressedGradientBegin; }
}
public override Color MenuItemSelectedGradientEnd
{
get { return dark ? Color.FromArgb(12, 46, 73) : base.MenuItemSelectedGradientEnd; }
}
}

private class SkinRenderer : ToolStripProfessionalRenderer
{
public SkinRenderer(MenuColorTable colorTable) : base(colorTable) { }
}
Затем в коде для теста я вызываю все это с помощью

Код: Выделить всё

menu.Renderer = new SkinRenderer(new MenuColorTable("dark"));
Но я бы предпочел сделать это другим, более элегантным способом, с помощью таблицы цветов. Дело в том, что я понимаю, что, по сути, имея только темные цвета и цвета по умолчанию, base.UseSystemColors будет достаточно, и мне не нужно будет передавать значения по умолчанию в переопределения. Итак, чего я не понимаю, так это вызывать эти переопределяющие цвета ТОЛЬКО, если значение dark равно true, вместо того, чтобы вызывать их независимо, а затем обрабатывать возвращаемое значение. Например, «если темно, переопределить», поэтому, если темнота имеет значение false, переопределение не вызывается.

Подробнее здесь: https://stackoverflow.com/questions/784 ... c-winforms

Вернуться в «C#»