Кто-нибудь знает, какое свойство задает цвет текста для отключенного управления?
Мне нужно отобразить текст в отключенном TextBox, и я хочу установить его цвет в черный цвет.
Как изменить цвет шрифта отключенного TextBox?
Ответ 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;
}