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

本文转载: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值