2016-07-06 2 views
0

Wenn MouseDown auf objectA dann mousemove zu objectB, kann das objectB (mouse move handle) nicht aufrufen.C# Winform - Keep MouseDown und verbinden mit anderen Objekt das Objekt MouseMove funktioniert nicht

Wie kann ein anderes Objekt den Mauszeigergriff erkennen, wenn vor dem Eingeben des Objektbereichs ein Mauszeiger gedrückt wird.

public Test() 
    { 
     InitializeComponent(); 
     this.Size = new Size(500, 500); 
     Panel pl = new Panel(); 
     pl.Size = new Size(200, 200); 
     pl.Location = new Point(0, 0); 
     pl.BackColor = Color.Pink; 

     Label lb = new Label(); 
     lb.Text = "Keep MouseDown and move to Panel2 , Panel2 MouseMoveHandler not work"; 
     lb.Dock = DockStyle.Fill; 
     pl.Controls.Add(lb); 

     TextBox tb = new TextBox(); 
     tb.Multiline = true; 
     tb.Size = new Size(400, 100); 
     tb.Location = new Point(0,300); 

     Panel pl2 = new Panel(); 
     pl2.Size = new Size(100, 100); 
     pl2.Location = new Point(0, 0); 
     pl2.BackColor = Color.Red; 
     pl2.Location = new Point(300, 0); 
     pl2.MouseMove += new MouseEventHandler(delegate (object o, MouseEventArgs a) 
     { 
      tb.AppendText(a.X + "," + a.Y); 
     }); 

     this.Controls.Add(pl); 
     this.Controls.Add(pl2); 
     this.Controls.Add(tb); 
    } 
+0

was hast du probiert? – currarpickt

+0

@currarpickt Testcode hinzugefügt – Kit22092

Antwort

1

Was Sie sehen, ist das Standardverhalten. Nur so können Sie MouseMove Ereignisse für ein Objekt erhalten, während Sie die Maus nach unten bewegen, wenn Sie die Maus außerhalb dieses Objekts bewegen.

Wenn Sie wissen möchten, die in der Zeit an jedem Punkt unter dem Cursor steuern (Sie können es in Ihrem MouseMove Fall tun, wenn erforderlich), können Sie diesen Code verwenden:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
private static extern IntPtr WindowFromPoint(Point pnt); 

public static Control GetControlUnderCursor() { 
    var handle = WindowFromPoint(Control.MousePosition); 
    if (handle != IntPtr.Zero) 
    return Control.FromHandle(handle); 
    return null; 
} 

Sie verwenden könnten diesen Code im Formular MouseMove Ereignis, wenn Sie die Capture -Eigenschaft des Formulars auf true setzen (das ist, was passiert auf Ihrem Steuerelement, wenn Sie die Maustaste gedrückt halten) und Sie können Control.MouseButtons überprüfen, welche Maustasten bei Bedarf gedrückt werden ..

+0

Vielen Dank. – Kit22092