Tampilkan tooltip di atas tombol menggunakan Formulir Windows

Jawaban:

222

ToolTip sebenarnya adalah kontrol WinForms yang menangani menampilkan tips alat untuk beberapa elemen dalam satu bentuk.

Katakanlah tombol Anda disebut MyButton.

  1. Tambahkan kontrol ToolTip (di bawah Kontrol Umum di kotak formulir Windows Forms) ke formulir Anda.
  2. Beri nama - ucapkan MyToolTip
  3. Setel properti "Tooltip on MyToolTip" dari MyButton (di bawah Misc di kisi properti tombol) ke teks yang akan muncul ketika Anda mengarahkan kursor ke sana.

Tip alat akan secara otomatis muncul ketika kursor melayang di atas tombol, tetapi jika Anda perlu menampilkannya secara terprogram, panggil

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

dalam kode Anda untuk menampilkan tooltip, dan MyToolTip.Sembunyikan (MyButton) untuk membuatnya menghilang lagi.

Dylan Beattie
sumber
bagus, tetapi sebuah pertanyaan: jika saya memiliki lebih dari satu tombol dalam formulir, saya perlu lebih banyak tooltip atau saya dapat mengatur beberapa deskripsi dan tombol untuk tooltip yang sama?
ghiboz
8
Formulir Anda hanya memerlukan kontrol ToolTip tunggal - setiap tombol dapat memiliki teks bantuan yang berbeda (inilah sebabnya "Tooltip di MyToolTip" adalah properti dari kontrol terkait, bukan kontrol ToolTip itu sendiri)
Dylan Beattie
2
Dalam kasus paling sederhana, menambahkan tooltip ke Form adalah hal terbaik untuk dilakukan. Masalah: pada saat desain Kontrol kustom Anda tidak memiliki referensi ke Formulir induk. Solusi: buat objek tooltip di Kontrol. Jangan menganggap objek ToolTip sebagai hal yang terlampir pada Formulir.
Stéphane Gourichon
93

Menggunakan desainer formulir:

  • Seret kontrol ToolTip dari Toolbox, ke formulir.
  • Pilih properti kontrol yang Anda inginkan pada ujung alat muncul.
  • Temukan properti 'ToolTip pada toolTip1' (namanya mungkin bukan toolTip1 jika Anda mengubah nama defaultnya).
  • Setel teks properti ke teks tip alat yang ingin Anda tampilkan.

Anda dapat mengatur juga tip alat secara terprogram menggunakan panggilan berikut:

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

Anda bisa menggunakan kelas ToolTip:

Membuat Tip Alat untuk Kontrol

Contoh:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.Button1, "Hello");
}
DaveK
sumber
1
Ini adalah solusi sempurna karena terintegrasi langsung dengan kode VS yang dihasilkan secara otomatis. Terima kasih :)
anon58192932
@DaveK Terima kasih. Lebih baik dengan cara ini karena saya dapat mendefinisikan semua tooltips di satu tempat
fedeteka
Terima kasih. Jawaban terbaik dan paling langsung untuk pertanyaan ini.
Najeeb
Bahkan lebih pendek:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf
6

Untuk tooltip default ini dapat digunakan -

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

Tooltip yang dikustomisasi juga dapat digunakan jika perlu format untuk pesan tooltip. Ini dapat dibuat dengan memformat kustom formulir dan menggunakannya sebagai dialog tooltip pada acara mouse kontrol hover. Silakan periksa tautan berikut untuk detail lebih lanjut -

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

nvivekgoyal
sumber
5

Malas dan kompak menyimpan teks di properti Tag

Jika Anda agak malas dan tidak menggunakan properti Tag dari kontrol untuk hal lain, Anda dapat menggunakannya untuk menyimpan teks tooltip dan menetapkan pengendali event MouseHover ke semua kontrol seperti itu dalam sekali jalan seperti ini:

    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());
                });
            }
        }
    }

Dalam hal ini semua tombol yang memiliki string di properti Tag ditetapkan sebagai peristiwa MouseHover . Agar tetap kompak, acara MouseHover didefinisikan sebaris menggunakan ekspresi lambda. Jika ada tombol apa pun yang melayang-layang akan memiliki tag teks yang ditetapkan untuk Tooltip dan ditampilkan.

flodis
sumber
4

Kerangka .NET menyediakan kelas ToolTip. Tambahkan salah satu dari itu ke formulir Anda dan kemudian pada acara MouseHover untuk setiap item yang Anda inginkan untuk tooltip, lakukan sesuatu seperti berikut ini:

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }
Timothy Carter
sumber
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");
}
akn
sumber
4
Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
secelite
0

Berdasarkan jawaban DaveK , saya membuat ekstensi kontrol:

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

Kemudian Anda dapat mengatur tooltip untuk kontrol apa pun dengan satu baris:

this.MyButton.SetToolTip("Hello world");
The_Black_Smurf
sumber
-4

Tentu, cukup tangani acara mousehover dan katakan untuk menampilkan tip alat. t adalah tooltip yang didefinisikan dalam global atau dalam konstruktor menggunakan:

ToolTip t = new ToolTip();

maka pengendali acara:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}
Menggoreng
sumber
2
Saya pikir Anda ditolak karena itu bukan cara untuk menggunakan kontrol ToolTip di Formulir Windows. Anda hanya perlu satu kontrol seperti itu pada formulir dan itu menunjukkan tips untuk semua kontrol. Lihat kode di tanggapan lain.
Julian Melville
1
Saya kira penjelasannya tidak sesuai dengan kode, Di mana dalam penjelasan yang saya katakan lakukan menampilkannya dan dalam kode saya menginisialisasi juga. Salahku. : P
Fry
2
@ julianz Sebenarnya, ini bekerja dengan baik karena memiliki tooltips khusus yang bisa dinamis jika Anda ingin bergantung pada keadaan (minus tentu saja kreasi - maafkan saya, saya hanya mencoba memasukkan semuanya ke dalam satu blok.) Adapun tanggapan lain pada nada yang sama ... yshuditelu dan Dylan Beattie serupa meskipun tanpa instantiation.
Fry