ฉันจะเพิ่ม ToolTip ให้กับตัวควบคุมได้อย่างไร


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
มันจะได้รับการปลดปล่อยเมื่อมันกลายเป็น unreferenced ซึ่งมันจะไม่เป็นเช่นปุ่มและช่องทำเครื่องหมายยังคงอ้างอิง
Rowland ชอว์

2
พวกเขากำลังอ้างอิงเพราะ "SetToolTip" เพิ่ม EventHandlers ไปที่ปุ่มและกิจกรรมของช่องทำเครื่องหมาย
Eduardo Wada

3
ฉันคิดว่ามันเป็นความคิดที่ดีที่จะใส่คำแนะนำเครื่องมือไว้ในตัวแปรแบบคงที่ เกิดอะไรขึ้นถ้าแบบฟอร์มถูกปิดและเปิดอีกครั้ง SetTooltip จะทำงานอีกครั้งหรือไม่ และถ้าเป็นเช่นนั้นตัวจัดการของแบบฟอร์มที่ปิดจะยังคงอยู่ในหน่วยความจำหรือลบออกอย่างถูกต้องหรือไม่ ฉันจะไม่ใช้เวลาหนึ่งนาทีในการทดสอบว่า ใช้ตัวแปรสมาชิกแทน - นั่นคือหลักฐานแสดงหัวข้อย่อย!
Elmue

138

ลากตัวควบคุมเคล็ดลับจากกล่องเครื่องมือไปยังแบบฟอร์มของคุณ คุณไม่จำเป็นต้องให้คุณสมบัติใด ๆ นอกเหนือจากชื่อ จากนั้นในคุณสมบัติของตัวควบคุมที่คุณต้องการให้มีคำแนะนำเครื่องมือให้มองหาคุณสมบัติใหม่ที่มีชื่อของตัวควบคุมคำแนะนำเครื่องมือที่คุณเพิ่งเพิ่ม โดยค่าเริ่มต้นจะให้คำแนะนำเครื่องมือเมื่อเคอร์เซอร์วางตัวควบคุม


54
ตรวจสอบให้แน่ใจว่าเมื่อคุณทำเช่นนี้ (เช่นตอนตีสอง) ที่คุณใช้การควบคุม ToolTip และไม่ใช่การควบคุม ToolStrip
Adrian K

2
ด้วยคำตอบนี้การเพิ่มเพียงคำแนะนำเครื่องมือเดียวใน winform ทำให้การควบคุมทั้งหมดในรูปแบบคำแนะนำเครื่องมือของพวกเขา
ตอบ

ทรงพลังในความเรียบง่ายเพียงตรวจสอบให้แน่ใจว่าคุณวางมันลงบนการควบคุมที่ถูกต้องไม่ใช่อย่างใดอย่างหนึ่งที่อยู่ถัดจากมัน (เช่นตอนตีสอง)
Michael Stimson

40
  1. เพิ่มองค์ประกอบ ToolTip ให้กับแบบฟอร์มของคุณ
  2. เลือกหนึ่งในตัวควบคุมที่คุณต้องการให้เป็นเครื่องมือ
  3. เปิดตารางคุณสมบัติ ( F4) ในรายการคุณจะพบคุณสมบัติชื่อ "ToolTip บน toolTip1" (หรือบางอย่างที่คล้ายกัน) ตั้งค่าข้อความคำแนะนำเครื่องมือที่ต้องการบนคุณสมบัตินั้น
  4. ทำซ้ำ 2-3 สำหรับการควบคุมอื่น ๆ
  5. เสร็จสิ้น

เคล็ดลับที่นี่คือการควบคุม ToolTip เป็นตัวควบคุม Extenderซึ่งหมายความว่ามันจะขยายชุดของคุณสมบัติสำหรับการควบคุมอื่น ๆในแบบฟอร์ม เบื้องหลังนี้สามารถทำได้โดยการสร้างรหัสเช่นในคำตอบของ Svetlozar มีการควบคุมอื่น ๆ ที่ทำงานในลักษณะเดียวกัน (เช่นHelpProvider)


1
ดังนั้นคุณสามารถใช้ ToolTip เดียวกันสำหรับตัวควบคุมหลายตัวที่มีข้อความต่างกันได้หรือไม่
Svish

@Svish: ใช่นั่นคือจุดประสงค์ของการควบคุมส่วนขยาย
Fredrik Mörk

สามารถใช้การควบคุมข้ามผู้ใช้และแบบฟอร์มด้วยได้หรือไม่? เช่นถ้าคุณสร้าง ToolTip แบบคงที่พร้อมกับค่าคุณสมบัติมาตรฐานของคุณ หรือว่าจะถือว่าการปฏิบัติที่ไม่ดี?
Svish

ฉันไม่เคยลองมาก่อนและฉันก็ไม่ค่อยทราบถึงผลงานด้านในของ ToolTip แต่เนื่องจากได้รับการอ้างอิงถึงตัวควบคุมที่ข้อความเกี่ยวข้องฉันคิดว่ามันสามารถใช้งานได้ ทางเดียวเท่านั้นที่จะหา; ลอง: o)
Fredrik มอร์ค

แน่นอนฉันจะลองดู แต่ฉันไม่ค่อยดีนักในการค้นหาสิ่งต่าง ๆ เช่นการรั่วไหลของหน่วยความจำและเช่นนั้น ... และถ้ามันจะทำให้เกิดการรั่วไหลของหน่วยความจำหรืออะไรทำนองนั้นฉันอยากจะรู้ว่าฮิฮิ
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.