Цвет текста отключенного элемента управления - как его изменить - PullRequest
9 голосов
/ 14 мая 2011

Во время создания моей потрясающей Matching Game;) Я обнаружил проблему, которая совершенно недостижима.

Когда игрок выбирает две метки с символами на них, я хочу заблокировать все остальные метки на 4 секунды.

Но когда я это делаю, передний цвет всех меток меняется на серый, и символы видны. Мой вопрос - есть ли способ изменить ForeColor отключенной метки в Visual C #?

Проект представляет собой приложение WinForm.

На данный момент я установил цвет метки в коде следующим образом:

label1.ForeColor = lable1.BackColor;

Когда пользователь нажимает на ярлык, я меняю его на:

lable1.ForeColor = Color.Black;

Ответы [ 2 ]

9 голосов
/ 14 мая 2011

Просто создайте свой собственный ярлык с переопределенным событием рисования:

protected override void OnPaint ( System.Windows.Forms.PaintEventArgs e )
{
    if ( Enabled )
    {
        //use normal realization
        base.OnPaint (e);
        return;
    }
    //custom drawing
    using ( Brush aBrush = new SolidBrush( "YourCustomDisableColor" ) )
    {
        e.Graphics.DrawString( Text, Font, aBrush, ClientRectangle );
    }
}

Будьте осторожны с флагами форматирования текста во время рисования текста.

9 голосов
/ 14 мая 2011

Способ проще, чем пытаться изменить способ, которым Windows рисует отключенные элементы управления, - просто установить флаг, когда вы хотите, чтобы Label был фактически «отключен», а затем проверить значение этого флага ваш Click метод обработчика событий перед выполнением любого действия, которое вы хотите. Если элемент управления «отключен», не предпринимайте никаких действий.

Примерно так:

private bool labelDisabled = false;

private void myLabel_Click(object sender, EventArgs e)
{
    if (!labelDisabled)
    {
        this.ForeColor = SystemColors.ControlText;
    }
}

Также обратите внимание, что вы всегда должны использовать SystemColors вместо чего-то вроде Color.Black.
Если вы жестко запрограммируете определенные значения цвета, они часто конфликтуют, когда пользователь настраивает свою тему Windows по умолчанию. Раймонд Чен обсуждает это в статье в своем блоге.

...