我正在創建自定義控件(水印文本框),並且它從文本框繼承。截至目前,文本框在沒有文本時正確顯示失去焦點時的水印,並在文本框獲得焦點時刪除它(即使文本的顏色是水印也會更改)。 我想要它做的是報告它沒有文字時顯示水印,所以我試圖重寫Text屬性。文本框的覆蓋文本屬性不能正確刷新
代碼如下:
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;
}
}
}
問題是,當文本框獲得焦點不會刪除的水印。
我在這裏錯過/做錯了什麼?
可你只是做一個新的屬性,然後在文本覆蓋設置它的價值呢? – Jacobr365
可能的重複[如何實現顯示「Type here」的TextBox?](http://stackoverflow.com/questions/2487104/how-do-i-implement-a-textbox-that-displays-type-這裏) – raidensan
您的重寫的Text屬性獲取器也被Winforms調用。用於檢查文本框是否需要重新繪製。如果是這樣,isWatermarked字段還沒有正確的值。在文本分配前簡單地移動isWatermarked賦值*,它將起作用。 –