当前位置: 首页 > 编程语言 > C#

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

时间:2023-04-11 02:53:51 C#

显示C#winforms编辑控件的提示我正在开发C#winforms应用程序(VS.NET2008,.NET3.5sp1)。我在表单上有一个搜索字段,而不是在搜索字段旁边有一个标签,我想在搜索字段本身的背景中显示一些灰色文本(例如,“搜索词”)。当用户开始在搜索字段中键入文本时,文本应该会消失。我怎样才能做到这一点?您需要使用一些P/Inovke互操作代码来执行此操作。查找Win32APISendMessage函数和EM_SETCUEBANNER消息。最好发布代码而不是链接。我是从这里发布的//版权所有(c)2008JasonKemp//特此免费向任何获得此软件和相关文档文件(“软件”)副本的人授予许可,以处理//在软件中不受限制,包括但不限于//使用、复制、修改、合并、发布、分发、再许可和/或出售//软件副本的权利,以及允许软件的使用人//提供这样做,但须满足以下条件://上述版权声明和本许可声明应包含在//本软件的所有副本或实质部分中。//软件“按原样”提供,不提供任何形式的明示或//暗示保证,包括但不限于适销性、//特定用途的适用性和非侵权的保证。在任何情况下,//作者或版权持有人均不对任何索赔、损害或其他//责任承担责任,无论是在合同、侵权或其他由//软件引起或与之相关的//软件的使用或其他交易//软件。使用系统;使用System.Runtime.InteropServices;使用System.Windows.Forms;使用系统文本;publicstaticclassWin32Utility{[DllImport("user32.dll",CharSet=CharSet.Auto)]privatestaticexternInt32SendMessage(IntPtrhWnd,intmsg,intwParam,[MarshalAs(UnmanagedType.LPWStr)]stringlParam);[DllImport("user32.dll")]privatestaticexternboolSendMessage(IntPtrhwnd,intmsg,intwParam,StringBuilderlParam);[DllImport("user32.dll")]privatestaticexternboolGetComboBoxInfo(IntPtrhwnd,refCOMBOBOXINFOpcbi);[StructLayout(LayoutKind.Sequential)]privatestructCOMBOBOXINFO{publicintcbSize;公共RECTrcItem;公共RECTrcButton;公共IntPtr状态按钮;公共IntPtrhwndCombo;公共IntPtrhwndItem;公共IntPtrhwndList;}[StructLayout(LayoutKind.Sequential)]私有结构RECT{公共int左;公共诠释顶部;公共权利;公共底部;私人常量EM_SETCUEBANNER=0x1501;私有常量EM_GETCUEBANNER=0x1502;publicstaticvoidSetCueText(Controlcontrol,stringtext){if(controlisComboBox){COMBOBOXINFOinfo=GetComboBoxInfo(control);SendMessage(info.hwndItem,EM_SETCUEBANNER,0,文本);}else{SendMessage(control.Handle,EM_SETCUEBANNER,0,text);}}privatestaticCOMBOBOXINFOGetComboBoxInfo(Controlcontrol){COMBOBOXINFOinfo=newCOMBOBOXINFO();//组合框由三个控件组成,一个按钮,一个列表和文本框;//我们想要文本框info.cbSize=Marshal.SizeOf(info);GetComboBoxInfo(control.Handle,refinfo);返回信息;}publicstaticstringGetCueText(Controlcontrol){StringBuilderbuilder=newStringBuilder();if(controlisComboBox){COMBOBOXINFOinfo=newCOMBOBOXINFO();//组合框由两个控件组成,一个列表和一个文本框;//我们想要文本框信息o.cbSize=Marshal.SizeOf(信息);GetComboBoxInfo(control.Handle,refinfo);SendMessage(info.hwndItem,EM_GETCUEBANNER,0,建设者);}else{SendMessage(control.Handle,EM_GETCUEBANNER,0,builder);}返回生成器.ToString();我认为这样做的通常方法是将文本的颜色设置为灰色并用提示文本预先填充它然后,根据获得和失去焦点为文本字段的焦点事件编写处理程序修改字段内容和颜色同时。这是一些伪代码(抱歉,它根本不是C#代码。我脑子里现在有Actionscript):TextInputmyInput;布尔值showingHint=true;myInput.text="搜索条件";myInput.color=0xcccccc;myInput.onFocusGained=function(){if(showingHint){myInput.text="";myInput.color=0x000000;显示提示=假;}}myInput.onFocusLost=function(){if(!showingHint&&myInput.text.length==0){myInput.text="搜索条件";myInput.color=0xcccccc;显示提示=真;请记住,如果用户没有手动更改文本,您只想更改失去焦点的文本。使用单独的布尔值来跟踪您是否正在显示提示,以便您可以将用户手动输入的“提示”文本区分为实际内容。同样,如果正在显示提示,您只想清除输入框的内容,以免不小心删除用户输入。尝试从此链接提供代码。它扩展了winforms的功能,因为它不是开箱即用的。源代码也可用。请记住,它只适用于WinXP或更高版本。http://www.aaronlerch.com/blog/2007/12/01/watermarked-edit-controls/文本框控件中有内置功能-AutoCompleteMode和AutoCompleteSource。在深入研究自定义或第三方控件之前,它们可能值得一试。以上就是C#学习教程:显示C#winforms编辑控件提示的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢