【问题标题】:C#.net WinForms how to causes text in textbox to disappear when textbox is on focus?当文本框处于焦点时,C#.net WinForms 如何导致文本框中的文本消失?
【发布时间】:2012-01-12 11:05:56
【问题描述】:

有没有一种方法可以创建在文本框处于焦点时消失的浅灰色文本?

目前,我在文本框中写入了文本,但我必须选择文本并手动删除它(有点烦人......)

我知道当我专注于框(使用事件)时我可以做一些事情但是,我不希望它在每次用户选择该框时清除文本......而只是第一次。换句话说,我只是希望提示文本消失(如果他们在输入一次后选择框,则不是他们输入的文本)......

我也意识到我可以使用计数器之类的东西来跟踪是否是第一次单击该框..但是,我正在寻找一种更清洁的方法来做到这一点.....

【问题讨论】:

  • 为焦点添加一个事件监听器,然后在第一次调用时移除它
  • 根据您的编辑...为什么不使用 onform 加载?
  • @Tom Bass,是的,我猜我可以做到。我想我更多地考虑它是​​如何在 js 中完成的以及它有多干净。这是一行代码,它就是这样做的。很酷的一点是,当您单击框(如果您没有输入任何内容)时,它会返回到提示文本。我也可以在这里这样做......但似乎应该有一种更清洁的方式。感谢您的回复:)

标签: c# .net winforms textbox


【解决方案1】:

类似于下面的代码。 请注意,这不是编译代码。只是分享这个想法,如果用户没有输入任何文本,您可能希望保留默认设置。为此处理失去焦点并重置为默认值。

   public class FancyTextBox : TextBox{

private bool _isDefaultText;
public FancyTextBox(){
     UpdateDefaultSettings(true);         
}

protected override void OnGotFocus(EventArgs e)
{
    base.OnGotFocus(e);
    UpdateDefaultSettings(false);
}

protected override void OnLostFocus(EventArgs e)
{
    base.OnLostFocus(e);
    if (String.IsNullOrEmpty(Text))
    {
        //Retain Default Setting.
        UpdateDefaultSettings(true);
    }
}

private void UpdateDefaultSettings(bool isDefault){
    _isDefaultText = isDefault;
    if(_isDefaultText){
       Text = "Please enter";
       this.ForeColor= Color.Gray;  
    }
    else{
       Text = "";
       ForeColor = Color.Black;
    }
}    

}

【讨论】:

    【解决方案2】:

    一个更简单的答案是

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
    
    public static void SetHint(TextBox textBox, string hintText)
    {
     const uint EmSetCueBanner = 0x1501;
     SendMessage(textBox.Handle, EmSetCueBanner, 0, hintText);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多