Question

Existe-t-il un moyen simple de définir du texte supplémentaire pour qu'il apparaisse dans une info-bulle lorsque la souris d'un utilisateur est maintenue sur un élément d'une CheckedListBox?

Ce que je voudrais m'attendre dans le code est le suivant:

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

Quelqu'un peut-il m'indiquer la bonne direction à suivre? J'ai déjà trouvé quelques articles qui impliquent la détection de l'élément sur lequel la souris est actuellement terminée et la création d'une nouvelle instance d'info-bulle, mais cela semble un peu trop artificiel pour être le meilleur moyen.

Merci d'avance.

Était-ce utile?

La solution

Ajoutez un objet info-bulle à votre formulaire, puis ajoutez un gestionnaire d'événements pour CheckedListBox.MouseHover qui appelle une méthode ShowToolTip (); Ajoutez l'événement MouseMove de votre CheckedListBox qui a le code suivant:

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

Créez ensuite la méthode 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());

        }
    }

Autres conseils

Vous pouvez également utiliser une ListView avec des cases à cocher. Ce contrôle a Prise en charge intégrée de info-bulles .

Contrivé ou non; c'est ce qu'il y a ...

Je ne connais pas de solution plus simple que celle que vous avez décrite précédemment (même si je réutiliserais probablement une instance d'info-bulle plutôt que d'en créer de nouvelles tout le temps). Si vous avez des articles qui le montrent, utilisez-les ou utilisez un contrôle tiers qui le supporte de manière native (ne vous en faites pas).

Je voudrais développer la réponse de Fermin afin de clarifier un peu plus sa merveilleuse solution.

Dans le formulaire dans lequel vous travaillez (probablement dans le fichier .Designer.cs), vous devez ajouter un gestionnaire d'événements MouseMove à votre CheckedListBox (Fermin avait initialement suggéré un gestionnaire d'événements MouseHover, mais cela ne fonctionnait pas pour moi. ).

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

Ensuite, ajoutez deux attributs de classe à votre formulaire, un objet info-bulle et un entier pour assurer le suivi de la dernière case à cocher dont l'info-bulle a été affichée

.
private ToolTip toolTip1;
private int toolTipIndex;

Enfin, vous devez implémenter la méthode showCheckBoxToolTip (). Cette méthode est très similaire à la réponse de Fermin, sauf que j'ai combiné la méthode de rappel d'événement avec la méthode ShowToolTip (). Notez également que l'un des paramètres de la méthode est MouseEventArgs. En effet, l'attribut MouseMove nécessite un MouseEventHandler, qui fournit ensuite 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());
        }
    }
}

Parcourez vos ListItems dans votre liste d’articles à cocher et définissez le texte approprié en tant qu’attribut "title". Ce dernier apparaîtra au survol ...

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!!!";
                    }
                }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top