컨트롤에 툴팁을 어떻게 추가합니까?


154

ToolTip마우스로 마우스를 가져 가면 표시 할 컨트롤이 있습니다. 어떻게해야합니까? 코드 에서뿐만 아니라 디자이너 에서도이 작업을 올바르게 수행하는 방법을 알고 싶습니다 ( ToolTip도구 상자에 구성 요소가 있지만 확실하지는 않습니다.)

이것이 중복 되어도 놀랍지 않지만 고급 시나리오에 관한 질문 만 찾을 수 있습니다. 기본을 알고 싶습니다.



관련 및 이전 버전 (일반적으로 .NET에 적용) : stackoverflow.com/questions/168550/…
Christopher Kyle Horton

답변:


208

코드로 작성하는 기사는 다음과 같습니다.

private void Form1_Load(object sender, System.EventArgs e)
{
     // Create the ToolTip and associate with the Form container.
     ToolTip toolTip1 = new ToolTip();

     // Set up the delays for the ToolTip.
     toolTip1.AutoPopDelay = 5000;
     toolTip1.InitialDelay = 1000;
     toolTip1.ReshowDelay = 500;
     // Force the ToolTip text to be displayed whether or not the form is active.
     toolTip1.ShowAlways = true;

     // Set up the ToolTip text for the Button and Checkbox.
     toolTip1.SetToolTip(this.button1, "My button1");
     toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}

3
toolTip1변수가 범위를 벗어나 면 문제가되지 않을까요?
Svish

1
ToolTip모든 양식 에 대해 하나의 정적 정보 는 어떻습니까?
Svish

7
버튼과 체크 박스가 여전히 그것을 참조하기 때문에 참조되지 않은 후에 해제 될 것입니다.
Rowland Shaw

2
"SetToolTip"이 버튼과 체크 박스의 이벤트에 EventHandlers를 추가하기 때문에이를 참조하고 있습니다
Eduardo Wada

3
툴팁을 정적 변수에 넣는 것은 좋지 않은 생각입니다. 양식을 닫았다가 다시 열면 어떻게됩니까? SetTooltip이 다시 작동합니까? 그렇다면 닫힌 양식의 처리기가 메모리에 유지되거나 올바르게 제거됩니까? 나는 그것을 테스트하는데 1 분도 쓰지 않을 것이다. 대신 variabe 멤버를 사용하십시오.
Elmue

138

툴팁 컨트롤을 툴박스에서 폼으로 드래그합니다. 실제로 이름 이외의 속성을 지정할 필요는 없습니다. 그런 다음 툴팁을 사용하려는 컨트롤의 속성에서 방금 추가 한 툴팁 컨트롤의 이름으로 새 속성을 찾으십시오. 커서가 컨트롤을 가리키면 기본적으로 툴팁이 표시됩니다.


54
이 작업을 수행 할 때 (예 : 오전 2시) ToolStrip 컨트롤이 아니라 ToolTip 컨트롤을 사용해야합니다.
Adrian K

2
이 답변을 사용하면 winform에 하나의 툴팁 만 추가하면 모든 컨트롤에 해당 양식의 툴팁이 제공됩니다.
SAm

간단하게 강력하므로, 옆에있는 컨트롤이 아닌 올바른 컨트롤에 놓으십시오 (예 : 오전 2시).
Michael Stimson

40
  1. 양식에 툴팁 구성 요소 추가
  2. 툴팁을 원하는 컨트롤 중 하나를 선택하십시오.
  3. 속성 표 ( F4)를 열면 목록에 "toolTip1의 ToolTip"(또는 이와 유사한 것)이라는 속성이 있습니다. 해당 속성에서 원하는 툴팁 텍스트를 설정하십시오.
  4. 다른 컨트롤에 대해 2-3 반복
  5. 끝난.

여기서 유용한 요점은 ToolTip 컨트롤이 익스텐더 컨트롤 이므로 폼의 다른 컨트롤 에 대한 속성 집합을 확장한다는 것입니다 . 뒤에서 이것은 Svetlozar의 답변과 같은 코드를 생성하여 달성됩니다. 같은 방식으로 작동하는 다른 컨트롤이 있습니다 (예 :) HelpProvider.


1
텍스트가 다른 많은 컨트롤에 동일한 툴팁을 사용할 수 있습니까?
Svish

@Svish : 네, 익스텐더 컨트롤의 목적입니다.
Fredrik Mörk

교차 사용자 정의 컨트롤과 양식에도 사용할 수 있습니까? 표준 속성 값으로 정적 툴팁을 만든 것처럼. 아니면 나쁜 습관으로 간주됩니까?
Svish

나는 그것을 시도하지 않았고 ToolTip의 내부 작동을 잘 모르지만 텍스트와 관련된 컨트롤에 대한 참조를 얻었으므로 작동 할 수 있다고 생각합니다 . 알아낼 수있는 유일한 방법입니다. 그것을 시도 : O)
프레드릭 Mörk

글쎄, 나는 그것을 시험해 볼 것이다. 그러나 나는 메모리 누수와 같은 것들을 찾는 데 특히 좋지 않습니다 ... 그리고 그것이 메모리 누수 또는 내가 알고 싶은 것과 같은 것을 유발한다면, hehe.
Svish

8

C #의 툴팁은 거의 모든 UI 컨트롤에 쉽게 추가 할 수 있습니다. 이를 위해 MouseHover 이벤트를 추가 할 필요가 없습니다.

이 작업을 수행하는 방법입니다.

  1. 도구 설명 개체를 폼에 추가하십시오. 하나의 개체로 전체 양식에 충분합니다. ToolTip toolTip = new ToolTip();

  2. 원하는 텍스트로 툴팁에 컨트롤을 추가하십시오.

    toolTip.SetToolTip(Button1,"Click here");


1

나는 이것을 이렇게했다 : 그냥 컨트롤에 이벤트를 추가하고 컨트롤의 태그를 설정하고 적절한 컨트롤 / 태그에 대한 툴팁을 처리하기위한 조건을 추가하십시오.

private void Info_MouseHover(object sender, EventArgs e)
{
    Control senderObject = sender as Control;
    string hoveredControl = senderObject.Tag.ToString();

    // only instantiate a tooltip if the control's tag contains data
    if (hoveredControl != "")
    {
        ToolTip info = new ToolTip
        {
            AutomaticDelay = 500
        };

        string tooltipMessage = string.Empty;

        // add all conditionals here to modify message based on the tag 
        // of the hovered control
        if (hoveredControl == "save button")
        {
            tooltipMessage = "This button will save stuff.";
        }

        info.SetToolTip(senderObject, tooltipMessage);
    }
}

-3

컨트롤의 ToolTipTextNeeded 이벤트에 가입하고 훨씬 간단한 e.TooltipText를 반환하십시오.


6
나는 이것이 표준 WinForm 컨트롤 이벤트라고 생각하지 않습니다.
Dan7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.