Bagaimana cara menambahkan Tip Alat ke kontrol?

154

Saya memiliki beberapa kontrol yang ingin saya tampilkan ToolTipketika mouse berada di atasnya. Bagaimana saya bisa melakukan ini? Saya ingin tahu bagaimana melakukan ini dengan benar dalam kode, tetapi juga di perancang (Ada ToolTipkomponen di kotak peralatan, tapi saya tidak begitu ... mengerti).

Saya tidak akan terkejut jika ini merupakan duplikat, tetapi saya hanya dapat menemukan pertanyaan yang ada pada skenario yang lebih maju dan spesifik. Saya ingin tahu dasar-dasarnya.

Svish
sumber
Kemungkinan duplikat dari Menampilkan tooltip pada mouse di atas teks
Jim Fell
Terkait, dan lebih lama lagi (berlaku untuk .NET secara umum): stackoverflow.com/questions/168550/…
Christopher Kyle Horton

Jawaban:

208

Inilah artikel Anda untuk melakukannya dengan kode

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");
}
Svetlozar Angelov
sumber
3
Jadi saya kira tidak masalah jika toolTip1variabel keluar dari ruang lingkup?
Svish
1
Bagaimana dengan satu statis ToolTipuntuk semua formulir Anda?
Svish
7
Ini akan dibebaskan setelah menjadi tidak direferensikan, dan itu tidak akan terjadi, karena tombol dan kotak centang masih akan
merujuknya
2
Mereka merujuknya karena "SetToolTip" menambahkan EventHandlers ke tombol dan acara kotak centang
Eduardo Wada
3
Saya pikir ini ide yang buruk untuk menempatkan tooltip ke dalam variabel statis. Bagaimana jika Formulir ditutup dan dibuka lagi? Apakah SetTooltip akan berfungsi lagi? Dan jika demikian, akankah penangan dari bentuk tertutup tetap di memori atau dihapus dengan benar? Saya bahkan tidak akan menghabiskan satu menit untuk menguji itu. Gunakan variabe anggota sebagai gantinya - itu bukti peluru!
Elmue
138

Seret kontrol tooltip dari kotak alat ke formulir Anda. Anda tidak perlu memberinya properti apa pun selain nama. Kemudian, di properti kontrol yang Anda ingin mengaktifkan tooltip, cari properti baru dengan nama kontrol tooltip yang baru saja Anda tambahkan. Ini secara default akan memberi Anda tooltip ketika kursor mengarahkan kontrol.

JYelton
sumber
54
Pastikan bahwa ketika Anda melakukan ini (seperti pada jam 2 pagi) bahwa Anda menggunakan kontrol ToolTip dan bukan kontrol ToolStrip.
Adrian K
2
Dengan jawaban ini, menambahkan hanya satu tooltip ke winform memberikan semua kontrol dalam bentuk tooltip mereka sendiri.
SAm
Kuat dalam kesederhanaannya, pastikan Anda menjatuhkannya pada kontrol yang benar dan bukan yang di sebelahnya (seperti pada jam 2 pagi).
Michael Stimson
40
  1. Tambahkan komponen ToolTip ke formulir Anda
  2. Pilih salah satu kontrol yang Anda inginkan untuk tip alat
  3. Buka kotak properti ( F4), dalam daftar Anda akan menemukan properti yang disebut "ToolTip pada toolTip1" (atau yang serupa). Atur teks tooltip yang diinginkan pada properti itu.
  4. Ulangi 2-3 untuk kontrol lainnya
  5. Selesai

Kuncinya di sini adalah bahwa kontrol ToolTip adalah kontrol extender , yang berarti bahwa itu akan memperluas set properti untuk kontrol lain pada formulir. Di belakang layar ini dicapai dengan menghasilkan kode seperti dalam jawaban Svetlozar. Ada kontrol lain yang bekerja dengan cara yang sama (seperti HelpProvider).

Fredrik Mörk
sumber
1
Jadi Anda dapat menggunakan Tip Alat yang sama untuk banyak kontrol dengan teks yang berbeda?
Svish
@Vish: ya, itulah tujuan dari kontrol extender.
Fredrik Mörk
Apakah bisa digunakan lintas kontrol dan formulir juga? Seperti jika Anda membuat Tip Alat statis dengan nilai properti standar Anda. Atau apakah itu dianggap praktik buruk?
Svish
Saya tidak pernah mencobanya, dan saya tidak tahu cara kerja ToolTip, tetapi karena ia mendapatkan referensi ke kontrol yang terkait dengan teks saya kira itu bisa berfungsi. Hanya ada satu cara untuk mengetahuinya; Cobalah: o)
Fredrik Mörk
Yah, saya jelas akan mencobanya. Tapi saya tidak terlalu pandai menemukan hal-hal seperti kebocoran memori dan semacamnya ... Dan jika itu akan menyebabkan kebocoran memori atau hal seperti itu yang ingin saya ketahui, hehe.
Svish
8

ToolTip dalam C # sangat mudah untuk ditambahkan ke hampir semua kontrol UI. Anda tidak perlu menambahkan acara MouseHover untuk ini.

Ini adalah cara untuk melakukannya-

  1. Tambahkan objek ToolTip ke formulir Anda. Satu objek sudah cukup untuk seluruh bentuk. ToolTip toolTip = new ToolTip();

  2. Tambahkan kontrol ke tooltip dengan teks yang diinginkan.

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

OopsDev
sumber
1

Saya melakukannya dengan cara ini: Cukup tambahkan acara ke kontrol apa pun, atur tag kontrol, dan tambahkan persyaratan untuk menangani tooltip untuk kontrol / tag yang sesuai.

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);
    }
}
Pondok dr batang kayu
sumber
-3

Cukup berlangganan acara ToolTipTextNeeded kontrol, dan kembalikan e.TooltipText, jauh lebih sederhana.

fredv
sumber
6
Saya tidak berpikir itu adalah acara kontrol WinForm standar.
Dan7