2009-07-15 5 views
0

Когда я помещал кнопку в форме на C#, Visual Studio 2005 и выполнял действие, вызванное событием кнопки, таким как MouseHover или MouseDown, тогда событие запускает один вызов функции, которая определяет действие, несмотря на то, что я могу продолжать наводить или удерживать левую кнопку нажатой. В этом случае я пытаюсь переместить графический объект, вращая или переводя его. Я не хочу продолжать щелчок мышью, чтобы получить повторный вызов функции преобразования, просто держите мышь зависающей или удерживайте кнопку нажатой. Что поддерживает действие, пока я не прекращу свое действие?Создание непрерывного действия во время события Windows Form Mouse

ответ

0

Установите флаг на MouseEnter и продолжайте выполнять действие, пока флаг остается в силе. Установите флаг false в MouseLeave.

+0

Я попытался выше со следующим кодом: частная пустота 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

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; 

}