event MouseMove



  • Hallo

    Ich habe ein Prolem mit einem kleinen Prgramm, das nicht läuft. Es ssoll die Mausposition anzeigen und und wenn ich innerhalb eines Recht ecks die rechte Maustaste drucke, soll der couser sich ändern. aber es tut sich nichts. Ich arbeite mit VS 2012.

    Den code habe ich etwas zusammengefasst:
    namespace Maus
    {
    public partial class Form1 : Form
    {
    public Form1()
    { InitializeComponent(); }
    private Rectangle rec = new Rectangle(50, 50, 100, 150);
    private void Form1_Paint(object sender, PaintEventArgs e)
    { e.Graphics.DrawRectangle(new Pen(Color.Black), rec); }
    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
    label1.Text = "X = " + e.X.ToString();
    label2.Text = "Y = " + e.Y.ToString();
    if (rec.Contains(e.X, e.Y) && (e.Button == MouseButtons.Right))
    { this.Cursor = Cursors.WaitCursor; }
    else
    { this.Cursor = Cursors.Default; }
    }
    }
    }
    Es kommt keie nFehlermeldung. Das Fenster öffnet sich und dann passiert
    nichts mehr.Woran kann das liegen?



  • wie es passiert nix mehr??

    wieso malst du das rechteck via paint mehtode

    im kosntruktor kannst du das rechteck direkt den Form gui container hinzufügen..



  • Dir ist schon klar, dass du die MouseButtons.Right - Abfrage innerhalb vom MouseMove - Event verwendest (?), d.h. du musst die Mouse bewegen, wenn du rechtsklicks.

    Ps: Benutz'doch bitte die Code - Tags, so gibt's Augenkrebs 😮



  • Danke für die Antworten. Den Code habe ich aus einem Buch genau so übernommen.
    Wenn ich die Datei dazu schon fertige Projekt dazu ausführe läuft es.
    Ich selber hätte das nicht das paint event gemacht, habs aber erstmal übernommen.
    Wenn ich das ausführe öffnet sich Fenster mit 2 labeln, die eigentlich die beiden Koordinaten einzeigen sollten, wassie aber nicht. Das Rechteck erscheint auch nicht und weder bei Mausbewebungen noch beim rechte Taste klicken passiert etwas. Ich will erstmal wissen warum, das nicht läuft obwohl es laufen sollte.
    Das ist der Code aus dem Buch. Mich wundert, dabei, dass nach if() keine {} Klammern kommen.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace MouseCoordinates
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private Rectangle rec = new Rectangle(50, 50, 100, 150);
    
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawRectangle(new Pen(Color.Black), rec);
            }
    
            private void Form1_MouseMove(object sender, MouseEventArgs e)
            {
                label1.Text = "X = " + e.X.ToString();
                label2.Text = "Y = " + e.Y.ToString();
                if (rec.Contains(e.X, e.Y) && (e.Button == MouseButtons.Right))
                    this.Cursor = Cursors.WaitCursor;	    // Mauszeiger ändert sich (Sanduhr)
                else
                    this.Cursor = Cursors.Default;        // Mauszeiger wird zurückgesetzt (Pfeil)
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
        }
    }
    


  • Es liegt daran dass du die Events nicht verdrahtet hast.

    Im Buch wird das vermutlich im Designer gemacht werden, und das hast du nicht gemacht.

    Such einfach im Original-Projekt nach den beiden Funktionsnamen (Form1_Paint, Form1_MouseMove), dann siehst du den Designer-Generierten Code der die Events verdrahtet.



  • Mit einem Guttenberg vom Code kommst du da nicht weiter, du müsstest die Events noch Abonnieren.
    Z.b. im Form1 - Konstruktor:

    this.Paint += new PaintEventHandler(Form1_Paint);
    this.MouseMove += new MouseEventHandler(Form1_MouseMove);
    

    oder unter den Eigenschaften deiner Form, auf Ereignisse (Blitz-Button) und dort den jeweiligen Event zuordnen.

    Referenz:
    http://msdn.microsoft.com/de-ch/library/ms366768.aspx

    Ps: Die {} - Klammern kannst du weglassen, sofern du nur ein Anweisung nach der jeweiligen Bedingung ausführst.

    Referenz:
    http://msdn.microsoft.com/de-de/library/5011f09h.aspx



  • Danke für die Hilfe!
    Über form Eigenschaften habe ich die Ereignisse verbunden.


Log in to reply