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

如何在我的Windows窗体应用程序中禁用RichTexBox或TextBox的选择突出显示,如图所示.

我需要将选择突出显示颜色从蓝色更改为白色,因为我需要始终隐藏TextBox或RichTextBox中的选择.我试图使用RichTextBox.HideSelection = true,但它并没有像我期望的那样工作.

解决方法:

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

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

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

备注:它不会使控件成为只读,如果您需要将其设置为只读,则还应将ReadOnly属性设置为true,将BackColor设置为White.

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控件执行相同的操作.

上一篇:WPF入门教程系列十六——WPF中的数据绑定(二)


下一篇:c# – 特殊(或国外)字符