Weiß jemand, welche Eigenschaft die Textfarbe für deaktiviertes Steuerelement festlegt? Ich muss etwas Text in einer deaktivierten TextBox
anzeigen, und ich möchte seine Farbe auf Schwarz setzen.
HINWEIS: siehe Cheetahs Antwort unten, da er eine Voraussetzung dafür darstellt, dass diese Lösung funktioniert. BackColor
der TextBox
einstellen.
Ich glaube, Sie möchten wirklich die Variable TextBox
aktivieren und die Eigenschaft ReadOnly
auf true
setzen.
Es ist ein bisschen schwierig, die Farbe des Textes in einer deaktivierten TextBox
zu ändern. Ich denke, Sie müssten wahrscheinlich das Ereignis OnPaint
überschreiben und überschreiben.
ReadOnly
sollte jedoch dasselbe Ergebnis wie !Enabled
liefern und die Kontrolle über Farbe und Formatierung der TextBox
behalten. Ich denke, es wird auch weiterhin das Auswählen und Kopieren von Text aus der TextBox
unterstützen, was bei deaktivierter TextBox
nicht möglich ist.
Eine andere einfache Alternative ist die Verwendung einer Label
anstelle einer TextBox
.
Damit ForeColor einer mit ReadOnly gekennzeichneten TextBox befolgt werden kann, müssen Sie außerdem explizit die BackColor festlegen. Wenn Sie möchten, dass die Standard-BackColor weiterhin verwendet wird, müssen Sie das Set explizit machen, da der Designer hier zu schlau ist. Es reicht aus, die BackColor auf ihren aktuellen Wert zu setzen. Ich mache das im Load-Event für das Formular, wie folgt:
private void FormFoo_Load(...) {
txtFoo.BackColor = txtFoo.BackColor;
}
hi setzt das readonly-Attribut von der Codeseite oder der Laufzeit nicht von der Entwurfszeit auf true
txtFingerPrints.BackColor = System.Drawing.SystemColors.Info;
txtFingerPrints.ReadOnly = true;
Ich habe gerade einen großartigen Weg gefunden, das zu tun. In meinem Beispiel verwende ich eine RichTextBox, aber es sollte mit jedem Control funktionieren:
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);
}
}
Sie können Enabled = true und ReadOnly = false festlegen, und es wirkt wie eine Beschriftung, wodurch Fokus, Benutzereingabe und Cursorwechsel verhindert werden, ohne dass dies tatsächlich deaktiviert wird.
Sehen Sie, ob es für Sie funktioniert
Sie können dies versuchen. Überschreiben Sie das OnPaint-Ereignis der 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
}
setzen Sie die ControlStyles auf "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
}
Oder Sie können diesen Hack versuchen
Stellen Sie im Enter-Ereignis den Fokus ein
int index=this.Controls.IndexOf(this.textBox1);
this.Controls[index-1].Focus();
So wird Ihre Steuerung nicht fokussiert und verhält sich wie deaktiviert.
Behandeln Sie einfach die Option "Ändern" und stellen Sie die gewünschte Farbe ein
private void TextBoxName_EnabledChanged(System.Object sender, System.EventArgs e)
{
((TextBox)sender).ForeColor = Color.Black;
}
Wenn Sie Text anzeigen möchten, der nicht bearbeitet oder ausgewählt werden kann, können Sie einfach eine Beschriftung verwenden
Zusätzlich zu der Antwort von @ spoon16 und @Cheetah setze ich die tabstop
-Eigenschaft im Textfeld immer auf False, um zu verhindern, dass der Text standardmäßig ausgewählt wird.
Alternativ können Sie auch so etwas tun:
private void FormFoo_Load(...) {
txtFoo.Select(0, 0);
}
oder
private void FormFoo_Load(...) {
txtFoo.SelectionLength = 0;
}