2016-06-20 15 views
0

Ich habe ein benutzerdefiniertes Steuerelement, das von TextBox erbt. Ich habe eine Eigenschaft Cue hinzugefügt, sodass Cue-Text angezeigt wird. Zur Anzeige von Cue-Text rufe ich:Deaktivieren Sie die Texteingabe, ohne Enabled oder ReadOnly zu verwenden

SendMessage(this.Handle, 0x1501, (IntPtr)1, myCueText); 

Ich muss die Textbox deaktivieren und der Cue-Text sollte sichtbar bleiben. Ich habe es versucht:

textBox.ReadOnly = true; 
textBox.BackColor = SystemColors.Window; 

Der obige Code lässt den Cue-Text verschwinden. Ich habe versucht, Enabled zu verwenden, aber es hat den gleichen Effekt wie oben.

Gibt es eine Alternative zum Deaktivieren der Textbox und der Cue-Text wird immer noch angezeigt?

+2

Der ganze Sinn eines Cue-Banner ist es, dem Benutzer einen Hinweis zu geben, was sie in ein Textfeld eingeben sollten . Wenn sie nicht in Ihre Textbox eingeben können, wozu dient das Stichwort-Banner? Wenn Text in einem deaktivierten Textfeld angezeigt werden soll, legen Sie die Eigenschaft Text und dann die Eigenschaft Enabled fest. Der Text erscheint ausgegraut/deaktiviert, ähnlich wie das Stichwort-Banner. –

+0

[Hier] (http://stackoverflow.com/a/36534068/3110834) ist eine Implementierung einer 'TextBox', die das Anzeigen eines Hinweises (oder Wasserzeichens oder Cue) unterstützt: ** • ** Es zeigt auch den Hinweis wenn 'MultiLine' wahr ist. ** • ** Es basiert auf der Behandlung der 'WM_PAINT' Nachricht und dem Zeichnen des Hinweises. So können Sie den Hinweis einfach anpassen und einige Eigenschaften wie eine Tippfarbe hinzufügen, oder Sie können ihn von rechts nach links zeichnen oder steuern, wann der Hinweis angezeigt wird oder entscheiden, wann der Hinweis angezeigt werden soll. –

+0

Als Anpassung in der verknüpften 'TextBox' kann anstelle von'! This.Focused' '' (! This.Focused || this.ReadOnly) '' verwendet werden. Auf diese Weise wird der Hinweis im 'ReadOnly' Textfeld angezeigt. –

Antwort

-1

Sie Ereignisse behandeln könnte der Inhalt geändert werden, um zu verhindern - vielleicht versuchen, etwas in dieser Richtung:

this.textBox1.TextChanged += (object src, EventArgs a) => { TextBox tb = src as TextBox; if (tb.Focused) { tb.Text = tb.Tag as string; /* do not allow interactive changes, restore previous text */} }; 
    this.textBox1.Enter += (object src, EventArgs a) => { TextBox tb = src as TextBox; tb.Tag = tb.Text; /* keep a back-up of the original text on focus so we can restore it on change */ }; 
    this.textBox1.KeyDown += (object src, KeyEventArgs a) => { a.SuppressKeyPress = true; /* explicitly prevent keystrokes to avoid any flicker - might want to tweak this to allow cursor and related keys */}; 
Verwandte Themen