2016-07-06 1 views
0

Когда MouseDown на объекте A тогда mousemove на объект B, объектB (mousemove handle) не может звонить.C# Winform - Keep MouseDown и присоединиться к другому объекту объект MouseMove не работает

Как разрешить другому объекту обнаружение mousemovehandle, когда mousedown перед тем, как войти в область объекта.

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

что вы попробовали? – currarpickt

+0

@currarpickt добавлен код тестирования – Kit22092

ответ

1

То, что вы видите, является стандартным поведением. Это единственный способ получить события MouseMove для объекта, когда мы будем нажимать мышь, если вы перемещаете мышь вне этого объекта.

Если вы хотите узнать, какой контроль находится под курсором в любой момент времени (вы можете сделать это в вашем MouseMove случае, если это необходимо), вы можете использовать этот код:

[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; 
} 

Вы можете использовать этот код в событии MouseMove формы, если вы установили свойство формы Capture на true (это то, что происходит на вашем контроле, когда вы держите кнопку мыши вниз) также, и вы можете проверить Control.MouseButtons, чтобы узнать, какие кнопки мыши будут нажаты при необходимости ..

+0

Большое спасибо. – Kit22092

Смежные вопросы