从ListBox拖动项目时ALT键和鼠标左键组合?

时间:2012-06-07 02:00:38

标签: c# .net visual-studio-2010

这是我的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键+鼠标左键组合。有人可以建议吗?

2 个答案:

答案 0 :(得分: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语句。

答案 1 :(得分:0)

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