列表框事件触发异常

| 我糊涂了。我基本上是想告诉用户何时单击列表框中的某些内容,按住按钮并离开列表框。这是我正在做的事情的一个愚蠢的版本:
private bool itemHeld;
    private void listOriginal_MouseDown(object sender, MouseEventArgs e)
    {
        itemHeld = true;
    }

    private void listOriginal_MouseUp(object sender, MouseEventArgs e)
    {
        itemHeld = false;
    }

    private void listOriginal_MouseLeave(object sender, EventArgs e)
    {
        if (itemHeld)
            MessageBox.Show(\"OHH YEAH\");
    }
在我看来,当您按下鼠标按钮时,它应该将itemHeld设置为true,仅在将其抬起时才将其设置为false,如果值为true则显示ohh。如果我中断了鼠标按下事件以检查该值,则为true,并且如果我从那里继续,则显示该消息。如果我不休息,它什么也不做。这里还有其他工作吗? 编辑: 简短说明:很难解释我实际上要完成的工作,但是想像一下几乎就像将文件从窗口中拖出一样。我只需要能够识别用户何时在列表框内单击,然后将其拖出列表框(如果有意义)     
已邀请:
那这个呢?
private void listBox1_MouseMove(object sender, MouseEventArgs e)
{

    if (e.X > listBox1.Width - 1 || e.Y > listBox1.Height - 1 || e.X < 0 || e.Y < 0) 
    {
        Console.WriteLine(\"drag out\");
    }
    else
        Console.WriteLine(\"mouse move {0}/{1}\", e.X, e.Y);
}
它使用这样的事实,即在释放鼠标按钮之前不保留控件...但是要注意,拖出部分将发生多次,因此您可能希望第一次设置标志...并具有鼠标移开或离开时清除标志     
您无法按断点调试Windows事件,因为当Visual Studio处于活动状态进行调试时,将为悬停的控件触发鼠标离开事件。 您可以使用Debug.WriteLine将有关调试的信息写入跟踪侦听器。
private void button1_MouseLeave(object sender, EventArgs e)
{
    Debug.WriteLine(\"Mouse leave\");
}

private void button1_MouseEnter(object sender, EventArgs e)
{
    Debug.WriteLine(\"Mouse enter\");
}

private void button1_MouseHover(object sender, EventArgs e)
{
    Debug.WriteLine(\"Mouse hover\");
}
    
对于每次鼠标单击,将触发MouseDown事件,并且将触发MouseUp事件,因此操作序列等效于
itemHeld = true;
itemHeld = false;
if(itemHeld)
    MessageBox.Show(\"yay\");
如果您在列表框上按下鼠标按钮并在不释放按钮的情况下将光标移出,则将焦点切换到另一个窗口(例如Visual Studio)会触发MouseLeave事件触发。这就是为什么您在调试时看到消息框弹出的原因。 我不确定您要完成什么,因此我不推荐其他解决方案。     

要回复问题请先登录注册