jueves, 23 de agosto de 2007

Como agregar un ToolTip a cada uno de los elementos de un listbox

Cuando utilizamos un ToolTip en Visual Studio, solo puede ser utilizado directamente sobre un control de Windows Forms, por ejemplo un TextBox, una Label, un Button, etc., ya que solo acepta dos parámetros; el control y la cadena de Texto que mostrará.
toolTip1.SetToolTip(listBox1, “Este es mi Tip”);
Sin embargo, si se deseará que el ToolTip cambiará para cada elemento de un ListBox o de un ComboBox, no es tan sencillo ya que no acepta en sus parámetros un evento como SelectedIndex o SelectedValue.

En un “googlazo” me encontre con un algoritmo que mostraba como realizarlo. Ahora solo faltaba tomar la información de una Base de Datos y que el ToolTip cambiará para cada elemento de la lista. Y esto fue lo que sucedió:

1.- Se considera de antemano que se tiene listo todo el formulario completo, de acuerdo a las necesidades. Así mismo una Base de Datos, por ejemplo, un directorio telefónico. Entre esos controles se encuentra un ListBox, el cual fue llenado en su propiedad DataSource una consulta hecha a la Base de Datos. Digamos una lista de nombres, y que se desea mostrar en el ToolTip su telefono.
2.- Una vez tomado de la Caja de Controles un ToolTip, nos dirigimos al evento SelectedIndexChanged del listBox1 y comenzamos a codificar:

private void lst_users_SelectedIndexChanged(object sender, EventArgs e)
{

//Creamos un nuevo DataTable auxiliar y en el almacenamos el DataSource que contenga
//el listBox, convirtiendolo previamente
DataTable dt_aux_u = (DataTable)this.lst_users.DataSource;

//Se prepara una variable de tipo de string que almacenará el texto del ToolTip
string telefono = "";

//En una variable de tipo entero, se almacena el indíce del elemento seleccionado de la
//lista, previamente convirtiendolo a entero
int index = (int)this.lst_users.SelectedIndex;

//Si el indice del elemento seleccionado se encuentra entre el rango de la lista
if (index >= 0 && index < this.lst_users.Items.Count)
{
//La variable telefono almacena del DataTable el valor donde la fila con valor index y la
//columna “telefono” coincida. Esto esta basado en la Base de Datos
telefono = dt_aux_u.Rows[index][“telefono"].ToString();

//Si lo seleccionado no contiene nada
if (telefono =="")
{
//Se prepara un texto especial, para que el ToolTip no se muestre vacio
telefono = "Esta persona no tiene telefono";
}
}
//Al final, establecemos el ToolTip con el control Windows Forms y la Variable
this.toolTip1.SetToolTip(this.lst_users, telefono);
}

3.- Cabe determinar que es necesario tener funcionando primero el acceso a la Base de Datos y el llenado del listBox correctamente, ya que la informacion para llenar el Tooltip lo tomamos del DataSource del control.
Esperando que sea util, así comentarios y sugerencias.
Dr. Omm

1 comentario:

Julius dijo...

magnifico, muy buen artificio para mostrar Tooltips para cada item de un List. Saludos