Windows Forms를 사용하여 버튼 위에 툴팁 표시


답변:


222

도구 설명은 실제로 단일 폼에서 여러 요소에 대한 도구 설명 표시를 처리하는 WinForms 컨트롤입니다.

버튼 이름이 MyButton이라고합시다.

  1. Windows Forms 도구 상자의 공용 컨트롤 아래에있는 도구 설명 컨트롤을 폼에 추가하십시오.
  2. 이름을 지정하십시오-MyToolTip이라고 말하십시오.
  3. MyButton의 "MyToolTip 도구 설명"속성 (버튼 속성 표의 기타 아래)을 마우스로 가리킬 때 표시되는 텍스트로 설정하십시오.

커서를 버튼 위로 가져 가면 툴팁이 자동으로 나타나지만 프로그래밍 방식으로 표시해야하는 경우

MyToolTip.Show("Tooltip text goes here", MyButton)

코드에서 툴팁을 표시하고 MyToolTip.Hide (MyButton)으로 다시 사라지게하십시오.


멋지지만 질문 : 양식에 하나 이상의 버튼이있는 경우 더 많은 툴팁이 필요하거나 동일한 툴팁에 대해 여러 설명과 버튼을 설정할 수 있습니까?
ghiboz

8
폼에는 단일 툴팁 컨트롤 만 필요합니다. 각 버튼마다 다른 도움말 텍스트를 가질 수 있습니다 (이것이 "MyToolTip의 툴팁"이 툴팁 컨트롤 자체가 아닌 관련 컨트롤의 속성 인 이유입니다)
Dylan Beattie

2
가장 간단한 경우 폼에 툴팁을 추가하는 것이 가장 좋습니다. 문제 : 사용자 지정 컨트롤을 디자인 할 때 부모 폼에 대한 참조가 없습니다. 솔루션 : Control에서 툴팁 객체를 생성하십시오. ToolTip 객체가 반드시 양식에 첨부 된 것으로 생각하지 마십시오.
Stéphane Gourichon

93

양식 디자이너 사용 :

  • 도구 설명 컨트롤을 도구 상자에서 폼으로 끕니다.
  • 툴팁을 표시 할 컨트롤의 속성을 선택하십시오.
  • 'toolTip1의'ToolTip '특성을 찾으십시오 (기본 이름을 변경 한 경우 이름이 toolTip1이 아닐 수 있음).
  • 속성의 텍스트를 표시하려는 툴팁 텍스트로 설정하십시오.

다음 호출을 사용하여 프로그래밍 방식으로 툴팁을 설정할 수도 있습니다.

this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");

45

ToolTip 클래스를 사용할 수 있습니다.

컨트롤에 대한 툴팁 만들기

예:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.Button1, "Hello");
}

1
자동 생성 된 VS 코드와 직접 통합되므로 완벽한 솔루션입니다. 감사합니다 :)
anon58192932

@DaveK 감사합니다. 한 곳에서 모든 툴팁을 정의 할 수 있기 때문에이 방법이 더 좋습니다
fedeteka

감사. 이 질문에 대한 가장 좋고 가장 간단한 답변.
Najeeb 2016 년

더 짧은 :new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf

6

기본 툴팁의 경우 다음을 사용할 수 있습니다.

System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");

툴팁 메시지에 형식이 필요한 경우 사용자 정의 된 툴팁을 사용할 수도 있습니다. 폼의 사용자 지정 서식을 지정하고 컨트롤의 마우스 가리 키기 이벤트에서 도구 설명 대화 상자로 사용할 수 있습니다. 자세한 내용은 다음 링크를 확인하십시오-

http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html


5

Tag 속성 에 느리고 컴팩트 한 텍스트 저장

약간 게으르고 컨트롤 의 Tag 속성을 다른 용도로 사용하지 않으면 툴팁 텍스트를 저장하고 MouseHover 이벤트 핸들러를 다음과 같은 모든 컨트롤에 할당 할 수 있습니다 .

    private System.Windows.Forms.ToolTip ToolTip1;
    private void PrepareTooltips()
    {
        ToolTip1 = new System.Windows.Forms.ToolTip();
        foreach(Control ctrl in this.Controls)
        {
            if (ctrl is Button && ctrl.Tag is string)
            {
                ctrl.MouseHover += new EventHandler(delegate(Object o, EventArgs a)
                {
                    var btn = (Control)o;
                    ToolTip1.SetToolTip(btn, btn.Tag.ToString());
                });
            }
        }
    }

이 경우 Tag 속성에 문자열이있는 모든 버튼 에는 MouseHover 이벤트 가 할당됩니다 . 컴팩트하게 유지하기 위해 MouseHover 이벤트는 람다 식을 사용하여 인라인으로 정의됩니다. 버튼 위에 마우스를 놓으면 툴팁에 태그 텍스트가 할당되어 표시됩니다.


4

.NET 프레임 워크는 ToolTip 클래스를 제공합니다. 양식에 해당 항목 중 하나를 추가 한 다음 툴팁을 원하는 각 항목에 대해 MouseHover 이벤트에서 다음과 같이하십시오.

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }

4
private void Form1_Load(object sender, System.EventArgs e)
{
    ToolTip toolTip1 = new ToolTip();
    toolTip1.AutoPopDelay = 5000;
    toolTip1.InitialDelay = 1000;
    toolTip1.ReshowDelay = 500;
    toolTip1.ShowAlways = true;
    toolTip1.SetToolTip(this.button1, "My button1");
    toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}

4
이 코드 스 니펫은 문제를 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 귀하의 코드 제안 이유를 모를 수도 있습니다.
secelite

0

를 기반으로 DaveK의 대답 , 내가 제어 확장을 만들었습니다 :

public static void SetToolTip(this Control control, string txt)
{
    new ToolTip().SetToolTip(control, txt);
}

그런 다음 한 줄로 모든 컨트롤에 대한 툴팁을 설정할 수 있습니다.

this.MyButton.SetToolTip("Hello world");

-4

물론, 마우스 오버 이벤트를 처리하고 툴팁을 표시하도록 지시하십시오. t는 다음을 사용하여 전역 또는 생성자에서 정의 된 툴팁입니다.

ToolTip t = new ToolTip();

그런 다음 이벤트 핸들러 :

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}

2
Windows Forms에서 ToolTip 컨트롤을 사용하는 방법이 아니기 때문에 투표에 참여했다고 생각합니다. 폼에는 이러한 컨트롤이 하나만 필요하며 모든 컨트롤에 대한 팁이 표시됩니다. 다른 응답의 코드를 참조하십시오.
Julian Melville

1
설명이 코드와 일치하지 않는 것 같습니다. 설명에서 표시하고 코드에서 초기화했습니다. 내 잘못이야. : P
Fry

2
@ julianz 사실, 이것은 상태에 따라 원할 경우 역동적 일 수있는 특수한 툴팁을 갖는 데 효과적입니다 (물론 마이너스 생성-용서, 나는 그것을 한 블록에 모두 맞추려고 노력했습니다.) 비슷한 맥락에서 ... 이슈 디 테루와 딜런 비티는 인스턴스화없이 비슷했습니다.
프라이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.