Подтвердить что ты не робот

Как изменить цвет шрифта отключенного TextBox?

Кто-нибудь знает, какое свойство задает цвет текста для отключенного управления? Мне нужно отобразить текст в отключенном TextBox, и я хочу установить его цвет в черный цвет.

4b9b3361

Ответ 1

ПРИМЕЧАНИЕ: см. ниже ответ Cheetah, поскольку он определяет необходимое условие для работы этого решения. Установка BackColor в TextBox.


Я думаю, что вы действительно хотите сделать, это включить TextBox и установить для свойства ReadOnly значение true.

Немного сложно изменить цвет текста в отключенном TextBox. Я думаю, вам, вероятно, придется подкласс и переопределить событие OnPaint.

ReadOnly, хотя должен дать вам тот же результат, что и !Enabled, и позволить вам контролировать цвет и форматирование TextBox. Я думаю, что он также будет поддерживать выбор и копирование текста из TextBox, который невозможен с отключенным TextBox.

Еще одна простая альтернатива - использовать Label вместо TextBox.

Ответ 2

Кроме того, для того, чтобы ForeColor выполнялся в TextBox, отмеченном ReadOnly, вы должны явно установить BackColor. Если вы хотите, чтобы он по-прежнему использовался по умолчанию BackColor, вам нужно сделать набор явным, так как дизайнер слишком умный для своего же блага. Достаточно установить значение BackColor в текущее значение. Я делаю это в событии Load для формы, например:

private void FormFoo_Load(...) {
    txtFoo.BackColor = txtFoo.BackColor;
}

Ответ 3

привет установите для атрибута readonly значение true со стороны кода или время выполнения, а не время разработки

txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;

Ответ 4

Я только что нашел отличный способ сделать это. В моем примере я использую RichTextBox, но он должен работать с любым элементом управления:

public class DisabledRichTextBox : System.Windows.Forms.RichTextBox
{
    // See: http://wiki.winehq.org/List_Of_Windows_Messages

    private const int WM_SETFOCUS   = 0x07;
    private const int WM_ENABLE     = 0x0A;
    private const int WM_SETCURSOR  = 0x20;

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR))
            base.WndProc(ref m);
    }
}

Вы можете безопасно установить Enabled = true и ReadOnly = false, и он будет действовать как метка, предотвращая фокус, ввод пользователя, изменение курсора, не будучи фактически отключенным.

Посмотрите, работает ли это для вас. Приветствия

Ответ 5

Вы можете попробовать это. Переопределите событие OnPaint для TextBox.

    protected override void OnPaint(PaintEventArgs e)
{
     SolidBrush drawBrush = new SolidBrush(ForeColor); //Use the ForeColor property
     // Draw string to screen.
     e.Graphics.DrawString(Text, Font, drawBrush, 0f,0f); //Use the Font property
}

установите ControlStyles в "UserPaint"

public MyTextBox()//constructor
{
     // This call is required by the Windows.Forms Form Designer.
     this.SetStyle(ControlStyles.UserPaint,true);

     InitializeComponent();

     // TODO: Add any initialization after the InitForm call
}

Отказ

Или вы можете попробовать этот хак

В поле "Enter" установите фокус

int index=this.Controls.IndexOf(this.textBox1);

this.Controls[index-1].Focus();

Таким образом, ваш контроль не будет фокусироваться и вести себя как отключенный.

Ответ 6

Просто обработайте Включить измените и установите цвет нужного вам цвета.

private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e)
{
    ((TextBox)sender).ForeColor = Color.Black;
}

Ответ 7

Если вы хотите отображать текст, который нельзя отредактировать или выбрать, вы можете просто использовать ярлык

Ответ 8

В дополнение к ответу @spoon16 и @Cheetah, я всегда устанавливал свойство tabstop False в текстовом поле, чтобы предотвратить выбор текста по умолчанию.

В качестве альтернативы вы также можете сделать что-то вроде этого:

private void FormFoo_Load(...) {
    txtFoo.Select(0, 0);
}

или

private void FormFoo_Load(...) {
    txtFoo.SelectionLength = 0;
}