在C#中单击时清除单个文本框?
如何使文本框被单击时,文本框中原来的文本(“此处输入文本”)被清除,并且仅在第一次单击时才被清除在C#中单击时清除单个文本框?,c#,.net,winforms,textbox,C#,.net,Winforms,Textbox,如何使文本框被单击时,文本框中原来的文本(“此处输入文本”)被清除,并且仅在第一次单击时才被清除 编辑:对不起,我正在使用C#。实现这一点的最常用方法是处理文本框的焦点事件(取决于您使用的框架不同),然后测试预期的“提示字符串”。如果它在那里,则清除文本框。如果没有,你就别管它 如果您只想显示“提示”一次,那么您可以在处理完该活动后取消订阅 请注意,如果您向我们提供有关您正在使用的技术的更多信息(WinForms/WPF/ASP.NET/MVC/jQuery/HTML5/等),则可能会有一种更具
编辑:对不起,我正在使用C#。实现这一点的最常用方法是处理文本框的焦点事件(取决于您使用的框架不同),然后测试预期的“提示字符串”。如果它在那里,则清除文本框。如果没有,你就别管它 如果您只想显示“提示”一次,那么您可以在处理完该活动后取消订阅
请注意,如果您向我们提供有关您正在使用的技术的更多信息(WinForms/WPF/ASP.NET/MVC/jQuery/HTML5/等),则可能会有一种更具体、更可靠的方法。假设其WinForms应用程序,只需为
GotFocus
或单击事件绑定处理程序。您可以执行以下操作:
- 处理焦点事件(焦点)并清除文本(如果是一组)
作为“提示”
- 处理焦点丢失事件(LostFocus)以及文本框是否为空
将“提示”添加回文本框
我不同意在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:
您试图做的是将文本框称为“水印”。有许多方法可以实现这一点:
1) 使用文本框上的鼠标单击事件删除默认文本。
2) 使用一个现成的类来实现它,如下所示:
您可以在Stackoverflow的类似问题中找到更多信息,这里有一些:
希望这有帮助。
祝你好运。为此使用GotFocus事件并不是实现这一目标的最佳方式。考虑一下你可能遇到的绑定问题。@米迦勒公平点,虽然考虑到OP并没有具体说明他们使用的是什么技术,但我试图给出一个通用的方法来解决这个问题。内森,我要收回你的编辑。请随意将其作为单独的答案发布。@dlev谢谢!如果可以的话,我会投票的。我编辑了我的文章,以包括我正在使用的技术,正如你所建议的,因此也非常感谢。@dlev你能提供一个示例代码吗?我很难弄清楚如何正确使用它。
<input name="email" placeholder="Enter text here">