我很困惑。我基本上试图告诉用户何时单击列表框中的内容,按住按钮,然后离开列表框。这是我正在做的有点愚蠢的版本:
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则显示哦,是的。如果我打破鼠标按下事件来检查值,它是真的,如果我从那里继续它显示消息。如果我不打破,它什么都不做。还有什么在这里工作吗?
编辑: 简要说明:很难解释我真正想要实现的目标,但想象一下几乎就像从窗口拖出文件一样。我需要能够识别用户何时单击列表框内部,然后拖出列表框,如果这是有意义的
答案 0 :(得分:2)
您无法按断点调试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");
}
答案 1 :(得分:1)
每次点击鼠标,您的MouseDown事件都会触发,您的MouseUp事件将触发,因此操作顺序等同于
itemHeld = true;
itemHeld = false;
if(itemHeld)
MessageBox.Show("yay");
如果按下列表框上的鼠标按钮并将光标移开而不释放按钮,则将焦点切换到另一个窗口(例如Visual Studio)会触发MouseLeave事件触发。这就是您在调试时弹出消息框的原因。
我不确定你要完成什么,所以我不能推荐另一种解决方案。
答案 2 :(得分:1)
这是怎么回事?
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);
}
它使用的事实是在释放鼠标按钮之前没有留下Control ...但请注意拖出部分会多次出现,所以你可能想要第一次设置一个标志......并在鼠标上清除该标志或离开