Entwickler-Ecke
WinForms - Buchbeispiel, Mouse Koordinaten
Fate - Sa 06.12.08 15:01
Titel: Buchbeispiel, Mouse Koordinaten
Hi, ich arbeite mit hilfe eines Buches und habe eine Anwendung nachempfunden
bisher klappte alles nur das einlesen der Mousekoordinaten und in der Titelleiste der Andwendung auszugeben klappte nicht. Auch in einem textfeld erscheinte nichts. Kann mir jemand helfen wo ich den fehler mache
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| namespace WindowsFormsApplication1 { public partial class myform : Form { public myform() { InitializeComponent(); }
private void textBox1_TextChanged(object sender, EventArgs e) {
}
private void btnKopieren_Click(object sender, EventArgs e) { txtKopie.Text = txtOriginal.Text; }
private void btnBeenden_Click(object sender, EventArgs e) { Application.Exit(); } private void myform_MouseMove(object sender, MouseEventArgs e) { string koordinate = "X=" + e.X + " / Y=" + e.Y; if (sender == this) { this.Text = "Form / " + koordinate; txtKopie.Text = koordinate; } else if (sender == btnKopieren) this.Text = "Koopieren / " + koordinate; else this.Text = "Beenden / " + koordinate; }
private void Form1_Load(object sender, EventArgs e) {
} } |
Liebe Grüße
Fate
Moderiert von
Christian S.: C#-Tags hinzugefügt
Christian S. - Sa 06.12.08 15:14
Hallo und :welcome:!
Ist denn die myform_MouseMove Methode auch dem entsprechenden Ereignis der Form zugewiesen?
Grüße
Christian
jaenicke - Sa 06.12.08 15:20
Hast du denn die Ereignisse richtig zugewiesen? Oder hast du den Quelltext einfach nur abgetippt, inklusive der Zeile
C#-Quelltext
1:
| private void btnKopieren_Click(object sender, EventArgs e) |
zum Beispiel?
Deinem Quelltext nach zu urteilen benutzt du MS Visual Studio, also Visual C#. Entweder klickst du doppelt auf den Button um das Ereignis zuzuweisen und den Quelltext dafür erstellen zu lassen oder du schaust rechts unten unter Eigenschaften. Dort siehst du einen Button mit einem Blitz als Symbol und dem Hinweis Ereignisse. Wenn du darauf klickst und der Button btnKopieren ausgewählt ist im Formular, dann sollte dort als erste Zeile stehen Click und rechts daneben btnKopieren_Click.
Ist das so?
Fate - Sa 06.12.08 15:24
Hallo vielen Dank erstmal.
Nun eigentlich möchte ich nur, sobald meine Mouse über die Form geführt wird, dieses im Titel meiner Windowsanwendung gezeigt bekommen...
Ich habe in dem Buch bisher alles der reihe nach durchgearbeitet. Es sind relativ simple anwendungen auch das verknüpfen der ereignisse mit den Buttons. Nur jetzt bezieht sich dieses Event ja nciht auf ein Click ereigniss wie beim button sondern auf die Form ansich...
jaenicke - Sa 06.12.08 15:34
Fate hat folgendes geschrieben : |
| Nur jetzt bezieht sich dieses Event ja nciht auf ein Click ereigniss wie beim button sondern auf die Form ansich... |
Klick auf eine freie Stelle des Formulars, so das keine Komponente mehr markiert ist, oder wähle rechts direkt unterhalb von Eigenschaften "myform System.Windows.Forms.Form" aus.
Danach klickst du dann auf den Button mit dem Blitz und stellst unter MouseMove deine Methode myform_MouseMove ein. Diese sollte dort zur Auswahl stehen, du kannst sie auch manuell eintragen.
Mit einem Doppelklick rechts neben MouseMove kannst du den Eventquelltext erstellen lassen und der Quelltext öffnet sich mit dem Textcursor an der richtigen Stelle. Da du myform_MouseMove aber schon deklariert hast, musst du das nur noch eintragen, sonst wird bei einem Doppelklick eine neue Methode myform_MouseMove_1 erstellt.
Fate - Sa 06.12.08 15:35
ah super vielen dank das wars mit der zuweisung bei dem Blitz. danke
JüTho - Sa 06.12.08 15:59
Und dieser Fehler ist noch niemandem aufgefallen:
Das geht natürlich überhaupt nicht, weil e.X und e.Y jeweils
int sind:
C#-Quelltext
1:
| string koordinate = "X=" + e.X + " / Y=" + e.Y; |
So kann es gehen:
C#-Quelltext
1:
| string koordinate = "X=" + e.X.ToString() + " / Y=" + e.Y.ToString(); |
Aber dafür gibt es auch eine vorgefertigte Methode:
C#-Quelltext
1:
| string koordinate = String.Format("X={0} / Y={1}", e.X, e.Y); |
Jürgen
Kha - Sa 06.12.08 16:14
JüTho hat folgendes geschrieben : |
| Das geht natürlich überhaupt nicht, weil e.X und e.Y jeweils int sind: |
Ohne es gutzuheißen: Doch, das geht.
JüTho - Sa 06.12.08 16:25
Kha hat folgendes geschrieben : |
| Doch, das geht. |
Nanu, unter welchen Umständen wird denn automatisch konvertiert? Sorgt der Plus-Operatur des Strings dafür?
Ich habe es noch nie so gemacht, weil es für mich selbstverständlich war. Dann formuliere ich es mal so:
Und dieser Fehler ist noch niemandem aufgefallen:
Das geht natürlich überhaupt nicht, weil e.X und e.Y jeweils int sind:
Im Interesse der Typsicherheit sollte es nicht so gemacht werden, weil e.X und e.Y jeweils int sind:
Jürgen
Kha - Sa 06.12.08 16:55
JüTho hat folgendes geschrieben : |
Kha hat folgendes geschrieben : | | Doch, das geht. | Sorgt der Plus-Operatur des Strings dafür? |
Würde ich auch sagen. In der Spezifikation habe ich zwar nichts gefunden, aber die Signaturen sähen wohl so aus:
C#-Quelltext
1: 2:
| string operator +(string, object) string operator +(object, string) |
Ralf Jansen - Sa 06.12.08 17:18
| Zitat: |
| Nanu, unter welchen Umständen wird denn automatisch konvertiert? Sorgt der Plus-Operatur des Strings dafür? |
Scheint eher Compiler Magie zu sein.
Wenn man sich den generierten IL anguckt scheint eine string Verkettung mit + in einen Aufruf von string.Concat umgewandelt zu werden. Also aus
C#-Quelltext
1:
| string koordinate = "X=" + e.X + " / Y=" + e.Y; |
wird
C#-Quelltext
1:
| string koordinate = string.Concat(new object[] {"X=",e.X," / Y=",e.Y}); |
Kha - Sa 06.12.08 17:25
Ralf Jansen hat folgendes geschrieben : |
| Wenn man sich den generierten IL anguckt scheint eine string Verkettung mit + in einen Aufruf von string.Concat umgewandelt zu werden. |
Das ist ein Implementierungsdetail und hat auf die Operator-Auflösung keine Auswirkung. Aber du hast natürlich Recht, dass es keine
System.String.op_Addition-Methode gibt, sondern sich der Compiler wie bei den primitiven Typen die Operatoren einfach "dazudenkt". Die mutmaßlichen Signaturen habe ich oben gepostet.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!