【发布时间】:2015-10-01 00:37:25
【问题描述】:
我是 WinForms 的新手,我对 MouseDown 和 MouseUp 事件有疑问(抱歉,如果我复制了它,但我无法用谷歌搜索它)。 所以,我有一个 PictureBox 并在上面绘制立方体。但我需要使用鼠标旋转它。我使用自动生成的事件 MouseDown、MouseUp、MouseMove。首先他们只是改变 bool 变量(这是愚蠢的检查方式,但我找不到更好的)。
private void PictureBox_MouseDown(object sender, MouseEventArgs e)
{
RMBIsPressed = true;
}
private void PictureBox_MouseUp(object sender, MouseEventArgs e)
{
RMBIsPressed = false;
}
在 MouseMove 中我做了 {} while(),它检查 RMBIsPressed 的状态并在需要时重新绘制立方体。
private void PictureBox_MouseMove(object sender, MouseEventArgs e)
{
Point mousePoint = MousePosition;
Point mousePointNext;
do
{
mousePointNext = MousePosition;
if (mousePointNext != mousePoint)
{
if (mousePoint.X < mousePointNext.X)
{
teta += deltaTeta;
}
else
{
teta -= deltaTeta;
}
if (mousePoint.Y < mousePointNext.Y)
{
phi += deltaPhi;
}
else
{
phi -= deltaPhi;
}
PictureBox.Refresh();
ViewTransformation();
DrawCube();
}
mousePoint = MousePosition;
} while (RMBIsPressed);
}
当 MouseUp 事件第一次发生时,一切都很好,但在下一次迭代中 RMBIsPressed 仍然是 true,即使我释放了 RMB。 while 似乎会阻止 MouseUp 事件。我的问题是:我可以创建另一个线程来捕获 MouseUp 和 MouseDown 事件并更改 RMBIsPressed 的值吗?如果可以的话,请告诉我怎么做。
【问题讨论】:
-
为什么你的 MouseMove 处理程序中有一个循环?每次移动鼠标时都会调用该处理程序。此代码很可能会完全锁定您的 UI。
标签: c# .net multithreading winforms