【问题标题】:Clearing A Single Texbox when clicked In C#?在 C# 中单击时清除单个文本框?
【发布时间】:2011-10-21 22:15:42
【问题描述】:

如何做到这一点,以便在单击文本框时清除文本框中最初的文本(“在此处输入文本”),并且仅在第一次单击时才被清除?

编辑:抱歉,我使用的是 C#。

【问题讨论】:

    标签: c# .net winforms textbox


    【解决方案1】:

    您正在尝试做的是称为“水印”文本框。有很多方法可以做到这一点:

    1) 使用文本框上的 MouseClick 事件删除默认文本。
    2)使用现成可用的类来实现它,就像在这里找到的那​​样: http://vidmar.net/weblog/archive/2008/11/05/watermarked-textbox-in-windows-forms-on-.net.aspx

    您可以在 Stackoverflow 上提出的类似问题中找到更多信息:
    Watermark / hint text / placeholder TextBox in WPF
    Watermark in System.Windows.Forms.TextBox
    How to use watermark System.Windows.Forms.TextBox using C#?
    希望这会有所帮助。
    祝你好运。

    【讨论】:

      【解决方案2】:

      我不会遵循在 GotFocus 事件中更改文本的建议 - 它会在绑定过程中导致问题并且不优雅。

      WinForms:

      有一种特殊的技术可以为任何标准的 Windows 文本框设置这种工具提示。声明:

      private const uint ECM_FIRST = 0x1500;
      private const uint EM_SETCUEBANNER = ECM_FIRST + 1;
      
      [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
      static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
      

      然后使用:

      private void SetWatermark(string watermarkText)
      {
          SendMessage(this.Handle, EM_SETCUEBANNER, 0, watermarkText);
      }    
      

      HTML:

      <input name="email" placeholder="Enter text here">
      

      【讨论】:

        【解决方案3】:

        实现这一点的最常见方法是处理文本框的焦点事件(取决于您使用的框架会有所不同),然后测试预期的“提示字符串”。如果它在那里,那么你清除文本框。如果没有,你别管它。

        如果您只想显示一次“提示”,那么您可以在处理完事件后取消订阅。

        请注意,如果您向我们提供有关您正在使用的技术(WinForms/WPF/ASP.NET/MVC/jQuery/HTML5/等)的更多信息,那么可能会采用更具体且可能更强大的方法。

        【讨论】:

        • 为此使用 GotFocus 事件并不是实现此目的的最佳方式。考虑您可能遇到的绑定问题。
        • @michael 公平点,虽然考虑到 OP 并没有真正说明他们正在使用什么技术,但我试图给出一个解决问题的一般方法。内森,我要回滚你的编辑。随意将其作为单独的答案发布。
        • @dlev 谢谢!如果可以的话,我会投票。我按照您的建议编辑了我的帖子以包含我正在使用的技术,因此也感谢您。
        • @dlev 你能提供一个示例代码吗?我很难弄清楚如何正确使用它。
        【解决方案4】:

        您可以执行以下操作:

        • 处理焦点事件(Focus),如果是一组则清除文本 作为“小费”
        • 处理焦点丢失事件(LostFocus)和文本框是否为空 将“提示”添加回文本框

        【讨论】:

          【解决方案5】:

          假设它的 WinForms 应用程序,只需为 GotFocusClick 事件绑定一个处理程序。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-08-23
            • 1970-01-01
            • 2012-06-26
            • 1970-01-01
            • 1970-01-01
            • 2013-01-13
            • 1970-01-01
            • 2015-03-11
            相关资源
            最近更新 更多