2013-09-30 3 views
1

안녕하세요 저는이 문제를 해결하는 데 도움이 될 수있는 코드를 발견했습니다. 드래그 앤 드롭하고 마우스로 폼의 레이블을 이동하려고합니다.마우스로 폼에서 컨트롤 잡기, 이동 및 놓기

private Point MouseDownLocation; 

    private void MyControl_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
      MouseDownLocation = e.Location; 
     } 
    } 

    private void MyControl_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
      this.Left = e.X + this.Left - MouseDownLocation.X; 
      this.Top = e.Y + this.Top - MouseDownLocation.Y; 
     } 
    } 

하지만 레이블을 이벤트로 MouseMove 이벤트 및 mousedown을 assing 내가 라벨을 잡고는 전체 양식으로 이동 마우스로 이동하려고 할 때.

어디에서 코드를 개선해야합니까?

감사합니다. 대신 (양식 인) this.Left를 사용

답변

2

, 당신은 당신의 통제를 이동해야합니다

private void MyControl_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Left) 
    { 
     MyControl.Left = e.X + MyControl.Left - MouseDownLocation.X; 
     MyControl.Top = e.Y + MyControl.Top - MouseDownLocation.Y; 
    } 
} 

또한, 당신은 아래 버튼에 마우스를 캡처하고 버튼을 위로 그것을 해제 할 수 있습니다. 그렇게하면 매우 빠른 움직임이 당신의 논리를 "깨뜨리는"것을 막을 수 있습니다. 자세한 내용은 Mouse Capture in Windows Forms을 참조하십시오.