当我第一次按下控制键(左键)然后单击鼠标左键时,为什么执行以下代码。我正在修改现有代码,下面的代码已经存在。我想以前没有人尝试过它,按下控制键,它只用于点击鼠标左键,它一直适用于那种情况。但是我想要在按下控制键的同时按下鼠标左键时执行不同的代码。
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");
}
}
我非常感谢任何提示或帮助。
P.S。我想补充一点,在上面的例子中,当我检查e.button值时,虽然我按了鼠标左键和Ctrl键,但它显示等于Right。这对我来说是一个谜。
亲爱的StackOverflow研究员:我发现了问题,因为我在MAC上使用VM我必须在我的虚拟机首选项上禁用一些键映射,现在我的原始代码可以运行。谢谢你的帮助。
答案 0 :(得分: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.");
}
}
只要使用左键发生单击,就会弹出一个消息框,无论键组合是什么。
但是,这个:
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.ControlKey
或Keys.LControlKey
一起使用,因此隔离左控制键需要更多的研究
答案 1 :(得分:0)
问题是MAC和我的Windows虚拟机之间存在需要禁用的密钥映射。感谢所有帮助