2013-04-11 2 views
1

ToolTip.SetToolTip 또는 유사한 문자열을 컨트롤의 툴팁으로 사용하는 것이 가능한지 궁금합니다 (예 : 두 번째 매개 변수로 문자열을 전달하는 대신 SetToolTip(controlToWhichToAdd, panelToDisplayAsToolTip)).컨트롤을 툴팁으로 설정하는 방법이 있습니까?

만약 이것이 가능하지 않다면 mouse_enter 이벤트에있는 컨트롤의 마우스 위치에 패널을 표시하고 그것을 제거하거나 보이지 않게 만드는 것을 mouse_leave에서 추측하고 있습니다.

다른 방법으로 쉽게이 작업을 수행 할 수 있습니까?

+0

WPF에서는 완전히 사용자 지정할 수있는 팝업 컨트롤을 사용할 수 있으므로이 작업은 간단합니다. – David

+0

MouseEnter 및 MouseLeave에 핸들러를 추가하는 것이 좋다고 생각합니다. 쉬운 방법이 없다고 생각합니다. 이러한 종류의 메커니즘은 웹 애플리케이션 (자바 스크립트 사용)에 널리 사용됩니다.표준 방법을 원하면 ToolStripControlHost 또는 Goolge를 "C#의 사용자 지정 도구 설명"으로 검색해야한다고 생각합니다. 수많은 결과가 있습니다. 그러나 대부분은 ToolStripControlHost를 사용합니다. –

+0

언급 한대로 두 번째 매개 변수가있는 자체 SetToolTip 메서드가 필요하면 .NET ToolTip에서 상속 된 사용자 지정 ToolTip을 만듭니다. –

답변

1

이것은 기본적으로 제공되지 않습니다. 두 가지 선택이 있습니다. 첫 번째 옵션은 Draw Event을 덮어 쓰는 것으로 툴팁의 모양을 사용자 정의 할 수 있습니다. 여기에 an example of this입니다. 이 방법을 사용하는 경우 속성을 true으로 설정해야합니다.

몇 가지 간단한 사용자 정의가 필요한 경우 첫 번째 방법이 작동하지만 두 번째 옵션은 더 유연한 옵션이 필요한 경우 가장 잘 작동합니다. 두 번째 옵션은 이미 제안한 것을 수행하고 자신의 종류의 툴팁을 만드는 것입니다. 간단히 말해서 MouseEnter event에 대한 이벤트 처리기를 먼저 만듭니다. 해당 이벤트가 발생하면 Timer을 사용할 수 있습니다. 이 타이머는 툴팁이 표시되기 전에 발생하는 지연입니다. 그런 다음 마침내 패널을 마우스 좌표로 표시하면됩니다. 이제

public partial class Form1 : Form 
{ 
    private Panel _myToolTipPanel; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     _myToolTipPanel = new Panel {Visible = false}; 
     Controls.Add(_myToolTipPanel); 

     Label myLabel = new Label(); 
     myLabel.Text = "Testing"; 
     _myToolTipPanel.Controls.Add(myLabel); 
    } 

    private void button1_MouseEnter(object sender, EventArgs e) 
    { 
     timer1.Enabled = true; 
    } 

    private void button1_MouseLeave(object sender, EventArgs e) 
    { 
     timer1.Enabled = false; 
     _myToolTipPanel.Visible = false; 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     timer1.Enabled = false; 
     Point position = Cursor.Position; 
     Point formPoisition = PointToClient(position); 

     _myToolTipPanel.Visible = true; 
     _myToolTipPanel.Location = formPoisition; 
    } 
} 

물론 당신이 툴팁의 일부 아름답게을해야 할 것 :

당신이 그것을에있는 버튼과 타이머 형태가 있고 패널입니다 툴팁이 버튼을한다고 가정 , 그러나 이것이 일반적인 생각입니다!

1

Tooltip.Popup event에 대한 처리기를 작성하고 팝업을 취소하여 자신의 패널을 표시 할 수 있습니다. 그래도 적절한 시간에 청소해야합니다.

enter image description here

:

예를 들어

: HTML가 유효 툴팁을 구현 this CodeProject entry처럼 그냥 툴팁 표시에 더 많은 서식 옵션을 찾고 있다면

private void ToolTip1_Popup(Object sender, PopupEventArgs e) 
{ 
    e.Cancel = true; 
    //Do work here to display whatever control you'd like 
} 

, 대안은 무엇인가,

1

한 가지 접근법은 도구 설명 컨트롤을 상속 할 수 있으며 은 SetToolTip 및 Show 메서드를 재정의 할 수 있습니다. SetToolTip 내에서 개인 메서드 SetToolTipInternal을 다시 작성해야하지만 대부분의 기능을 다시 사용할 수 있습니다. 마우스 이벤트 (leave, move)를 사용하여 영역을 바인딩합니다. 그러나 툴팁은 윈도우의 내부 윈도우를 사용하여 baloon 윈도우를 보여주기 때문에. 당신은 꽤 많은 코드를 오버라이드해야 할 것입니다.

그러나 이것은 많은 시간이 소요될 수 있으며 상당한 테스트가 필요합니다.

관련 문제