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

use*_*925 6 c# devexpress winforms

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

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

PS我想补充一点,在上面的情况下,当我检查e.button值时,虽然我按了鼠标左键和Ctrl键,但它显示等于Right.这对我来说是一个谜.

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

Mat*_*don 9

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.");
        }
    }
Run Code Online (Sandbox Code Playgroud)

只要单击左键发生,就会弹出一个消息框,无论键组合是什么.

但是,这个:

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

只有Control按住键(并单击鼠标左键)时,才会弹出一个消息框.

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


use*_*925 -1

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