netlib.narod.ru< Назад | Оглавление | Далее >

Какие цвета использовать?

Где-то в конструкторе для класса Control, вероятно, выполняется следующий код:

  BackColor = SystemColors.Control;
  ForeColor = SystemColors.ControlText;

Что из себя представляют системные цвета Control и ControlText, полностью зависит от пользователя. Обычно они соответственно серый и черный.

Когда себя рисует, например, кнопка, она задает цвета своего фона через свойство BackColor, а свой текст отображает через свойство ForeColor. Объект Form использует свойство BackColor для очистки фона клиентской области, но сам не использует свойство ForeColor. Это свойство сделано доступным для приложений, выполняющих наследование от Form или создающих экземпляры Form.

Итак, возникает вопрос, какую кисть взять для рисования текста? Думаю, я достаточно убедительно обосновал, что эта кисть — не Brushes.Black. Гораздо лучше — SystemBrushes.ControlText.

Однако я не уверен, что и этот вариант оптимален. Подумаем; почему свойствам BackColor и ForeColor Form присваиваются значения системных цветов используемых элементами управления? Ответ таков: разработчики Windows Forms предполагали, что вы будете наносить на форму элементы управления или использовать форму в качестве диалогового окна.

Если вы не помещаете элементы управления на форму и если вы хотите видеть вашу форму похожей на обычные старые программы Windows, поместите в конструктор формы следующие инструкции:

  BackColor = SystemColors.Window;
  ForeColor = SystemColors.WindowText;

В этом случае, чтобы быть последовательным, следует в вызовах DrawString в коде OnPaint использовать SystemBrushes.WindowText.

Но зачем писать код OnPaint, зависящий от способа установки значений BackColor и ForeColor в конструкторе? Чтобы написать универсальный код, в вызове DrawString надо использовать кисть:

  new SolidBrush(ForeColor)

Это та кисть, которую я буду использовать в дальнейшем в этой книге, чтобы, показывать текст в цвете, выбираемом пользователем при настройке Windows.

Кроме того, пока я не начал создавать элементы управления на формах, я буду присваивать свойствам BackColor и ForeColor значения SystemColors.Window и SystemColors.WindowText, когда знаю, что буду рисовать что-либо зависящее от этих цветов.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz