Ich habe ein Standard-TextBox-Steuerelement, das die "weichen Beschreibungen" wie die Titel- und Tag-Felder in StackOverflow nachahmt. Wenn der Fokus des Benutzers in das Steuerelement eindringt, verbirgt es im Wesentlichen die Beschreibung ("Benutzername") in diesem Fall und legt Ausrichtung und Farbe als ein Standardtextsteuerelement fest. Wenn der Benutzer das Textfeld verlässt, möchte ich prüfen, ob der Benutzer tatsächlich etwas eingegeben hat, und die Benutzernamenanzeige anderweitig anzeigen.Das Ändern eines TextBox-Steuerelements für das Leave-Ereignis verhindert das Ausblenden des Steuerelements.
Zum Beispiel:
private void tbUsername_Enter(object sender, EventArgs e)
{
if (tbUsername.TextAlign == HorizontalAlignment.Center)
{
tbUsername.TextAlign = HorizontalAlignment.Left;
tbUsername.ForeColor = SystemColors.ControlText;
tbUsername.Text = String.Empty;
}
}
private void tbUsername_Leave(object sender, EventArgs e)
{
if (tbUsername.Text == String.Empty)
{
tbUsername.TextAlign = HorizontalAlignment.Center;
tbUsername.ForeColor = SystemColors.InactiveCaption;
tbUsername.Text = "Username";
}
}
Leider, wenn ich ein Setup dieser Ereignisse kann der Anwender nicht Registerkarte aus der Benutzerkontrolle. Das Steuerelement flackert einfach und die Steuerung kehrt zum Textbox-Steuerelement selbst zurück, bis der Benutzer etwas eingegeben und den Ereigniskörper übersprungen hat.
Wenn ich im Ereignis this.SelectNextControl()
aufrufen, dann tritt das Ereignis in eine Endlosschleife.
Kann jemand sehen, was ich falsch mache?
Interessante .. Scheint mit Textalign etwas zu sein. Wenn ich das kommentiere, scheint das okay zu sein. – SwDevMan81
+1 Gut gefunden. Hoffentlich funktioniert eines der Workarounds für Sie, obwohl keines optimal ist. Könnte dies möglicherweise in MSDN Foren (http://social.msdn.microsoft.com/Forums/en-US/categories) veröffentlichen, um zu sehen, ob sie wissen, was los ist. – SwDevMan81