2009-04-29 12 views
11

Bir kullanıcının fare bir CheckedListBox'ta bir öğe üzerinde tutulduğunda bir araç ipucu içinde görünecek ek metin ayarlamak için çok uzun bir yol var mı? Ben kodunda yapabilmek için beklediğiniz neCheckedListBox öğeleri için ipuçları var mı?

geçerli:

uiChkLstTables.DisplayOnHoverMember = "DisplayOnHoverProperty"; //Property contains extended details 

Herkes bunun için doğru yönde işaret edebilir? Zaten farenin hangi öğenin şu anda bittiğini ve yeni bir araç örneği oluşturduğunu belirleyen birkaç makale buldum, ancak bu durumun en iyi yol olduğu için biraz fazla çaba sarf ediyor.

Şimdiden teşekkürler.

cevap

12

Formunuza bir Tooltip nesnesi ekleyin ve sonra CheckedListBox.MouseHover yöntemine çağrı yapan bir olay işleyicisi ekleyin ShowToolTip(); aşağıdaki kodu vardır sizin CheckedListBox MouseMove olayı ekleyin:

//Make ttIndex a global integer variable to store index of item currently showing tooltip. 
//Check if current location is different from item having tooltip, if so call method 
if (ttIndex != checkedListBox1.IndexFromPoint(e.Location)) 
       ShowToolTip(); 

Sonra ShowToolTip yöntemi oluşturun:

private void ShowToolTip() 
    { 
     ttIndex = checkedListBox1.IndexFromPoint(checkedListBox1.PointToClient(MousePosition)); 
     if (ttIndex > -1) 
     { 
      Point p = PointToClient(MousePosition); 
      toolTip1.ToolTipTitle = "Tooltip Title"; 
      toolTip1.SetToolTip(checkedListBox1, checkedListBox1.Items[ttIndex].ToString()); 

     } 
    } 
+1

, ' Pd çizgisi gerekli değil – Maslow

0

Contrived veya not; İşte bu ...

Zaten tanımladığınızdan daha kolay bir yol olduğunun farkında değilim (her zaman yeni bir araç oluşturmak yerine bir araç ipucu örneğini yeniden kullanmam gerekir). Bunu gösteren makaleleriniz varsa, bunları kullanın veya bunları yerel olarak destekleyen bir üçüncü taraf denetimi kullanın (hiçbiri akla).

5

Alternatif olarak, yerine onay kutularıyla ListView kullanabilirsiniz. Bu denetim, araç ipuçları için yerleşik desteğine sahiptir.

+0

Öneri için teşekkürler, bunu görmemişti. –

+0

Rahatsız edici şey, ListView'in veri bağlamayı desteklememesidir (ya da bir şeyi özlüyor muyum?) –

0

Fermin'in cevabını biraz daha açık hale getirebilmek için Fermin'in cevabını genişletmek istiyorum.

Çalışmakta olduğunuz formda (.Designer.cs dosyasında büyük olasılıkla), CheckedListBox'unuza bir MouseMove olay işleyicisi eklemeniz gerekir (Fermin, başlangıçta bir MouseHover olay işleyicisini önerdi, ancak bu iş için işe yaramadı. ben mi).

this.checkedListBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.showCheckBoxToolTip); 

Sonraki iki sınıf araç ipucu Nihayet

private ToolTip toolTip1; 
private int toolTipIndex; 

gösterilen son onay kutusunu izlemek için formunuzda, bir araç ipucu nesne ve tam sayıya niteliklerini eklersek showCheckBoxToolTip uygulamak gerekir() yöntem. Bu yöntem, Fermin'in yanıtına çok benzer, ancak olay geri çağırma yöntemini ShowToolTip() yöntemiyle birleştirdim. Ayrıca, yöntem parametrelerinden birinin bir MouseEventArgs olduğunu fark edin. Bunun nedeni, MouseMove özniteliğinin bir MouseEventHandler gerektirmesi, ardından da MouseEventArgs öğesi olmasıdır.

private void showCheckBoxToolTip(object sender, MouseEventArgs e) 
{ 
    if (toolTipIndex != this.checkedListBox.IndexFromPoint(e.Location)) 
    { 
     toolTipIndex = checkedListBox.IndexFromPoint(checkedListBox.PointToClient(MousePosition)); 
     if (toolTipIndex > -1) 
     { 
      toolTip1.SetToolTip(checkedListBox, checkedListBox.Items[toolTipIndex].ToString()); 
     } 
    } 
} 
0
Öğe onay kutusu listesinde ListItems aracılığıyla

Çalıştır ve kalem 'title' niteliği olarak uygun metni ayarlayabilir ve vurgulu görünecektir ... notun

foreach (ListItem item in checkBoxList.Items) 
       { 
        //Find your item here...maybe a switch statement or 
        //a bunch of if()'s 
        if(item.Value.ToString() == "item 1") 
        { 
         item.Attributes["title"] = "This tooltip will display when I hover over item 1 now, thats it!!!"; 
        } 
        if(item.Value.ToString() == "item 2") 
        { 
         item.Attributes["title"] = "This tooltip will display when I hover over item 2 now, thats it!!!"; 
        } 
       } 
İlgili konular