Pregunta

¿Existe una forma sencilla de configurar texto adicional para que aparezca en la información sobre herramientas cuando el mouse de un usuario se coloca sobre un elemento en un CheckedListBox?

Lo que esperaría para poder hacer en código es:

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

¿Puede alguien indicarme la dirección correcta para hacer esto? Ya he encontrado un par de artículos que implican detectar qué elemento del mouse se encuentra actualmente y crear una nueva instancia de información sobre herramientas, pero esto suena un poco demasiado artificial para ser la mejor manera.

Gracias de antemano.

¿Fue útil?

Solución

Agregue un objeto de información sobre herramientas a su formulario y luego agregue un controlador de eventos para CheckedListBox.MouseHover que llame a un método ShowToolTip (); Agregue el evento MouseMove de su CheckedListBox que tiene el siguiente código:

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

Luego cree el método 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());

        }
    }

Otros consejos

Alternativamente, puede usar un ListView con casillas de verificación en su lugar. Este control tiene Compatibilidad con builtin para tooltips .

Entendido o no; eso es lo que hay ...

No conozco una forma más fácil de la que ya ha descrito (aunque probablemente reutilizaría una instancia de información sobre herramientas, en lugar de crear nuevas todo el tiempo). Si tiene artículos que lo muestren, entonces utilícelos, o use un control de terceros que lo admita de forma nativa (no se le ocurra nada).

Me gustaría ampliar la respuesta de Fermin para quizás aclarar un poco su maravillosa solución.

En el formulario en el que está trabajando (probablemente en el archivo .Designer.cs), debe agregar un controlador de eventos MouseMove a su CheckedListBox (Fermin sugirió originalmente un controlador de eventos MouseHover, pero esto no funcionó para mí ).

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

A continuación, agregue dos atributos de clase a su formulario, un objeto ToolTip y un entero para mantener un registro de la última casilla de verificación cuya información sobre herramientas se mostró

private ToolTip toolTip1;
private int toolTipIndex;

Finalmente, necesitas implementar el método showCheckBoxToolTip (). Este método es muy similar a la respuesta de Fermin, excepto que combiné el método de devolución de llamada de evento con el método ShowToolTip (). Además, tenga en cuenta que uno de los parámetros del método es un MouseEventArgs. Esto se debe a que el atributo MouseMove requiere un MouseEventHandler, que luego suministra 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());
        }
    }
}

Ejecute los elementos de la lista en la lista de elementos de su casilla de verificación y configure el texto apropiado como el atributo del 'título' del elemento, y se mostrará al pasar el cursor ...

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!!!";
                    }
                }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top