2014-09-21 1 views
1

패널에서 레이블을 이동하는 데 문제가 있습니다. 이 레이블을 이동하고 위쪽과 왼쪽 (0.0)에 도달하면 레이블이 위쪽과 왼쪽을 기준으로합니다. 화면의 절반을 소비하려면 레이블이 그림과 같이 패널을 초과합니다.런타임에서 이동 제어

enter image description here

내 코드 :

public partial class frmStandard : Form 
{ 
    Point startposition;  
} 

public void MouseDown(object sender, MouseEventArgs e) 
{ 
    startposition = e.Location; 
} 

public void MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     ((Label)sender).Left = Math.Max(0, e.X + ((Label)sender).Left - startposition.X); 
     ((Label)sender).Top = Math.Max(0, e.Y + ((Label)sender).Top - startposition.Y); 
    } 
} 

내가 라벨이 패널 size.What이 코드에 추가되어야 초과하지 않도록해야합니까?

+0

아마 Z 순서 문제 일 수 있습니다. 라벨이 해당 툴바 아래에 사라집니다. 간단한 해결 방법은 도구 모음을 패널에 배치하지 않는 것입니다. MouseMove 코드도 작업이 필요합니다. Max()가 작업을 수행하면 마우스 위치가 레이블 위치와 일치하지 않게됩니다. PointToScreen을 사용하면 문제를 피할 수 있습니다. 샘플 코드 [here here] (http://stackoverflow.com/a/25591801/17034). –

답변

4

다른 테두리를 확인해야합니다.

여기에 포함 된 치수 데이터 인 Panel을 사용해야합니다. 더 일반적으로, 하나는 수

private void MouseMove(object sender, MouseEventArgs e) 
{ 
    Label L = (Label)sender; 
    Rectangle PR = L.Parent.ClientRectangle; 

    if (e.Button == MouseButtons.Left) 
    { 
    L.Left = Math.Min(Math.Max(0, e.X + L.Left - startposition.X), PR.Right - L.Width); 
    L.Top = Math.Min(Math.Max(0, e.Y + L.Top - startposition.Y), PR.Bottom - L.Height); 
    } 
} 

그것을 유지하려면 : 코드가 이미로, 역동적 인 일을 유지하는 정신

, 나는 그가 LabelParent 대신 참조 단지 하나의 Panel 사용 LabelControl으로 바꾸고 사용자가 다른 코드를 동일한 코드 조각으로 옮길 수있게하십시오.

관련 문제