Punkt per Maus holen

08/06/2008 - 09:45 von Rene Grobel | Report spam
Hallo NG,
ich muß vom Nutzer eine Punkteigabe per Maus holen (eigentlich 2 für ein Rechteck). Dazu habe ich unten stehenden Code ausgedacht. Das Problem ist, daß der Panel das MouseDown erst bringt, wenn der Nutzer 2x drauf klickt. Beim ersten Klick wird der Cross-Cursor erst aktiv.
Sicher wird das mit dem DoEvents zusammenhàngen (aber warum?).
Wie holt man einen Punkt und wartet im Programm, bis die eingegeben (oder abgebrochen) wurde?

Vielen Dank
grüße von Rene

Public Class Form1
Dim Active As Boolean = False
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Get_Point As New cGet_Point
Dim P As Point = Get_Point.Hole_Point(Me.Panel1)
MsgBox(P.ToString)
End Sub
End Class

Public Class cGet_Point
Private WithEvents mControl As Control
Private mIsActiv As Boolean = False, mP As Point

Public Function Hole_Point(ByRef Control As Control) As Point
mControl = Control : mIsActiv = True
Control.Cursor = Cursors.Cross
While mIsActiv
Application.DoEvents()
End While
Control.Cursor = Cursors.Default
Return mP
End Function

Private Sub mControl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles mControl.MouseDown
mP = e.Location : mIsActiv = False
End Sub
End Class
 

Lesen sie die antworten

#1 Peter Götz
08/06/2008 - 14:53 | Warnen spam
Hallo Rene,

ich muß vom Nutzer eine Punkteigabe per Maus holen
(eigentlich 2 für ein Rechteck).



Zu welchem Zeitpunkt resp. aufgrund welchen Ereignisses
willst Du diese Punkte haben?

Dazu habe ich unten stehenden Code ausgedacht. Das
Problem ist, daß der Panel das MouseDown erst bringt,
wenn der Nutzer 2x drauf klickt.



Wenn die Form, auf welcher Dein Panel liegt den Focus
hat, dann wird Panel_MouseDown, wenn sich der Mauszeiger
über dem Panel befindet, sofort mit dem ersten Drücken der
Maustaste ausgelöst.

Beim ersten Klick wird der Cross-Cursor erst aktiv.



Bei welchem Klick auf was?
Du rufst in Button1_Click() die Funktion Get_Point.Hole_Point()
auf, in welcher Control.Cursor = Cursorts.Cross gesetzt wird.
Irgendein Bezug zu Panel_MouseDown ist hierbei nicht zu
erkennen.

Sicher wird das mit dem DoEvents zusammenhàngen (aber
warum?).
Wie holt man einen Punkt und wartet im Programm, bis die
eingegeben (oder abgebrochen) wurde?



In Panel_MouseDown bekommst Du mit jedem Drücken
der Maustaste die akt. Mausposition, wenn sich der
Mauszeiger über dem Panel befindet.


Vielen Dank
grüße von Rene

Public Class Form1
Dim Active As Boolean = False
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
Dim Get_Point As New cGet_Point
Dim P As Point = Get_Point.Hole_Point(Me.Panel1)
MsgBox(P.ToString)
End Sub
End Class

Public Class cGet_Point
Private WithEvents mControl As Control
Private mIsActiv As Boolean = False, mP As Point

Public Function Hole_Point(ByRef Control As Control)
As Point
mControl = Control : mIsActiv = True
Control.Cursor = Cursors.Cross
While mIsActiv
Application.DoEvents()
End While
Control.Cursor = Cursors.Default
Return mP
End Function

Private Sub mControl_MouseDown(ByVal sender As Object,
ByVal e As System.Windows.Forms.MouseEventArgs)
Handles mControl.MouseDown
mP = e.Location : mIsActiv = False
End Sub
End Class



Du solltest mal etwas verstàndlicher beschreiben, was
Dur wirklich erreichen möchtest. Aus Deinem Code
ist nicht wirklich erkennbar, was das werden soll.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen