Windows Forms: как изменить цвет шрифта для отключенной метки?
Я пытаюсь установить отключенные характеристики шрифта для элемента управления Label. Я могу установить все характеристики шрифта (размер, полужирный и т.д.), Но цвет переопределяется поведением окон по умолчанию, которое представляется одним из этих двух цветов:
- Если цвет фона прозрачный, то ForeColor такой же, как TextBox отключен Цвет.
- Если цвет фона установлен на что-то еще, ForeColor - темно-серый цвет.
Изображение ниже демонстрирует поведение - столбец 1 - это метки, столбец 2 - это текстовые поля, а столбец 3 - это поля со списком.
![alt text]()
Редактировать - Объяснение изображения: первые две строки являются стилями по умолчанию для метки, текстового поля и комбинированного списка. Во вторых двух строках я установил цвет фона на красный, а передний план на белый. Отключенная обработка стиля шрифта Microsoft не согласована.
Ответы
Ответ 1
Взгляните на метод ControlPaint.DrawStringDisabled; это может быть что-то полезное. Я использовал его при переопределении события OnPaint для пользовательских элементов управления.
ControlPaint.DrawStringDisabled(g, this.Text, this.Font, Color.Transparent,
new Rectangle(CustomStringWidth, 5, StringSize2.Width, StringSize2.Height), StringFormat.GenericTypographic);
Ответ 2
Вы пытались реализовать событие EnabledChanged? Или вы ищете больше свойств "стилей" на элементе управления (насколько я знаю, их не существует)?
Ответ 3
Для текстового поля вы можете установить для свойства readonly значение true, пока элемент управления включен. Затем вы можете установить свойство BackColor и ForeColor в любое удобное для вас время. Пользователь все равно сможет щелкнуть элемент управления и иметь мигающий курсор, но они ничего не смогут редактировать.
Не уверен, что это экстраполируется на другие типы управления, такие как комбинированные поля или что-то еще, поскольку у меня еще не было возможности экспериментировать, но это стоит того.
Ответ 4
Почему это проблема?
Я бы лично разрешил Windows обрабатывать его. Люди привыкли к отключенным элементам, которые выглядят определенным образом, поэтому, если вы начинаете пытаться изменить каждый аспект способа, которым они выглядят, вы можете запутать своих пользователей.
Ответ 5
Вам, вероятно, придется переопределить событие Paint. Все инструменты, которые я использовал до сих пор, имеют ту же проблему, когда элемент управления отключен. Просто угадайте, что они позволяют окнам рисовать текст. Что касается этикеток, то они не являются стандартным контролем и почему они работают.
Ответ 6
Решение: изменение цвета отключенного управления
http://codeforfuture.com/2008/12/24/solution-changing-color-of-disabled-checkbox-or-radiobutton/
Если у вас все еще есть проблемы, тогда прокомментируйте, я постараюсь ответить.
Ответ 7
Я переопределил метод OnPaint моего контроля с помощью метода OnPaint ниже. Я вставил весь класс управления, чтобы упростить его копирование.
public partial class NewLabel : Label
{
public NewLabel()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
TextRenderer.DrawText(e.Graphics, this.Text.ToString(), this.Font, ClientRectangle, ForeColor);
}
}