这是一个扩展模块,它向 TextBox 和 ComboBox 控件添加了一个方法,用于激活 Cue Banner1 内部功能。对于 TextBox,有两种可用的风格:提示横幅是可见的:a) 直到控件获得焦点,b) 在输入第一个字符后。
ComboBox 控件在收到焦点或打开DropDown 后立即移除提示横幅。
Win32函数SendMessage用于修改Edit控件的行为——TextBox控件和ComboBox的Edit子控件,分别发送EM_SETCUEBANNER和CB_SETCUEBANNER消息。
1设置文本提示或提示,由
用于提示用户输入信息的编辑控件。
由于这些是扩展方法,每个方法扩展控件功能并且可以直接调用:
' The Cue Banner is visible until the control gets focus
TextBox1.SetCueBanner("MM/DD/YYYY", False)
' The Cue Banner is visible until a character is entered
TextBox1.SetCueBanner("User Name...", True)
ComboBox1.SetCueBanner("Select an item...")
在项目中添加一个模块并用这个替换模板生成的代码:
VB.Net 版本:
Public Module ModExtentions
Private Const EM_SETCUEBANNER As Integer = &H1501
Private Const CB_SETCUEBANNER As Integer = &H1703
<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
Private Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
End Function
<Extension()>
Public Sub SetCueBanner(tbox As TextBox, ByVal text As String, ByVal showOnFocus As Boolean)
If tbox.IsHandleCreated Then SendMessage(tbox.Handle, EM_SETCUEBANNER, If(showOnFocus, 1, 0), text)
End Sub
<Extension()>
Public Sub SetCueBanner(cbo As ComboBox, ByVal text As String)
If cbo.IsHandleCreated Then SendMessage(cbo.Handle, CB_SETCUEBANNER, 0, text)
End Sub
End Module
C#版本:
using System.Runtime.InteropServices;
using System.Windows.Forms;
public static class ExtControls
{
private const int EM_SETCUEBANNER = 0x1501;
private const int CB_SETCUEBANNER = 0x1703;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, string lParam);
public static void SetCueBanner(this TextBox tbox, string text, bool showOnFocus) {
if (tbox.IsHandleCreated) {
SendMessage(tbox.Handle, EM_SETCUEBANNER, showOnFocus ? 1 : 0, text);
}
}
public static void SetCueBanner(this ComboBox cbo, string text) {
if (cbo.IsHandleCreated) {
SendMessage(cbo.Handle, CB_SETCUEBANNER, 0, text);
}
}
}