【问题标题】:Disable the selection highlight in RichTextBox or TextBox禁用 RichTextBox 或 TextBox 中的选择突出显示
【发布时间】:2017-01-28 02:06:45
【问题描述】:

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

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

【问题讨论】:

标签: c# winforms textbox selection richtextbox


【解决方案1】:

您可以处理RichTextBoxWM_SETFOCUS 消息并将其替换为WM_KILLFOCUS

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

  • Selectable:启用或禁用选择突出显示。如果您将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 控件执行相同操作。

【讨论】:

  • 像魔术一样工作。我会更改代码示例,因此 Selectable 将是错误的...
  • @Sipo 很高兴听到!我将其默认设置为 true 的原因是因为我不想更改 RichtextBox 的默认行为,除非您有意将 Selectable 设置为 false
  • 感谢您的快速评论!我认为,因为默认行为正是 OP 想要的,所以它会更合适......
  • @Sipo 感谢您的反馈。我明白了,我稍微编辑了答案,以便更清楚地说明,要禁用选择,您需要将 Selectable 属性设置为 false
猜你喜欢
  • 2015-12-12
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 2014-09-18
  • 2013-05-19
  • 2010-10-24
相关资源
最近更新 更多