正在MouseDown事件处理程序中检测Ctrl+Left(鼠标按钮)

本文关键字:鼠标 按钮 Ctrl+Left 检测 MouseDown 事件处理 程序 正在 | 更新日期: 2023-09-27 17:59:53

当我第一次按下控制键(左边的),然后单击鼠标左键时,为什么会执行以下代码。我正在修改现有的代码,下面的代码已经存在。我想以前没有人尝试过,按下控制键,它只在鼠标左键单击时使用,而且它一直适用于这种情况。但我希望在按下控制键的同时按下鼠标左键时执行不同的代码。

private void treeList1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    TreeList tree = sender as TreeList;
    if (e.Button == MouseButtons.Right && ModifierKeys == Keys.None && tree.State == TreeListState.Regular)
    {
       //the code that is here gets executed 
       MessageBox.Show("I am here");
    }
}

如果有任何提示或帮助,我将不胜感激。

附言:我想在上面的例子中添加一点,当我检查e.button值时,它显示它等于Right,尽管我按下了鼠标左键和Ctrl键。这对我来说是个谜。

亲爱的StackOverflow同事:我发现了这个问题,因为我在MAC上使用虚拟机,所以我不得不在我的虚拟机偏好上禁用一些密钥映射,现在我的原始代码可以工作了。谢谢你的帮助。

正在MouseDown事件处理程序中检测Ctrl+Left(鼠标按钮)

Keys.None的值为0,单独使用时很难检测到"未按下任何键"。此:

    void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && (ModifierKeys & Keys.None) == Keys.None)
        {
            MessageBox.Show("No key was held down.");
        }
    }

只要点击左键,无论组合键是什么,都会弹出一个消息框。

然而,这:

    void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && (ModifierKeys & Keys.Control) == Keys.Control)
        {
            MessageBox.Show("Control key was held down.");
        }
    }

仅当按下Control键(并单击鼠标左键)时才会弹出消息框。

尝试反转您的条件,并在单击时检测何时按下Control键(而不是在未按下任何键时检测)。话虽如此,由于某种原因,我很难获得相同的代码来使用Keys.ControlKeyKeys.LControlKey,因此隔离左控制键需要更多的研究。

问题是MAC和我的Windows虚拟机之间有一个密钥映射需要禁用。感谢所有的帮助