Ich erstelle ein benutzerdefiniertes Steuerelement (ein Textfeld mit Wasserzeichen) und es erbt von Textbox. Ab sofort zeigt das Textfeld korrekt das Wasserzeichen an, wenn der Fokus verloren geht, wenn kein Text vorhanden ist, und löscht es, wenn das Textfeld den Fokus erhält (es ändert sogar die Textfarbe, wenn es das Wasserzeichen ist). Ich möchte, dass es meldet, dass es keinen Text hat, wenn es das Wasserzeichen zeigt, also versuche ich, die Texteigenschaft zu überschreiben.Überschriebene Text-Eigenschaft eines Textfelds wird nicht ordnungsgemäß aktualisiert
-Code wie folgt:
public class WatermarkedTextbox : TextBox
{
private bool _isWatermarked;
private string _watermark;
public string Watermark
{
get { return _watermark; }
set { _watermark = value; }
}
[Bindable(false), EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override string Text
{
get
{
return _isWatermarked ? string.Empty : base.Text;
}
set
{
base.Text = value;
}
}
public WatermarkedTextbox()
{
GotFocus += WatermarkedTextbox_GotFocus;
LostFocus += WatermarkedTextbox_LostFocus;
}
private void WatermarkedTextbox_LostFocus(object sender, EventArgs e)
{
if (Text.Length == 0)
{
ForeColor = SystemColors.InactiveCaption;
Text = _watermark;
_isWatermarked = true;
}
}
private void WatermarkedTextbox_GotFocus(object sender, EventArgs e)
{
if (_isWatermarked)
{
ForeColor = SystemColors.ControlText;
Text = string.Empty;
_isWatermarked = false;
}
}
}
Problem ist, wenn das Textfeld den Fokus erhält es nicht das Wasserzeichen nicht löschen.
Was vermisse ich/mache ich hier falsch?
können Sie einfach eine neue Eigenschaft machen und setzen Sie den Wert in dem Text überschreiben? – Jacobr365
Mögliches Duplikat von [Wie implementiere ich eine TextBox, die "Type here" anzeigt?] (Http://stackoverflow.com/questions/2487104/how-do-i-implement-a-textbox-that-dypes- hier) – raidensan
Ihr überschriebener Texteigenschaften-Getter wird auch von Winforms aufgerufen. Wird verwendet, um zu überprüfen, ob die TextBox neu gezeichnet werden muss. Wenn dies der Fall ist, hat das Feld isWatermarked noch nicht den richtigen Wert. Verschieben Sie einfach die isWatermarked-Zuweisung * vor * die Text-Zuweisung und es wird funktionieren. –