6

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

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");
    }
}

我将非常感谢任何提示或帮助。

PS我想在上述情况下添加它,当我检查 e.button 值时,它显示等于 Right 尽管我按下了鼠标左键和 Ctrl 键。这对我来说是个谜。

亲爱的 StackOverflow 研究员:我发现了问题,因为我在 MAC 上使用虚拟机,所以我不得不在我的虚拟机首选项上禁用一些键映射,现在我的原始代码可以工作了。感谢你的帮助。

4

2 回答 2

10

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出于某种原因,因此隔离左控制键需要更多研究。

于 2013-02-19T00:29:58.340 回答
0

The problem was that there was a key mapping between MAC and my Windows Virtual Machine that needed to be disabled. Thanks for all the help

于 2013-02-19T16:06:10.237 回答