2009-07-15 10 views
0

Wenn ich eine Schaltfläche in einem Formular in C#, Visual Studio 2005, und eine Aktion ausgelöst durch eine Schaltfläche Ereignis wie MouseHover oder MouseDown, dann löst das Ereignis eine einzige Rufen Sie die Funktion auf, die die Aktion definiert, obwohl ich weiter schweben oder die linke Maustaste gedrückt halten kann. In diesem Fall versuche ich ein grafisches Objekt durch Drehen oder Übersetzen zu verschieben. Ich möchte nicht weiter mit der Maus klicken, um einen wiederholten Aufruf der Transformationsfunktion zu erhalten, halte einfach die Maus über den Mauszeiger oder halte die Maustaste gedrückt. Was hält die Handlung aufrecht, bis ich meine eigenen Handlungen eingestellt habe?Erstellen einer kontinuierlichen Aktion während eines Windows Form Mouse-Ereignisses

Antwort

0

Setzen Sie ein Flag auf MouseEnter und führen Sie die Aktion aus, während das Flag wahr bleibt. Setzen Sie das Flag auf MouseLeave auf false.

+0

habe ich versucht, die oben mit dem folgenden Code: private void MouseEnter_ZoomIn (object sender, EventArgs e) { mehr = wahr; // while (mehr == true) if (mehr == true) { c1Chart3D1.ChartArea.View.ViewportScale * = ZoomMultiple; } } // MOUSEENTER_ZOOMIN() // ------------------------------------- private void MouseLeave_Stop (Objektabsender, EventArgs e) { more = false; } Ich hatte gehofft, dass das MouseLeave-Ereignis die While-Schleife beenden würde, aber das tat es nicht. – user32848

0

In Ihrem Fall müssen Sie eine Kombination der Ereignisse MouseDown, MouseMove und MouseUp verwenden.

Hier ein kleines vereinfachtes Beispiel zu starten:

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

Die Lösung ist DoEvents(), die für das Mouseleave-Ereignis ermöglicht die Verwendung zu beachten, und die Klassenvariable „mehr“ geändert werden:

private void MouseEnter_ZoomIn (object sender, EventArgs e)

{

more = true; 

while (more == true) 

{ 
    c1Chart3D1.ChartArea.View.ViewportScale *= ZoomMultiple; 
    Application.DoEvents(); 

} 

} // MOUSEENTER_ZOOMIN()

// -------------------------------------

private void MouseLeave_Stop (object sender, EventArgs e)

{

more = false; 

}

Verwandte Themen