【问题标题】:Use Mouse Left and Right buttons in c# winforms在 c# winforms 中使用鼠标左键和右键
【发布时间】:2015-10-09 19:35:11
【问题描述】:

这个函数只识别鼠标左键。我怎样才能让这个程序识别鼠标的右键,以便用鼠标的右键单击这个按钮?。

 private void button2_Click(object sender, EventArgs e)
        {
            MouseEventArgs me = (MouseEventArgs)e;
            if (buttonwasclicked==false)
            {
                DrawLinesOnBitmap(button2.BackgroundImage);
                button2.BackgroundImage= ToGrayscale(button2.BackgroundImage);
                buttonwasclicked = true;
            }

            else {
                button2.BackgroundImageLayout = ImageLayout.Stretch; 
                button2.BackgroundImage = Image.FromFile("C:\\Users\\rati\\Desktop\\ks.png");
                buttonwasclicked = false;
            }
            if (me.Button == MouseButtons.Left)
            {
                mysum += md;
                if (buttonwasclicked == true) md *= -1; else md *= -1;
                label1.Text = mysum.ToString();
            }
            if (me.Button == MouseButtons.Right) {
                enemysum += ed;
                if (buttonwasclicked == true) ed *= -1; else ed *= -1;
                label2.Text = enemysum.ToString();
            }
        }

【问题讨论】:

  • 检查一下 ..stackoverflow.com/questions/3209217/… 您需要了解使用鼠标左键时单击按钮可能会触发......所以您需要按照我发布的链接中的答案进行操作
  • 改用 MouseClick 事件,测试 e.Button
  • PreviewMouseDown 事件会更容易使用吗?

标签: c# winforms button mouse


【解决方案1】:

使用“MouseClick”事件而不是“Click”事件,“Click”不能识别鼠标右键单击。

如果您使用的是 Visual Studio,只需转到设计器,单击按钮,转到属性,然后单击闪电图标。然后你找到“MouseClick”并双击它。

【讨论】:

  • @Elipzer 确实如此,我刚刚检查过^_^。
  • 我的测试用例中没有 :(
  • 您确定将其应用于控件而不是表单本身吗?
  • 是的,我有...我使用了复选框
  • 尝试使用面板或图片框或其他东西。编辑:刚刚尝试了一个按钮,它没有工作。我猜它适用于某些控件,但不适用于其他控件:/
【解决方案2】:

您需要同时使用MouseDownMouseUp 操作才能解释点击。

您的操作列表应如下所示:

然后将动作解释如下:

int prevMouseX;
int prevMouseY;

private void mouseDown(object sender, MouseEventArgs e)
{
    prevMouseX = e.X;
    prevMouseY = e.Y;
}

private void mouseUp(object sender, MouseEventArgs e)
{
    if (prevMouseX == e.X && prevMouseY == e.Y)
        mouseClick(sender, e);
}

private void mouseClick(object sender, MouseEventArgs e)
{
    //Do Stuff
}

这应该对你有用!

我的代码将点击解释为鼠标在同一位置上下移动。

【讨论】:

  • 我需要鼠标右键单击该按钮,而不是复选框
【解决方案3】:

如果你想对 Button 的右键单击事件做一些事情,试试这个。

=> 创建一个上下文菜单,不要在其中创建任何选项。(从工具箱拖放 ContextMenuStrip)

=> 在“属性”面板中通过 Button 的 ContextMenuStrip 属性将该上下文菜单分配给该按钮。

在上下文菜单的打开事件上编写以下代码

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
    {
        MessageBox.Show("hii");
        e.Cancel=true;
    }

【讨论】:

  • 我需要用鼠标右键单击该按钮
  • 显然,在这个事件中写入的任何代码都将仅通过鼠标右键单击来执行。
  • 我设法用右键单击,它写“右”,但是按钮无法单击它生效(我的意思是当我点击鼠标右键时没有单击按钮)
  • 按钮被点击是怎么回事?按钮永远不会用鼠标右键单击。它只能用鼠标左键单击。您在单击事件中编写的任何代码始终仅通过左键单击执行。如果您想通过右键单击按钮执行某些代码,请按此方式执行,否则无法执行此操作。
  • 我在鼠标上尝试了所有事件,但没有一个起作用。我认为只有鼠标的左键才能执行该按钮,但理论上它必须是可能的。我知道我想做一件不经典但我想做的事
【解决方案4】:

您应该使用MouseDown 事件。它有 MouseEventArgs 参数,其中包含 Button 属性。这样你就可以检查哪个按钮被按下了。

【讨论】:

  • MouseDown 与 Click 不同。当用户按下鼠标按钮时调用它,而不是当它出现在同一位置时 lick MouseClick
  • 我需要用鼠标右键单击该按钮
  • @RatiSharabidze 你应该在MouseDown 事件中使用if (e.Button == MouseButtons.Right)
  • 我做了 mousedown 事件,它有效,它写入“正确”来验证测试,但它不影响按钮
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多