Hallo!
Ich habe eine - hoffentlich ganz einfach zu beantwortende - Frage.
Ich will in einem Doppelklickereignis auf einer PictureBox die Mauskoordinaten des Klicks abfragen (nicht die globalen, sondern die relativen zum Klick). Wie bekomme ich die?
Viele Grüße & Danke
Flite
Hey,
Control.MousePosition.X
Control.MousePosition.Y
greets george
Hallo george,
rufe ich damit die Mauskoordinaten auf dem Picture ab? Woher weiß C#, dass mit Control das Picture gemeint ist?
Ich bin noch Anfänger in C#. Wäre nett, wenn du mir das kurz erklären könntest.
Viele Grüße
Flite
Wenn ich mich recht entsinne sind die Korrdinaten immer relativ bezogen auf das Control. Wenn du also einen MouseDown-Event-Handler in der PictureBox registrierst, bekommst du 0/0 für die linke obere Ecke der Picturebox.
Hey,
svenson hat Recht. Die Koordinaten sind relativ, also nicht die Pixelposition innerhalb der PictureBox. Die bekommst du aber relativ einfach über Umrechnung oder
private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
e.X;
e.Y;
}
Hallo!
Das hoffte ich auch. Mit Control.Mousposition.X bekomme ich aber wohl die absolute Mausposition auf dem Bildschirm. In der linken oberen Ecke kriege ich Werte um 100px ... Außerdem ändert sich der Wert auch, wenn ich die Maus im Einzelschrittmodus bewege.
In Visual Basic gab es im Klickereignis die Parameter X und Y. Genau das meine ich eigentlich. Diese ändern sich auch nicht mehr, sondern geben die Position an, wo der Klick erfolgt ist.
Oder muss ich evtl. die osition der PictureBox und des Formulars mit einbeziehen?
Viele Grüße
Flite
@george: Mein Event hat aber folgende Parameter:
private void pictureBox1_DoubleClick(object sender, System.EventArgs e)
Einfach ändern kann ich den zweiten Parameter ja nicht, dann bringt der Compiler ne Fehlermeldung (eigentlich auch klar). Wie erreicht man, dass hier die Mausposition übergeben wird?
Viele Grüße
Flite
Hey,
du wirst nicht an die Umrechnung vorbeikommen. Schaue dir mal in der MSDN RectangleToScreen() an.
Für eine Übergabe der Mausposition müßtest du das Event OnDoubleClick(...) überschreiben und einen eigenen Eventdelegaten(ich glaube so heißt das) mit deinen Parametern erstellen.
Ich denke aber, dass die Umrechnung der Werte viel einfacher und schneller zu handlen ist.
greets george
Im Click-Ereignis werden keine Maus-Koordinaten übertragen. Dazu musst du das MouseDown oder MouseUp Ereignis verwenden. Dort kommen anstelle der "normalen" EventArgs "echte" MouseEventArgs daher. Daher hast du dann auch X/Y (realtiv wie gewünscht), sowie Informationen welcher Mausknopf gedrückt wurde und ob dabei auch z.B. die Shift-Taste gehalten wurde.
Hallo zusammen
ich habe jetzt die Mausposition genommen und hievorn Left der Form, Rand der Form und Left der Picturebox abgezogen.
Jetzt geht es soweit.
Dank euch!
Viele Grüße
Flite
Offenbar hast du mein Posting nicht richtig gelesen:
Du kannst das genauso machen, wie du es von VB gewohnt bist: Verwende den MouseDown-Event und hole dir aus dem MouseEventArgs-Parameter die Position X und Y. Diese Position sind bereits bezogen auf das Control und NICHT auf das Fenster.
Eine Umrechnung ist also nicht nötig. Du musst nichts abziehen oder so.
Wichtig ist nur, dass du den MouseDown-Handler nicht auf dem Fenster sondern auf der PictureBox registrierst. Positionen sind immer bezogen auf den Event-Anbieter. Hängst du dich beim Fenster ein, bekommst du Fenster-Koordinaten, machst du das bei der PictureBox bekommst du PictureBox-Koordinaten.
Hey
@svenson:
ich denke, er will aber explizit das DoubleClick-Event nutzen.
Mein Event hat aber folgende Parameter:
private void pictureBox1_DoubleClick(object sender, System.EventArgs e)
Hatte ja auch schon das MouseDown-Event vorgeschlagen.
greets george
Ah, sorry, da hab _ich _wohl nicht aufmerksam genug gelesen... 🙂
Hat MS in .NET 2.0 eigentlich allen Mouse-Events jetzt die MouseEventArgs spendiert? Ich finds extrem lästig, dass das in den Click-Events fehlt.
Hallo,
Original von Flite
Das hoffte ich auch. Mit Control.Mousposition.X bekomme ich aber wohl die absolute Mausposition auf dem Bildschirm. In der linken oberen Ecke kriege ich Werte um 100px ...
Stimmt. Mit Control.MousePosition bekommst du die Position relativ zum Bildschirm. Jedes Control, also auch eine PictureBox, hat eine Methode PointToClient(Point). Also bekommst du mit
yourePictureBox.PointToClient(Control.MousePosition);
die Position der Maus auf deiner PictureBox.
Gruss
Friedel
Ohne Ziel ist auch der Weg egal.
Original von svenson
Hat MS in .NET 2.0 eigentlich allen Mouse-Events jetzt die MouseEventArgs spendiert? Ich finds extrem lästig, dass das in den Click-Events fehlt.
Jein. Das Click- und das DoubleClick-Ereignis haben immer noch nur ein EventArgs. Dafür wurden aber die MouseClick- und MouseDoubleClick-Ereignisse mit MouseEventArgs eingeführt. Ich bin zufrieden damit 😉
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Hallo Flite,
ich habe jetzt die Mausposition genommen und hievorn Left der Form, Rand der Form und Left der Picturebox abgezogen.
das ist keine gute Lösung. Alternativen wurde ja schon beschrieben. Wenn du wirklich umrechnen willst, dann nimm lieber Control.PointToClient als das von Hand zu machen.
herbivore