Windows Forms kullanarak bir düğmenin üzerinde ipucu görüntüleme


Yanıtlar:


222

Araç İpucu aslında tek bir form üzerinde birden çok öğe için araç ipuçlarını görüntüleyen bir WinForms denetimidir.

Düğmenizin MyButton olduğunu söyle.

  1. Formunuza bir Araç İpucu denetimi (Windows Forms araç kutusundaki Ortak Denetimler altında) ekleyin.
  2. Bir ad verin - MyToolTip deyin
  3. MyButton'un (düğme özellik kılavuzundaki Çeşitli altında) araç çubuğunun üzerine geldiğinizde görüntülenecek metne "Araç İpucu üzerinde Araç İpucu" özelliğini ayarlayın.

Araç ipucu imleç düğmenin üzerine geldiğinde otomatik olarak görünür, ancak programlı olarak görüntülemeniz gerekiyorsa

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

araç ipucunu göstermek için kodunuzda ve tekrar kaybolmak için MyToolTip.Hide (MyButton) 'u tıklayın.


güzel, ama bir soru: bir formda birden fazla düğme varsa, daha fazla araç ipucu gerekir veya aynı araç ipucu için birden fazla açıklama ve düğmeler ayarlayabilir miyim?
ghiboz

8
Formunuzun yalnızca tek bir Araç İpucu denetimine ihtiyacı vardır - her düğmenin farklı yardım metni olabilir (bu nedenle "MyToolTip üzerindeki Araç İpucu", Araç İpucu denetiminin kendisinin değil, ilişkili denetimin bir özelliğidir)
Dylan Beattie

2
En basit durumda, araç ipucunu Forma eklemek en iyi şeydir. Sorun: Özel bir Kontrolün tasarım zamanında üst Form'a referansınız yok. Çözüm: Denetim'de bir araç ipucu nesnesi oluşturun. ToolTip nesnesini mutlaka forma eklenmiş olarak düşünmeyin.
Stéphane Gourichon

93

Form tasarımcısını kullanma:

  • Araç İpucu denetimini araç kutusundan forma sürükleyin.
  • Araç ipucunun görünmesini istediğiniz denetimin özelliklerini seçin.
  • 'ToolTip1 üzerinde ToolTip' özelliğini bulun (varsayılan adını değiştirdiyseniz ad toolTip1 olmayabilir).
  • Özelliğin metnini, görüntülemek istediğiniz araç ipucu metnine ayarlayın.

Araç ipucunu aşağıdaki çağrıyı kullanarak programlı olarak da ayarlayabilirsiniz:

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

45

ToolTip sınıfını kullanabilirsiniz:

Denetim için Araç İpucu Oluşturma

Misal:

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
Bu otomatik olarak üretilen VS kodu ile doğrudan entegre olduğu için mükemmel bir çözümdür. Teşekkürler :)
anon58192932

@DaveK Teşekkürler. Bu şekilde daha iyi çünkü tüm araç ipuçlarını tek bir yerde tanımlayabilirim
fedeteka

Teşekkürler. Bu sorunun en iyi ve en açık cevabı.
Najeeb

Daha da kısa:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf

6

Varsayılan ipucu için bu kullanılabilir -

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

Araç ipucu mesajı için biçimlendirme gerekiyorsa, özelleştirilmiş bir araç ipucu da kullanılabilir. Bu, formun özel biçimlendirilmesi ve denetimin fareyle üzerine gelme olayında araç ipucu iletişim kutusu olarak kullanılmasıyla oluşturulabilir. Daha fazla bilgi için lütfen aşağıdaki bağlantıyı kontrol edin -

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


5

Tag özelliğinde tembel ve kompakt metin saklama

Biraz tembelseniz ve kontrollerin Tag özelliğini başka bir şey için kullanmıyorsanız, araç ipucu metnini saklamak ve MouseHover olay işleyicilerini bu gibi tüm denetimlere tek seferde atamak için kullanabilirsiniz:

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

Bu durumda, Tag özelliğinde bir dizeye sahip tüm düğmelere bir MouseHover olayı atanır . MouseHover olayını kompakt tutmak için bir lambda ifadesi kullanılarak satır içi olarak tanımlanır. Vurgulanan herhangi bir düğmenin Etiket metnine Araç İpucu'na atanmış ve gösterilir.


4

.NET çerçevesi bir ToolTip sınıfı sağlar. Bunlardan birini formunuza ekleyin ve ardından araç ipucu almak istediğiniz her öğe için MouseHover olayında aşağıdakine benzer bir şey yapın:

    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
Bu kod snippet'i soruyu çözebilir, ancak bir açıklama dahil olmak , yayınınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
Secelite

0

DaveK'ın cevabına dayanarak, bir kontrol uzantısı oluşturdum:

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

Ardından, herhangi bir kontrol için ipucunu tek bir satırla ayarlayabilirsiniz:

this.MyButton.SetToolTip("Hello world");

-4

Elbette, mousehover olayını halledin ve bir araç ipucu görüntülemesini söyleyin. t, globallerde veya kurucuda aşağıdakileri kullanan bir araç ipucudur:

ToolTip t = new ToolTip();

sonra olay işleyici:

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

2
Windows Forms'da Araç İpucu denetimlerini kullanmanın yolu olmadığı için oy kullandığınızı düşünüyorum. Formda sadece böyle bir kontrole ihtiyacınız vardır ve tüm kontroller için ipuçları gösterir. Diğer yanıtlardaki koda bakın.
Julian Melville

1
Ben açıklama açıklama kodu uymuyor sanırım, açıklamada bunu göstermek dedi ve kodda ben de başlattım. Benim hatam. : P
Fry

2
@ julianz Aslında, bu duruma bağlı olarak dinamik olabilen özel araç ipuçlarına sahip olmak için iyi çalışır (elbette eksi oluşturma - beni affet, sadece bir bloğa sığdırmaya çalışıyordum.) Benzer damar ... yshuditelu ve Dylan Beattie, örnekleme olmadan da benzerdi.
Fry
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.