C#/WinForm给控件加入hint文字

简介: 本文转载:http://www.cnblogs.com/qingci/archive/2012/10/15/2724373.html今天突然来了一个这样的需求,需要在C#的编辑框上加入一个Hint水印效果,类似如下图: public static class Win32Utility     {         [DllImport("user32.

本文转载:http://www.cnblogs.com/qingci/archive/2012/10/15/2724373.html

今天突然来了一个这样的需求,需要在C#的编辑框上加入一个Hint水印效果,类似如下图:

image

 

public  static  class Win32Utility 
    {
 
        [DllImport( " user32.dll ", CharSet = CharSet.Auto)] 
         private  static  extern Int32 SendMessage(IntPtr hWnd,  int msg, 
             int wParam, [MarshalAs(UnmanagedType.LPWStr)]  string lParam);
 
        [DllImport( " user32.dll ")] 
         private  static  extern  bool SendMessage(IntPtr hwnd,  int msg,  int wParam, StringBuilder lParam);
 
        [DllImport( " user32.dll ")] 
         private  static  extern  bool GetComboBoxInfo(IntPtr hwnd,  ref COMBOBOXINFO pcbi);
 
        [StructLayout(LayoutKind.Sequential)] 
         private  struct COMBOBOXINFO 
        { 
             public  int cbSize; 
             public RECT rcItem; 
             public RECT rcButton; 
             public IntPtr stateButton; 
             public IntPtr hwndCombo; 
             public IntPtr hwndItem; 
             public IntPtr hwndList; 
        }
 
        [StructLayout(LayoutKind.Sequential)] 
         private  struct RECT 
        { 
             public  int left; 
             public  int top; 
             public  int right; 
             public  int bottom; 
        }
 
         private  const  int EM_SETCUEBANNER =  0x1501
         private  const  int EM_GETCUEBANNER =  0x1502;
 
         public  static  void SetCueText(Control control,  string text) 
        { 
             if (control  is ComboBox) 
            { 
                COMBOBOXINFO info = GetComboBoxInfo(control); 
                SendMessage(info.hwndItem, EM_SETCUEBANNER,  0, text); 
            } 
             else 
            { 
                SendMessage(control.Handle, EM_SETCUEBANNER,  0, text); 
            } 
        }
 
         private  static COMBOBOXINFO GetComboBoxInfo(Control control) 
        { 
            COMBOBOXINFO info =  new COMBOBOXINFO(); 
             // a combobox is made up of three controls, a button, a list and textbox; 
            
// we want the textbox 
            info.cbSize = Marshal.SizeOf(info); 
            GetComboBoxInfo(control.Handle,  ref info); 
             return info; 
        }
 
         public  static  string GetCueText(Control control) 
        { 
            StringBuilder builder =  new StringBuilder(); 
             if (control  is ComboBox) 
            { 
                COMBOBOXINFO info =  new COMBOBOXINFO(); 
                 // a combobox is made up of two controls, a list and textbox; 
                
// we want the textbox 
                info.cbSize = Marshal.SizeOf(info); 
                GetComboBoxInfo(control.Handle,  ref info); 
                SendMessage(info.hwndItem, EM_GETCUEBANNER,  0, builder); 
            } 
             else 
            { 
                SendMessage(control.Handle, EM_GETCUEBANNER,  0, builder); 
            } 
             return builder.ToString(); 
        }
 
    }
 

 

然后在程序里这样调用即可。实现超简单… (本文章无源码,需要使用直接拷贝如上代码即可)

image

 

 

PS:最后推荐一个很强大的,在CodeProject上看到的。

http://www.codeproject.com/Articles/15954/C-TextBox-with-Outlook-2007-style-prompt
目录
相关文章
|
7月前
|
C#
C# WinForm发送Email邮件
C# WinForm发送Email邮件
C# WinForm发送Email邮件
|
2月前
|
SQL 开发框架 .NET
C#一分钟浅谈:数据绑定与数据源控件
在Web开发中,数据绑定和数据源控件是实现动态网页的关键技术。本文从基础概念入手,详细讲解数据绑定的原理及其在ASP.NET中的应用,并介绍常见数据绑定方式:手动绑定和自动绑定。接着,文章重点介绍了ASP.NET中的数据源控件,如`SqlDataSource`、`ObjectDataSource`、`XmlDataSource`和`LinqDataSource`,并通过具体示例演示如何使用`SqlDataSource`和`GridView`进行数据绑定。最后,还列举了一些常见问题及其解决办法,帮助读者更好地理解和应用这些技术。
66 4
|
4月前
|
C#
|
29天前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
3月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
2月前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
122 0
|
2月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
98 0
|
2月前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
89 0
|
4月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
197 3
C#winform中使用SQLite数据库
|
4月前
|
数据库
C#Winform使用NPOI获取word中的数据
C#Winform使用NPOI获取word中的数据
184 2