แสดงคำแนะนำเครื่องมือบนปุ่มโดยใช้ Windows Forms


214

ฉันจะแสดงคำแนะนำเครื่องมือบนปุ่มโดยใช้Windows Forms ได้อย่างไร


11
บทความต่อไปนี้อธิบายได้ดีที่สุดด้วยภาพ: http://www.dotnetperls.com/tooltip
vaichidrewar

คำตอบ:


222

เคล็ดลับเครื่องมือเป็นตัวควบคุม WinForms ที่จัดการแสดงเคล็ดลับเครื่องมือสำหรับองค์ประกอบหลายรายการในแบบฟอร์มเดียว

สมมติว่าปุ่มของคุณเรียกว่า MyButton

  1. เพิ่มคำแนะนำเครื่องมือตัวควบคุม (ภายใต้การควบคุมทั่วไปในกล่องเครื่องมือแบบฟอร์ม Windows) ไปยังแบบฟอร์มของคุณ
  2. ตั้งชื่อ - พูด MyToolTip
  3. ตั้งค่าคุณสมบัติ "Tooltip on MyToolTip" ของ MyButton (ใต้ Misc ในตารางคุณสมบัติปุ่ม) เป็นข้อความที่ควรปรากฏขึ้นเมื่อคุณโฮเวอร์เหนือมัน

เคล็ดลับเครื่องมือจะปรากฏขึ้นโดยอัตโนมัติเมื่อเคอร์เซอร์เลื่อนอยู่เหนือปุ่ม แต่ถ้าคุณต้องการแสดงให้โปรแกรมโทรออก

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

ในรหัสของคุณเพื่อแสดงคำแนะนำเครื่องมือและ MyToolTip.Hide (MyButton) เพื่อให้หายไปอีกครั้ง


ดี แต่คำถาม: ถ้าฉันมีมากกว่าหนึ่งปุ่มในแบบฟอร์มฉันต้องการคำแนะนำเครื่องมือเพิ่มเติมหรือฉันสามารถตั้งค่าคำอธิบายและปุ่มหลายคำสำหรับคำแนะนำเครื่องมือเดียวกันได้หรือไม่
ghiboz

8
แบบฟอร์มของคุณต้องการเพียงการควบคุม ToolTip เพียงปุ่มเดียว - แต่ละปุ่มสามารถมีข้อความช่วยเหลือที่แตกต่างกัน (นี่คือเหตุผลที่ "Tooltip on MyToolTip" เป็นคุณสมบัติของการควบคุมที่เกี่ยวข้องไม่ใช่ตัวควบคุม ToolTip เอง)
Dylan Beattie

2
ในกรณีที่ง่ายที่สุดการเพิ่มคำแนะนำเครื่องมือในแบบฟอร์มเป็นสิ่งที่ดีที่สุดที่จะทำ ปัญหา: ณ เวลาออกแบบของคอนโทรลแบบกำหนดเองคุณไม่มีการอ้างอิงถึงฟอร์มหลัก การแก้ไข: สร้างวัตถุเคล็ดลับเครื่องมือในการควบคุม อย่าคิดว่าคำแนะนำเครื่องมือเป็นวัตถุที่แนบมากับแบบฟอร์ม
Stéphane Gourichon

93

ใช้ตัวออกแบบฟอร์ม:

  • ลากตัวควบคุมเครื่องมือคำแนะนำจากกล่องเครื่องมือไปยังแบบฟอร์ม
  • เลือกคุณสมบัติของตัวควบคุมที่คุณต้องการให้คำแนะนำเครื่องมือปรากฏขึ้น
  • ค้นหาคุณสมบัติ 'ToolTip on toolTip1' (ชื่ออาจไม่ใช่ 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

ยิ่งสั้นลง: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ของตัวควบคุมสำหรับสิ่งอื่นคุณสามารถใช้มันเพื่อเก็บข้อความคำแนะนำเครื่องมือและกำหนดตัวจัดการเหตุการณ์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());
                });
            }
        }
    }

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


4

.NET Framework แสดงคลาส 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

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

ToolTip t = new ToolTip();

ดังนั้นตัวจัดการเหตุการณ์:

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

2
ฉันคิดว่าคุณได้รับการโหวตเพราะนั่นไม่ใช่วิธีการใช้ ToolTip control ใน Windows Forms คุณต้องการเพียงหนึ่งการควบคุมดังกล่าวในแบบฟอร์มและมันจะแสดงเคล็ดลับสำหรับการควบคุมทั้งหมด ดูรหัสในการตอบสนองอื่น ๆ
Julian Melville

1
ฉันเดาคำอธิบายไม่ตรงกับรหัสในคำอธิบายที่ฉันบอกว่าจะแสดงมันและในรหัสฉันเริ่มต้นได้เช่นกัน ความผิดฉันเอง. : P
ทอด

2
@ julianz ที่จริงแล้วมันใช้งานได้ดีสำหรับการมีเครื่องมือพิเศษซึ่งสามารถเป็นแบบไดนามิกได้หากคุณต้องการขึ้นอยู่กับสถานะ (ลบแน่นอนการสร้าง - ให้อภัยฉันฉันแค่พยายามทำให้พอดีทั้งหมดในบล็อกเดียว) สำหรับคำตอบอื่น ๆ หลอดเลือดดำที่คล้ายกัน ... yshuditelu และ Dylan Beattie มีลักษณะคล้ายกันแม้ว่าจะไม่มีการเริ่มต้น
ทอด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.