2011-11-17 3 views
1

나는 이것이 모든 정보와 예제 코드를 온라인으로 제공하면서 매우 단순해야한다는 것을 알고있다. 그러나 어떤 이유에서 나는 이것을 작동시킬 수 없다.MouseMove 이벤트를 사용하여 패널 내에서 Label을 이동하는 방법은 무엇입니까?

winform에 레이블과 패널이 있습니다. 패널 내로 들어가서 움직일 때 레이블 만 마우스 포인터를 따라 가길 원합니다.

나는 그것을 작동 시켰지만 그 위치는 완전히 바뀌었고 winform을 움직이면 항상 바뀌었다.

가 여기에 MouseMove 이벤트 및 기타 이벤트입니다 : larstech에 의해 제안

constructor MainForm; 
begin 
    InitializeComponent(); 
    label2.Visible:=false; 
end; 

method MainForm.panel1_MouseMove(sender: System.Object; e: System.Windows.Forms.MouseEventArgs); 
begin 
    //label2.Location := panel1.PointToScreen(e.Location); 
    label2.Location := self.PointToScreen(e.Location); 
    label2.Invalidate; 
end; 

method MainForm.panel1_MouseEnter(sender: System.Object; e: System.EventArgs); 
begin 
    label2.Visible:=true; 
end; 

method MainForm.panel1_MouseLeave(sender: System.Object; e: System.EventArgs); 
begin 
    label2.Visible:=false; 
end; 

업데이트, 나는 코드를 수정하지만 아래 그림이 표시되어 같은 레이블은 여전히 ​​상자의 밖에서 보이고있다.

myimage

감사합니다,

+0

이 레이블에 Panel1의 자식 컨트롤인가? 그것은 분명하지 않습니다. – LarsTech

+0

@LarsTech 아니야. 레이블은 패널 내부가 아닌 winform에 있습니다. Panel1 텍스트는 "Panel1. – ThN

답변

4

내가 delphi-prism 모르지만, 그냥되지 않을 것 :

label2.Location := e.Location; 

을 레이블이 자식 컨트롤이 아니기 때문에, 이것을 시도 :

label2.Location := new Point(panel1.Left + e.Location.X, panel1.Top + e.Location.Y); 

분명히 구문이 올바르지 않을 수 있습니다. 당신은 단지 도구 설명을 이동하려는 경우

,이 C#으로 작동합니다

private ToolTip _tips = new ToolTip(); 

private void panel1_MouseMove(object sender, MouseEventArgs e) { 
    _tips.Show("test", panel1, e.Location.X + 10, e.Location.Y + 10); 
} 
+0

텍스트를 포함하는 레이블입니다. 패널의 하위 레이블을 만들었지 만 현재 작동하고 있지만 레이블을 표시하려면 마우스를 계속 사용해야합니다. – ThN

+0

@digitalanalog 업데이트 된 답변입니다. 타이머가 작동한다고 생각합니다. 레이블이 비활성화되면 레이블을 비활성화 할 수 있지만 레이블이 비활성화되면 비활성화 될 수 있습니다. – LarsTech

+0

MouseEnter가 실행될 때마다 MouseLeave가 실행되는 이유는 무엇입니까 – ThN