显示C#winforms编辑控件的提示

时间:2020-03-05 18:48:31  来源:igfitidea点击:

我正在开发Cwinforms应用程序(VS.NET 2008,.NET 3.5 sp 1)。我在表单上有一个搜索字段,而不是在搜索字段旁边有一个标签,我想在搜索字段本身的背景中显示一些灰色文本(例如"搜索字词")。当用户开始在搜索字段中输入文本时,该文本应消失。我怎样才能做到这一点?

解决方案

回答

我们将需要使用一些P / Inovke互操作代码来执行此操作。查找Win32 API的SendMessage函数和EM_SETCUEBANNER消息。

回答

文本框控件-AutoCompleteMode和AutoCompleteSource中具有内置功能。在我们进入自定义或者第三方控制之前,可能值得一试。

回答

试试这个链接的代码。它扩展了winforms功能,因为不可能立即实现。源代码也可用。请记住,它仅适用于Win XP或者更高版本。

http://www.aaronlerch.com/blog/2007/12/01/watermarked-edit-controls/

回答

我认为通常这样做的方法是将文本的颜色设置为灰色,并用提示文本预先填充它。

然后,为文本字段的焦点事件编写处理程序,并在获得焦点和丢失焦点时修改字段的内容和颜色。这是一些伪代码(对不起,它完全不是Ccode。我现在大脑上有Actionscript):

TextInput myInput;
boolean showingHint = true;

myInput.text = "Search Terms";
myInput.color = 0xcccccc;

myInput.onFocusGained = function() {
  if(showingHint) {
    myInput.text = "";
    myInput.color = 0x000000;
    showingHint = false;
  }
}

myInput.onFocusLost = function() {
  if(!showingHint && myInput.text.length == 0) {
    myInput.text = "Search Terms";
    myInput.color = 0xcccccc;
    showingHint = true;
  }
}

请记住,如果用户没有手动更改文本,则只想更改丢失焦点的文本。使用单独的布尔值来跟踪是否显示提示,以便我们可以区分手动输入"提示"文本作为实际内容的用户。同样,如果只显示提示,则只想清除输入框的内容,这样就不会意外删除用户输入。