Когда я помещал кнопку в форме на C#, Visual Studio 2005 и выполнял действие, вызванное событием кнопки, таким как MouseHover или MouseDown, тогда событие запускает один вызов функции, которая определяет действие, несмотря на то, что я могу продолжать наводить или удерживать левую кнопку нажатой. В этом случае я пытаюсь переместить графический объект, вращая или переводя его. Я не хочу продолжать щелчок мышью, чтобы получить повторный вызов функции преобразования, просто держите мышь зависающей или удерживайте кнопку нажатой. Что поддерживает действие, пока я не прекращу свое действие?Создание непрерывного действия во время события Windows Form Mouse
0
A
ответ
0
Установите флаг на MouseEnter и продолжайте выполнять действие, пока флаг остается в силе. Установите флаг false в MouseLeave.
0
В вашем случае вам нужно использовать комбинацию событий MouseDown, MouseMove и MouseUp.
Вот небольшой упрощенный пример, чтобы начать:
private void OnMouseDown(object sender, EventArgs e)
{
//hit test to check if the mouse pointer is on a graphical object
_myHitObject = the_selected_object
}
private void OnMouseMove(object sender, EventArgs e)
{
if(_myHitObject != null)
//do your action relative to the mouse movements.
}
private void OnMouseUp(object sender, EventArgs e)
{
_myHitObject = null;
}
0
Решение состоит в том, чтобы использовать DoEvents(), который позволяет событие MouseLeave следует отметить и класс переменной «больше» должна быть изменена:
частная пустота MouseEnter_ZoomIn (объект отправителя, EventArgs е)
{
more = true;
while (more == true)
{
c1Chart3D1.ChartArea.View.ViewportScale *= ZoomMultiple;
Application.DoEvents();
}
} // MOUSEENTER_ZOOMIN()
// -------------------------------------
частной юридической силы (отправитель объекта, EventArgs е) MouseLeave_Stop
{
more = false;
}
Я попытался выше со следующим кодом: частная пустота MouseEnter_ZoomIn (объект отправителя, EventArgs е) { more = true; // while (more == true) if (more == true) { c1Chart3D1.ChartArea.View.ViewportScale * = ZoomMultiple; } } // MOUSEENTER_ZOOMIN() // ------------------------------------- private void MouseLeave_Stop (отправитель объекта, EventArgs e) { more = false; } Я надеялся, что событие MouseLeave убьет цикл while, но это не так. – user32848