WinForms中的水印文本框有人能告訴我一個基本Windows窗體文本框的良好實現嗎?該文本框最初將顯示當光標進入時消失的水印文本?我認為我可以通過對Enter和Left事件的一些創(chuàng)造性的使用來創(chuàng)建我自己的東西,但是我確信在某個地方有一個非常有用的實現。我看到了WPF的實現,如果有必要,我可以嵌套它,但是使用原生的WinForms文本框派生會更好。到目前為止,我還沒有試過,但是有沒有人看到明顯的問題呢?public class WatermarkTextBox:TextBox{
public string WatermarkText { get; set; }
public Color WatermarkColor { get; set; }
private Color TextColor { get; set; }
private bool isInTransition;
public WatermarkTextBox()
{
WatermarkColor = SystemColors.GrayText;
}
private bool HasText { get { return Text.IsNotNullOrBlankOr(WatermarkText); }}
protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
if (HasText) return;
isInTransition = true;
ForeColor = TextColor;
Text = String.Empty;
isInTransition = false;
}
protected override void OnForeColorChanged(EventArgs e)
{
base.OnForeColorChanged(e);
if (!isInTransition) //the change came from outside
TextColor = ForeColor;
}
protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
if (HasText) return;
isInTransition = true;
ForeColor = WatermarkColor;
Text = WatermarkText.EmptyIfNull();
isInTransition = false;
}}編輯:上面的工作最終會與一些技巧,但CueProvider工作得更好。以下是我的最后實現:public class WatermarkTextBox:TextBox{
private string watermarkText;
public string WatermarkText
{
get { return watermarkText; }
set
{
watermarkText = value;
if (watermarkText.IsNullOrBlank())
CueProvider.ClearCue(this);
else
CueProvider.SetCue(this, watermarkText);
}
}}我本可以完全集成CueProvider功能,但是這個功能非常好。
- 3 回答
- 0 關注
- 429 瀏覽
添加回答
舉報
0/150
提交
取消