c# - 禁用 RichTextBox 或 TextBox 中的选择突出显示

标签 c# winforms textbox selection richtextbox

如何在我的 Windows 窗体应用程序中禁用 RichTexBoxTextBox 的选择突出显示,如图所示。

enter image description here

我需要将选择突出显示颜色从 Blue 更改为 White,因为我需要在 TextBoxRichTextBox< 中隐藏选择一直。我尝试使用 RichTextBox.HideSelection = true,但它并没有像我预期的那样工作。

最佳答案

你可以处理WM_SETFOCUS RichTextBox 的消息并将其替换为 WM_KILLFOCUS .

在下面的代码中,我创建了一个具有 Selectable 属性的 ExRichTextBox 类:

  • Selectable:启用或禁用选择突出显示。如果将 Selectable 设置为 false,则选择突出显示将被禁用。它默认启用。

备注:它不会使控件成为只读的,如果你需要让它成为只读的,你还应该将ReadOnly属性设置为true及其BackColorWhite

public class ExRichTextBox : RichTextBox
{
    public ExRichTextBox()
    {
        Selectable = true;
    }
    const int WM_SETFOCUS = 0x0007;
    const int WM_KILLFOCUS = 0x0008;

    ///<summary>
    /// Enables or disables selection highlight. 
    /// If you set `Selectable` to `false` then the selection highlight
    /// will be disabled. 
    /// It's enabled by default.
    ///</summary>
    [DefaultValue(true)]
    public bool Selectable { get; set; }
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_SETFOCUS && !Selectable)
            m.Msg = WM_KILLFOCUS;

        base.WndProc(ref m);
    }
}

您可以对 TextBox 控件执行相同的操作。

关于c# - 禁用 RichTextBox 或 TextBox 中的选择突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39589176/

相关文章:

c++ - Winapi EDITTEXT无法粘贴

c#调用另一个项目的窗体

c# - 线程同步 XNA 网络

c# - 如何在 Windows 窗体中制作窗体模态?

c# - 创建我创建的窗口的新实例。多次调用做不同的事情

html - 如何在 asp.net-mvc 中的 html 文本框上设置禁用属性?

c# - 以编程方式声明任意等级的数组

c# - 将行从一个表移动到另一个表

c# - 在设计器中查看表单时出现错误 - 我该如何避免这种情况?

c# - 如何设置DataGridViewCell自动换行单个长字?