Domanda

Esiste un modo semplice per impostare il testo aggiuntivo da visualizzare in una descrizione comandi quando il mouse di un utente viene tenuto su un elemento in un CheckedListBox?

Quello che mi aspetterei di poter fare nel codice è:

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

Qualcuno può indicarmi la giusta direzione per farlo? Ho già trovato un paio di articoli che prevedono il rilevamento dell'elemento su cui si trova attualmente il mouse e la creazione di una nuova istanza di descrizione comandi, ma questo sembra un po 'troppo inventato per essere il modo migliore.

Grazie in anticipo.

È stato utile?

Soluzione

Aggiungi un oggetto Tooltip al tuo form e quindi aggiungi un gestore eventi per CheckedListBox.MouseHover che chiama un metodo ShowToolTip (); Aggiungi l'evento MouseMove del tuo CheckedListBox che ha il seguente codice:

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

Quindi creare il metodo ShowToolTip:

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

        }
    }

Altri suggerimenti

In alternativa, è possibile utilizzare un ListView con le caselle invece. Questo controllo ha builtin supporto per descrizioni comandi .

Contruso o no; questo è quello che c'è ...

Non sono a conoscenza di un modo più semplice di quanto tu abbia già descritto (anche se probabilmente riutilizzerei un'istanza del tooltip, piuttosto che crearne sempre nuove). Se hai articoli che mostrano questo, quindi usali - o usa un controllo di terze parti che lo supporta in modo nativo (nessuno mi viene in mente).

Vorrei approfondire la risposta di Fermin per rendere forse la sua meravigliosa soluzione leggermente più chiara.

Nel modulo in cui stai lavorando (probabilmente nel file .Designer.cs), devi aggiungere un gestore di eventi MouseMove a CheckedListBox (Fermin inizialmente suggeriva un gestore di eventi MouseHover, ma questo non ha funzionato per me ).

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

Successivamente, aggiungi due attributi di classe al tuo modulo, un oggetto ToolTip e un numero intero per tenere traccia dell'ultima casella di controllo il cui suggerimento è stato mostrato

private ToolTip toolTip1;
private int toolTipIndex;

Infine, è necessario implementare il metodo showCheckBoxToolTip (). Questo metodo è molto simile alla risposta di Fermin, tranne per il fatto che ho combinato il metodo di callback dell'evento con il metodo ShowToolTip (). Si noti inoltre che uno dei parametri del metodo è MouseEventArgs. Questo perché l'attributo MouseMove richiede MouseEventHandler, che fornisce quindi MouseEventArgs.

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

Esegui i tuoi ListItems nell'elenco di elementi della casella di controllo e imposta il testo appropriato come attributo 'titolo' dell'elemento, che verrà visualizzato al passaggio del mouse ...

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!!!";
                    }
                }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top