【问题标题】:RichTextBox hyperlink does not raise clicked event when the form is not focused当表单未获得焦点时,RichTextBox 超链接不会引发单击事件
【发布时间】:2016-11-02 04:53:41
【问题描述】:

当窗体没有获得焦点时,单击窗体上 RichTextBox 内的超链接不会引发单击事件。我必须点击两次。这是设计使然吗?如果是错误,最优雅的解决方案是什么?无论表单是否获得焦点,我都想通过单击来引发 clicked 事件。

【问题讨论】:

    标签: .net winforms richtextbox


    【解决方案1】:

    所以你可以使用 Richtextbox 的鼠标悬停事件。像这样,

    private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
            {
                MessageBox.Show(e.LinkText);
            }
    
    private void richTextBox1_MouseHover(object sender, EventArgs e)
            {
                this.Focus();
            }
    

    结果(我将表单的 TopMost 属性设置为 true 以显示焦点或不清晰。顺便说一句,您可以从表单的标题中跟踪),

    希望有帮助,

    【讨论】:

    • 这会起作用,但是当用户只是在链接上移动并且表单意外获得焦点时,这是否也会产生不良影响?
    • 表单失去了焦点,所以你必须点击两次到richtextbox,在这个解决方案中,将鼠标悬停在richtextbox上会自动聚焦表单,你所说的与你的问题相冲突。是的,只需悬停即可集中注意力,否则您需要自己集中注意力。 @失败者
    【解决方案2】:

    简单地使用

    Mouse_Enter
    form1.getfocus
    

    我确定您知道鼠标输入事件,所以是的,这样做应该可以工作....

    【讨论】:

      【解决方案3】:

      您必须单击两次,因为表单不在焦点上;第一次单击使表单成为焦点,第二次单击触发RichTextBox 控件的LinkClicked 事件。

      一旦鼠标光标在其边界内,您可以将表单设置为焦点。将以下代码添加到表单的构造函数中:

      MouseEnter += (s, e) => Focus();
      

      然后在窗体处于焦点时单击超链接,并且LinkClicked 事件将根据需要在第一次单击时触发。

      【讨论】:

        猜你喜欢
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-18
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多