【问题标题】:make richtextbox not respond to mouse events使richtextbox不响应鼠标事件
【发布时间】:2016-07-08 21:48:56
【问题描述】:

我正在开发一个应用程序,并在其中一种形式中放置了一个富文本框,其中包含用户将要输入的一些文本,我已将富文本框的 ReadOnly 属性设置为 true,表单的 keypreview 设置为 true,并且我已经处理了表单按键事件将蓝色应用于正确的按键,将红色应用于richtextbox中当前字符的错误按键。现在我需要限制用户只能输入文本,他们不应该能够使用鼠标 caz 选择 Richtextbox 文本,这样他们可能会弄乱我的应用程序。

tnx 提前

【问题讨论】:

  • 您是否曾在应用程序中看到过这样的行为?与其尝试限制用户与您的富文本框的交互,不如向用户显示另一个富文本机器人,然后在他使用第二个控件完成任务后,将内容添加到第一个控件。
  • 我不明白@Reza,当用户按下一个键并且在此之前单击只读富文本框(富文本框有焦点)时,它会产生一些错误声音....当时.......
  • 我从未在应用程序中看到过这样的设计,所以我会避免遵循这样的想法。相反,我将创建第二个富文本框,让用户对第二个富文本框做任何他想做的事,在他完成操作并确认完成后,我将使用第二个控件的内容并将其添加到第一个控件或者我想做的任何事情。
  • 只需为richtextbox 的Enter 事件编写一个事件处理程序。并使用所需控件的 Focus() 方法将焦点移回您想要的位置。
  • @RezaAghaei richtextbox 仅用于显示用户没有与之交互的彩色文本

标签: c# winforms richtextbox


【解决方案1】:

您需要继承RichTextBox 并禁用鼠标事件处理。

public class DisabledRichTextBox : System.Windows.Forms.RichTextBox
{
    // See: http://wiki.winehq.org/List_Of_Windows_Messages

    private const int WM_SETFOCUS   = 0x07;
    private const int WM_ENABLE     = 0x0A;
    private const int WM_SETCURSOR  = 0x20;

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        if (!(m.Msg == WM_SETFOCUS || m.Msg == WM_ENABLE || m.Msg == WM_SETCURSOR))
            base.WndProc(ref m);
    }
}

它将像一个标签一样,阻止焦点、用户输入、光标更改,而不会被实际禁用。

您还需要保留ReadOnly = true 以禁用编辑。

【讨论】:

  • tnx Adnan Umer 的答案它有效并解决了我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多