为了账号安全,请及时绑定邮箱和手机立即绑定

WinForms中的水印文本框

WinForms中的水印文本框

慕哥6287543 2019-06-18 12:59:28
WinForms中的水印文本框有人能告诉我一个基本Windows窗体文本框的良好实现吗?该文本框最初将显示当光标进入时消失的水印文本?我认为我可以通过对Enter和Left事件的一些创造性的使用来创建我自己的东西,但是我确信在某个地方有一个非常有用的实现。我看到了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 回答

  • 3 回答
  • 0 关注
  • 410 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信