Windows Forms: как изменить цвет шрифта для отключенной метки - PullRequest
11 голосов
/ 26 сентября 2008

Я пытаюсь установить отключенные характеристики шрифта для элемента управления Label. Я могу установить все характеристики шрифта (размер, полужирный и т. Д.), Но цвет переопределяется поведением окон по умолчанию, которое представляется одним из этих двух цветов:

  • Если цвет фона прозрачный, то ForeColor такой же, как TextBox отключен Цвет.
  • Если цвет фона установлен на что-либо другое, ForeColor - темно-серый цвет.

Изображение ниже демонстрирует поведение - столбец 1 - это метки, столбец 2 - это текстовые поля, а столбец 3 - это комбинированные списки.

alt text

Редактировать - Объяснение изображения. Первые две строки являются стилями по умолчанию для метки, текстового поля и комбинированного списка. Во вторых двух строках я установил цвет фона на красный, а передний план на белый. Отключенная обработка шрифтов в Microsoft противоречива.

Ответы [ 6 ]

2 голосов
/ 08 октября 2008

Для текстового поля вы можете установить для свойства readonly значение true, оставив элемент управления включенным. Затем вы можете установить свойства BackColor и ForeColor на все, что вам нравится. Пользователь по-прежнему сможет нажимать на элемент управления и мигать курсором, но он не сможет ничего редактировать.

Не уверен, экстраполируется ли это на другие типы элементов управления, такие как поля со списком или еще что-то, поскольку у меня еще не было возможности экспериментировать, но это стоит попробовать.

2 голосов
/ 26 сентября 2008

Вы пытались реализовать событие EnabledChanged? Или вы ищете больше свойства "styles" в элементе управления (насколько я знаю, они не существуют)?

1 голос
/ 26 сентября 2008

Взгляните на метод ControlPaint.DrawStringDisabled ; это может быть что-то полезное. Я использовал его при переопределении события OnPaint для пользовательских элементов управления.

ControlPaint.DrawStringDisabled(g, this.Text, this.Font, Color.Transparent,
                new Rectangle(CustomStringWidth, 5, StringSize2.Width, StringSize2.Height), StringFormat.GenericTypographic);
0 голосов
/ 19 июня 2013

Я переопределил метод 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);
    }

}
0 голосов
/ 26 сентября 2008

Возможно, вам потребуется переопределить событие Paint. Все наборы инструментов, которые я использовал до сих пор, имеют ту же проблему, когда элемент управления отключен. Просто предположите, что они позволяют окнам рисовать текст. Что касается ярлыков, то они не являются стандартным элементом управления, и поэтому они работают.

0 голосов
/ 26 сентября 2008

Почему это проблема?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...