Как изменить цвет шрифта отключенного TextBox? - PullRequest
57 голосов
/ 09 ноября 2008

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

Ответы [ 9 ]

54 голосов
/ 10 марта 2009

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

private void FormFoo_Load(...) {
    txtFoo.BackColor = txtFoo.BackColor;
}
54 голосов
/ 09 ноября 2008

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


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

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

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

Другой простой альтернативой является использование Label вместо TextBox.

5 голосов
/ 14 февраля 2011

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

txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;
4 голосов
/ 20 ноября 2014

Я только что нашел отличный способ сделать это. В моем примере я использую 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, и он будет действовать как метка, предотвращая фокусировку, ввод пользователя, изменение курсора, без фактического отключения.

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

2 голосов
/ 02 июня 2011

Вы можете попробовать это. Переопределите событие 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
}

Refrence

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

В событии Enter установите фокус

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

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

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

1 голос
/ 15 января 2015

Просто измените параметр Enable и установите для него нужный вам цвет

private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e)
{
    ((TextBox)sender).ForeColor = Color.Black;
}
0 голосов
/ 20 апреля 2018

Установка «Только для чтения» на «Истина» - самый простой способ.

0 голосов
/ 21 марта 2014

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

Кроме того, вы также можете сделать что-то вроде этого:

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

или

private void FormFoo_Load(...) {
    txtFoo.SelectionLength = 0;
}
0 голосов
/ 21 марта 2013

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

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