Я новичок в 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 У меня есть сделать {} в то время как(), который проверяет состояние 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 по-прежнему верно, даже если я выпускаю юаней. Кажется, делает это, блокируя событие MouseUp. Мой вопрос: могу ли я создать другой поток, который будет захватывать события MouseUp и MouseDown и изменять значение RMBIsPressed? Если это возможно, скажите, пожалуйста.
Почему у вас есть цикл в обработчике MouseMove? Этот обработчик вызывается каждый раз, когда мышь перемещается. Этот код, скорее всего, полностью заблокирует ваш пользовательский интерфейс. – vesan