2009-04-29 17 views
11

¿Existe una manera directa de configurar el texto adicional para que aparezca en una información sobre herramientas cuando el mouse del usuario se mantiene sobre un elemento en un CheckedListBox?Información sobre herramientas para elementos CheckedListBox?

Lo que yo espero para ser capaz de hacer en el código es:

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

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

Gracias de antemano.

Respuesta

12

Agregue un objeto Tooltip a su formulario y luego agregue un controlador de eventos para CheckedListBox.MouseHover que llama a un método ShowToolTip(); Añadir 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(); 

A continuación, 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()); 

     } 
    } 
+1

de nota, el ' Punto p'line no es necesario – Maslow

0

Contrived or not; eso es lo que hay ...

No conozco una manera más fácil de la que ya ha descrito (aunque probablemente volveré a utilizar una instancia de información sobre herramientas, en lugar de crear nuevas todo el tiempo). Si tiene artículos que muestran esto, entonces úselos - o use un control de un tercero que admita esto de forma nativa (ningún salto a la mente).

5

Alternativamente, se puede utilizar un ListView con casillas de verificación en su lugar. Este control tiene integrado compatible con información sobre herramientas.

+0

Gracias por la sugerencia, no había visto eso. –

+0

Lo molesto es que ListView no admite el enlace de datos (¿o me falta algo?) –

0

Me gustaría ampliar la respuesta de Fermin para que tal vez su solución sea algo más clara.

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

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

A continuación, añadir dos atributos de la clase a su forma, un objeto de información sobre herramientas y un entero para realizar un seguimiento de la última casilla cuya punta de la herramienta se muestra

private ToolTip toolTip1; 
private int toolTipIndex; 

Por último, es necesario poner en práctica el showCheckBoxToolTip() método. Este método es muy similar a la respuesta de Fermin, excepto que combiné el método de devolución de eventos con el método ShowToolTip(). Además, observe 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()); 
     } 
    } 
} 
0

Ejecutar a través de sus ListItems en su lista de casilla de verificación de artículos y establecer el texto adecuado como el elemento atributo 'title', y se mostrará en vuelo estacionario ...

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!!!"; 
        } 
       } 
Cuestiones relacionadas