2014-10-05 4 views
0

끌기에 문제가 있습니다 & 드롭. 코드가 있습니다 :C# 드래그 앤 드롭 레이블

 void labelWorker_MouseEvent(object sender, MouseEventArgs e) 
    { 
     Label labelWorker = (Label)sender; 
     labelWorker.DoDragDrop(labelWorker, DragDropEffects.Move); 
     labelWorker.MouseDown += new MouseEventHandler(labelWorker_MouseDown); 
     labelWorker.MouseMove += new MouseEventHandler(labelWorker_MouseMove); 
     labelWorker.MouseUp += new MouseEventHandler(labelWorker_MouseUp); 
    } 

     bool isDragged = false; 
     Point ptOffset; 
    void labelWorker_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      Label labelWorker = (Label)sender; 
      isDragged = true; 
      Point ptStartPosition = labelWorker.PointToScreen(new Point(e.X, e.Y)); 

      ptOffset = new Point(); 
      ptOffset.X = labelWorker.Location.X - ptStartPosition.X; 
      ptOffset.Y = labelWorker.Location.Y - ptStartPosition.Y; 
     } 
     else 
     { 
      isDragged = false; 
     } 
    } 

    void labelWorker_MouseMove(object sender, MouseEventArgs e) 
    { 
     Label labelWorker = (Label)sender; 
     if (isDragged) 
     { 
      Point newPoint = labelWorker.PointToScreen(new Point(e.X, e.Y)); 
      newPoint.Offset(ptOffset); 
      labelWorker.Location = newPoint; 
     } 
    } 

    void labelWorker_MouseUp(object sender, MouseEventArgs e) 
    { 
     Label labelWorker = (Label)sender; 
     isDragged = false;    
    } 

레이블을 이동하려고하면 놀라기 시작합니다. 문제가 있다고 생각합니다.

void labelWorker_MouseMove(object sender, MouseEventArgs e) 
    { 
     Label labelWorker = (Label)sender; 
     if (isDragged) 
     { 
      Point newPoint = labelWorker.PointToScreen(new Point(e.X, e.Y)); 
      newPoint.Offset(ptOffset); 
      labelWorker.Location = newPoint; 
     } 
    } 

답변

0

확인. 방금 만들었습니다.

bool clicked = false; 
    int iOldX; 
    int iOldY; 
    int iClickX; 
    int iClickY; 
    void labelWorker_MouseDown(object sender, MouseEventArgs e) 
    { 
     Label labelWorker = (Label)sender; 
     if (e.Button == MouseButtons.Left) 
     { 
      Point p = ConvertFromChildToForm(e.X, e.Y, labelWorker); 
      iOldX = p.X; 
      iOldY = p.Y; 
      iClickX = e.X; 
      iClickY = e.Y; 
      clicked = true; 
     } 
    } 

    void labelWorker_MouseMove(object sender, MouseEventArgs e) 
    { 
     Label labelWorker = (Label)sender; 
     if (clicked) 
     { 
      Point p = new Point(); // New Coordinate 
      p.X = e.X + labelWorker.Left; 
      p.Y = e.Y + labelWorker.Top; 
      labelWorker.Left = p.X - iClickX; 
      labelWorker.Top = p.Y - iClickY; 
     } 
    } 

    void labelWorker_MouseUp(object sender, MouseEventArgs e) 
    { 
     clicked = false; 
    } 

    private Point ConvertFromChildToForm(int x, int y, Control control) 
    { 
     Point p = new Point(x, y); 
     control.Location = p; 
     return p; 
    } 
+0

변경된 내용은 무엇입니까? 어떻게 그걸 해결 했니? –

+0

나는 mouseup, mousemove 및 mousedown에 대한 새 코드를 작성했습니다. 마우스 왼쪽 버튼이 아무런 문제없이 작동 중일 때 마우스로 레이블이 움직입니다. – Kafus