【问题标题】:C# MouseClick Event Doesn't Fire On Middle Click or Right ClickC# MouseClick 事件不会在中键单击或右键单击时触发
【发布时间】:2018-10-06 13:44:01
【问题描述】:

这似乎应该有效,但事实并非如此。我在 SWITCH 语句上设置了调试停止。此事件仅在左键单击时触发。什么都没有发生,并且在中键或右键单击时不会触发方法。有任何想法吗?附言我已经尝试过使用 MouseUp 和 MouseDown 事件和同样的问题。

这是我的代码:

this.textBox1.MouseClick +=
   new System.Windows.Forms.MouseEventHandler(this.textBox1_MouseClick);

private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
    switch (e.Button)
    {
        case MouseButtons.Left:
            // Left click
            textBox1.Text = "left";
            break;

        case MouseButtons.Right:
            // Right click
            textBox1.Text = "right";
            break;

        case MouseButtons.Middle:
            // Middle click
            textBox1.Text = "middle";
            break;
    }
}

【问题讨论】:

  • 改用textBox1_MouseDown 事件!这在这里工作正常;为避免弹出上下文菜单,您可能需要禁用快捷方式。顺便说一句:建议像这样测试鼠标按钮:if (e.Button.HasFlag(MouseButtons.Left)).. etc..
  • @TaW 在我发帖之前我做的第一件事是尝试 MouseDown 和 MouseUp。我有同样的问题。放置一个断点,该方法永远不会在中键或左键单击时触发。
  • 我知道你在写的时候试过了。但它在这里仍然有效。你把断点放在哪里? switch 声明?
  • @TaW 断点在开关线上
  • 这是 by design 用于 TextBox 和 RichTextBox 类。注意 MouseButtons.Left 的测试。我不确定为什么这被认为是必要的,它可能与本机操作系统控件中的内置上下文菜单有关。它可以通过从 TextBox 派生您自己的类并覆盖 OnMouseUp() 来修复,现在省略按钮上的测试。到那时,您可能会发现为什么它被认为是必要的:)

标签: c# right-click mouseclick-event


【解决方案1】:

您需要使用MouseDown event 来捕获鼠标中键和右键单击。 Click 或 MouseClick 事件在管道中为时已晚,并被引用回文本框的默认 OS 上下文菜单行为。

private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
    switch (e.Button)
    {
        case MouseButtons.Left:
            // Left click
            txt.Text = "left";
            break;

        case MouseButtons.Right:
            // Right click
            txt.Text = "right";
            break;

        case MouseButtons.Middle:
            // Middle click
            txt.Text = "middle";
            break;
    }
}

【讨论】:

  • 这很奇怪,因为这正是我最初尝试过的。我回到了我正在处理的表单,但它仍然无法正常工作。我在一个新表单上尝试过,现在它可以工作了。
  • @Kairan - 完全理解。我自己也经常这样做。只求一位同事帮我看林为树的。干杯。
  • 你的解决方案没有触发点击事件,我有一些点击代码需要执行所以我必须在右键条件内的鼠标按下事件中调用点击方法
  • @mehdei,你没投反对票吧?在 winform 应用程序中,在表单上放置一个按钮,按 F4 调出属性,选择闪电 ⚡ 按钮并映射 MouseDown 事件。
【解决方案2】:

您只需将该文本框的属性 ShortcutsEnabled 设置为 False 并在 MouseDown 事件上编写代码。

它会起作用的。

【讨论】:

    【解决方案3】:

    您是否尝试过在事件声明时设置停止? 也可以用鼠标中键单击来测试这个

    if e.Button = 4194304 Then
        a = b //set the stop here
    End if
    

    如果事件声明即使停止也没有触发,则项目有问题,新建一个并测试。

    【讨论】:

    • 抱歉,即使在事件声明(或内部任何地方)上,鼠标中键/鼠标右键也不会打断点。我重新创建了一个新的解决方案 + 项目,c# winforms 和相同的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多