2011-06-17 12 views

Respuesta

4

Puede manejar los eventos MouseLeftButtonDown y KeyDown para ListBox. Para el evento KeyDown, deberá verificar el EventArgs para determinar si se presionó la tecla Intro (en lugar de cualquier otra tecla).

Estos eventos pueden activarse incluso cuando un elemento no está seleccionado (por ejemplo, si el usuario hace clic dentro del ListBox pero no sobre un elemento real), por lo que debe controlarlo en sus controladores de eventos.

Sus manejadores de eventos podrían ser algo como esto:

public void MyListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    ItemSelected(); 
} 

public void MyListBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if ((e.Key & Key.Enter) == Key.Enter) 
    { 
     ItemSelected(); 
    } 
} 

public void ItemSelected() 
{ 
    if (MyListBox.SelectedItem != null) 
    { 
     // Handle item selection here 
    } 
} 

Estos son la parte superior de la cabeza, por lo que puede que tenga que modificar estos ligeramente para llegar a trabajar exactamente a la derecha. Espero que veas la idea general sin embargo.


Otra manera de hacerlo sería eliminar simplemente el manejador de eventos SelectionChanged al rellenar el ListBox con los objetos (utilice el "-=" sintaxis), a continuación, volver a colocar una vez finalizada esta operación.

Recomendaría hacerlo de esta forma (ya que le preocupa el hecho de que se active el evento cuando se completa la lista). No evitará que los usuarios seleccionen elementos con las teclas de flecha hacia arriba y hacia abajo, pero a menos que tenga una buena razón para hacerlo, no le hará ningún inconveniente innecesario (los usuarios no quieren que se les restrinja arbitrariamente hacer cosas que debería funcionar).

Cuestiones relacionadas