0

这是我的 ListBox MouseMove 事件的代码:

private void lbxItems_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left) //this one is good
    {
        lbxItems.DoDragDrop("Copy Text 1", DragDropEffects.Copy);
    }
    else if (Control.ModifierKeys == Keys.Alt && e.Button == MouseButtons.Left) //this desn't work
    {
        lbxItems.DoDragDrop("Copy Text 2", DragDropEffects.Copy);
    }
}

e.Button == MouseButtons.Left单独的条件可以正常工作,但不适用于Control.ModifierKeys == Keys.Alt. 我想知道 ListBox 控件是否可以识别 ALT 键 + 鼠标左键组合。有人可以建议吗?

4

2 回答 2

1

嗯,好吧,我想我在这里找到了一个修复方法,这很容易。

为了使它起作用,我只需Control.ModifierKeys == Keys.Alt要先评估条件并放入e.Button == MouseButtons.Left语句else if。因此,总是首先检查 ALT + 鼠标左键。

private void lbxItems_MouseMove(object sender, MouseEventArgs e)
{
    if (Control.ModifierKeys == Keys.Alt && e.Button == MouseButtons.Left) 
    {
        lbxItems.DoDragDrop("Copy Text 1", DragDropEffects.Copy);
    }
    else if (e.Button == MouseButtons.Left) 
    {
        lbxItems.DoDragDrop("Copy Text 2", DragDropEffects.Copy);
    }
}

另外,我必须指出它不是Control.ModifierKeys == Keys.Alt没有工作,只是原始代码没有机会运行else if语句。

于 2012-06-07T02:42:10.277 回答
0

你不能像你那样做。您需要先使用相关的按键处理程序捕获 Alt 键被按下并将其存储在某个共享变量中,然后当鼠标移动时,您可以通过访问共享变量来检查是否按下了 alt 键。

于 2012-06-07T02:26:38.787 回答