gpt4 book ai didi

c# - 如何在 C# Winforms 程序中突出显示文本框中的文本?

转载 作者:太空狗 更新时间:2023-10-29 20:48:56 26 4
gpt4 key购买 nike

我有一个带有多个文本框的 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 并将所有“讨论文本框的用途”放入其中?

只需将 ToolTip 拖放到窗体中。然后在每个 TextBox 属性中,您应该在 toolTip1 的 Misc 部分 ToolTip 中有额外的条目(或者如果您重命名它,它的名称将是什么) .

然后,当用户将鼠标悬停在 TextBox 上(只读/禁用 TextBox 似乎不显示工具提示)并停在那里 1 秒时,工具提示应该显示正确的信息。

您最终或什至可以在 TextBox 旁边有一个 Label 来说明是什么,但是有一个 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);
}
}

在您的表单中,您可以像这样激活它:

textBoxYourWhatever.SetWatermark("Text that should display");

只要 TextBox 为空,它就会一直留在那里。当用户进入 TextBox 文本消失。当 TextBox 被清除(由用户或自动)时,它会再次出现。无需任何特殊事件等。

编辑:

我还添加了内部类 WaterMarkTextBox,它使您可以选择简单地使用 Designer 中可用的新 WaterMarkTexBox。然后将其拖放到您的设计器中并使用它。它的行为就像普通文本框一样,只是为您提供了额外的字段 WaterMarkText。

我还是比较喜欢第一种方法。不会让您再次重建图形用户界面。

关于c# - 如何在 C# Winforms 程序中突出显示文本框中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com