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