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
提交
取消