0
드래그하려고하는 라벨이 있습니다. 레이블을 클릭하고 MouseMove() 이벤트에서 레이블의 위치를 다시 지정하려고합니다.MouseMove가 올바른 좌표 점을 얻지 못합니다
드래그하려고하는 라벨이 있습니다. 레이블을 클릭하고 MouseMove() 이벤트에서 레이블의 위치를 다시 지정하려고합니다.MouseMove가 올바른 좌표 점을 얻지 못합니다
일반적으로 컨트롤에 초기 마우스 다운 포인트의 오프셋 위치를 저장해야합니다. 그렇지 않으면 컨트롤이 지터스럽게 움직입니다. 부모에 대한
Cursor.Position`이 ** 화면 ** 좌표에 있지만 위치() 속성이 ** 클라이언트에서 할 필요가`때문이다Point labelOffset = Point.Empty;
void MyLabel_MouseDown(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {
labelOffset = e.Location;
}
}
void MyLabel_MouseMove(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {
Label l = sender as Label;
l.Location = new Point(l.Left + e.X - labelOffset.X,
l.Top + e.Y - labelOffset.Y);
}
}
** 좌표 : 그럼 그냥 수학을 . 당신의 접근 방식을 위해서 당신은'PointToClient()'를 다음과 같이 사용할 필요가 있습니다 :'((Label) sender) .Location = ((Label) sender) .Parent.PointToClient (Cursor.Position);' 점프 (jump) "할 수 있습니다. 그러나 컨트롤의 상단/왼쪽 모서리가 커서 위치로 점프합니다. 아래의 LarsTech의 예와 같이 더 자연스러운 드래그가 수행됩니다. –