Frage

Gibt es eine Möglichkeit, um zusätzlichen straighforward Text zu setzen in einem Tooltip angezeigt werden, wenn eine Maus des Benutzers über ein Element in einer CheckedListBox gehalten wird?

Was würde ich erwartet in der Lage sein in Code zu tun ist:

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

Kann mir jemand in die richtige Richtung weisen, dies zu tun? Ich habe festgestellt, schon ein paar Artikel, die Erfassungs betreffen, die Gegenstand der Maus zur Zeit vorbei ist und eine neue Tooltip-Instanz erstellen, aber das klingt ein wenig zu gekünstelt der beste Weg zu sein.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

ein Tooltip-Objekt zu Ihrem Formular hinzufügen und dann einen Event-Handler für die CheckedListBox.MouseHover hinzufügen, die eine Methode showtooltip () aufrufen; In Mousemove-Ereignis des CheckedListBox, die den folgenden Code hat:

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

Dann die showtooltip Methode erstellen:

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

        }
    }

Andere Tipps

Alternativ können Sie ein ListView mit Kontrollkästchen statt. Diese Steuerung hat builtin Unterstützung für Tooltips .

gekünstelt oder nicht; das ist, was es ist ...

Ich bin mir nicht bewusst, einen einfacheren Weg, als Sie bereits beschrieben haben (obwohl ich wahrscheinlich ein Tooltip-Instanz verwenden erneut würde, anstatt die Schaffung neuer ganze Zeit). Wenn Sie Artikel, die dies zeigen, dann sie verwendet -. Oder eine 3rd-Party-Steuerung verwenden, der diese nativ (keinen Sprung in dem Sinne) unterstützt

Ich mag auf Fermin Antwort erweitern, um zu vielleicht seine wunderbare Lösung etwas klarer zu machen.

In der Form, die Sie in (wahrscheinlich in der .Designer.cs Datei) arbeiten, benötigen Sie ein Mousemove-Ereignishandler Ihre CheckedListBox hinzufügen (Fermin vorgeschlagen ursprünglich einen MouseHover Event-Handler, aber nicht für mich arbeiten ).

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

Als nächstes fügen Sie zwei Klasse zu Ihrem Formular-Attributen, ein Quick-Info-Objekt und eine ganze Zahl Spur der letzten Checkbox zu halten Spitze, dessen Werkzeugs wurde gezeigt,

private ToolTip toolTip1;
private int toolTipIndex;

Schließlich müssen Sie die showCheckBoxToolTip () -Methode implementieren. Diese Methode ist sehr ähnlich wie Fermin Antwort, mit der Ausnahme, dass ich das Ereignis Callback-Methode mit dem showtooltip () Methode kombiniert. Beachten Sie auch, dass einer der Verfahrensparameter ist ein MouseEventArgs. Dies liegt daran, das Mouse Attribut einen Mouseeventhandler erfordert, die dann liefert 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());
        }
    }
}

Führen Sie durch Ihre Listitem in Ihrem Kontrollkästchen Liste der Elemente und stellen Sie den entsprechenden Text als Artikel ‚title‘ Attribut, und es wird angezeigt, auf schweben ...

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!!!";
                    }
                }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top