Sla*_*ard 7 c# textbox highlight winforms
我有一个带有多个文本框的C#Winforms程序.我使用每个框的属性在其中放置文本,向用户解释其中的值.每当用户选择该框时,我希望文本突出显示.通过Tab键或鼠标单击.如果有一种方法可以显示文本框中除了它之外的某个值,我就不必这样做了.
我尝试了Textbox.select方法,但没有效果.与此相同.
这是我的程序的屏幕截图.
我的代码:
private void grapplingText1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
grapplingText1.SelectionStart = 0;
grapplingText1.SelectionLength = grapplingText1.Text.Length;
Run Code Online (Sandbox Code Playgroud)
这样做,还是更需要?
你怎么样分配ToolTip至TextBox并把所有的"讲什么文本框是"里面是什么?
只需ToolTip在表单内拖放即可.然后在每个TextBox属性,你应该在其它部分中的附加项ToolTip上toolTip1(或者,如果你重新命名它不管它的名字会).
然后,当用户将鼠标悬停TextBox(只读/已禁用TextBox似乎不显示工具提示)并在那里停留1秒钟时,工具提示应显示正确的信息.
你最终或者甚至可以更好Label地TextBox说下一个是什么,但有一个ToolTip也是一个好主意,通过它向用户解释更多信息.
对于使用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, 0, 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", CharSet = CharSet.Auto, SetLastError = false)] private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
private void SetWatermark(string watermarkText) {
SendMessage(Handle, EM_SETCUEBANNER, 0, watermarkText);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的表单中,您可以像这样激活它:
textBoxYourWhatever.SetWatermark("Text that should display");
Run Code Online (Sandbox Code Playgroud)
只要它TextBox是空的,它就会停留在那里.当用户进入TextBox文本时消失.TextBox清洁时(用户或自动清洁)再次出现.不需要任何特殊活动等
编辑:
我还添加了内部类WaterMarkTextBox,它为您提供了一个选项,可以简单地使用Designer中可用的新WaterMarkTexBox.然后将其拖放到您的设计器并使用它.它的行为与普通文本框一样,只为您提供了额外的字段WaterMarkText.
我还是喜欢第一种方法.不会让你再次重建你的gui.