我有一个带有多个文本框的C#
Winforms程序.我使用每个框的属性在其中放置文本,向用户解释其中的值.每当用户选择该框时,我希望文本突出显示.通过Tab键或鼠标单击.如果有一种方法可以显示文本框中除了它之外的某个值,我就不必这样做了.
我尝试了TextBox.select方法,但没有效果.与this相同.
这是我的计划的Screenshot.
我的代码:
private void grapplingText1_MaskInputRejected(object sender,MaskInputRejectedEventArgs e) { grapplingText1.SelectionStart = 0; grapplingText1.SelectionLength = grapplingText1.Text.Length;
这样做,还是更需要?
解决方法
你怎么样将ToolTip分配给TextBox并将所有“对话是什么文本框”放在那里?
只需拖动和放大在Form中删除ToolTip.然后在每个TextBox属性中,你应该在toolTip1上的Misc部分ToolTip中有额外的条目(或者如果你重命名它的名字将是什么).
然后,当用户将鼠标悬停在TextBox上时(Read Only / Disabled TextBox似乎不显示工具提示)并在那里停留1秒钟,ToolTip应显示正确的信息.
你最终甚至可以更好地在TextBox旁边有一个标签说明是什么,但是使用工具提示也是一个好主意,通过它向用户解释更多信息.
对于使用WaterMark做的事情,所以你不必通过设置事件,照顾SelectAll等来做很长的事情,你可以这样做.创建新的watermark.cs文件并将其替换为此代码.确保已更改名称空间以匹配程序命名空间.
#region using System; using System.Runtime.InteropServices; using System.Windows.Forms; #endregion namespace Watermark { public static class TextBoxWatermarkExtensionMethod { private const uint ECM_FIRST = 0x1500; private const uint EM_SETCUEBANNER = ECM_FIRST + 1; [DllImport("user32.dll",CharSet = CharSet.Auto,SetLastError = false)] private static extern IntPtr SendMessage(IntPtr hWnd,uint Msg,uint wParam,[MarshalAs(UnmanagedType.LPWStr)] string lParam); public static void SetWatermark(this TextBox textBox,string watermarkText) { SendMessage(textBox.Handle,EM_SETCUEBANNER,watermarkText); } } } internal class WatermarkTextBox : TextBox { private const uint ECM_FIRST = 0x1500; private const uint EM_SETCUEBANNER = ECM_FIRST + 1; private string watermarkText; public string WatermarkText { get { return watermarkText; } set { watermarkText = value; SetWatermark(watermarkText); } } [DllImport("user32.dll",[MarshalAs(UnmanagedType.LPWStr)] string lParam); private void SetWatermark(string watermarkText) { SendMessage(Handle,watermarkText); } }
在您的表单中,您可以像这样激活它:
textBoxYourWhatever.SetWatermark("Text that should display");
只要TextBox为空,它就会一直存在.当用户进入TextBox文本消失时.当清除TextBox(由用户或自动)时,它会再次出现.不需要任何特殊活动等
编辑:
我还添加了内部类WaterMarkTextBox,它为您提供了一个选项,可以简单地使用Designer中可用的新WaterMarkTexBox.然后将其拖放到您的设计器并使用它.它的行为与普通文本框一样,只为您提供了额外的字段WaterMarkText.
我还是喜欢第一种方法.不会让你再次重建你的gui.