Forums Últimos mensajes - Powered by IBM
 

ListView circular

20/11/2004 - 12:35 por Alberto | Informe spam
Pretendo que el usuario pueda moverse por los elementos de un listView con
las flechas "arriba" y "abajo" para lo que escribí el siguiente código para
gestionar el evento KeyDown:

if (lst.SelectedIndices.Count > 0)

{

if (lst.SelectedIndices[0] == 0 && e.KeyCode == Keys.Up)

lst.Items[lst.Items.Count-1].Selected = true;

else

if (lst.SelectedIndices[0] == lst.Items.Count - 1 && e.KeyCode ==
Keys.Down)

lst.Items[0].Selected = true;

else

if (e.KeyCode == Keys.Down)

lst.Items[lst.SelectedIndices[0] + 1].Selected = true;

else

if (e.KeyCode == Keys.Up)

lst.Items[lst.SelectedIndices[0] - 1].Selected = true;

}

El problema que tengo es que el código anterior tiene un comportamiento que
no logro entender. Funciona bien, excepto en los siguientes dos casos (es
difícil de explicar, así que intentaré dar los pasos exactos)

1) estamos en el primer elemento, pulsamos flecha arriba dos veces y depués
flecha abajo.

2) estamos en el último elemento, pulsamos flecha abajo dos veces y después
flecha arriba.



Os agradecería muchísimo que me dijéseis que está pasando.
 

Leer las respuestas

#1 Octavio Hernandez
20/11/2004 - 18:51 | Informe spam
Alberto,

¿Cómo se manifiesta ese mal comportamiento? ¿Se lanza una excepción, o
simplemente se mueve a un elemento incorrecto?
Parece OK, aunque yo lo reprogramaría para comprobar primero la tecla:

if (lst.SelectedIndices.Count > 0)
{
if (e.KeyCode == Keys.Up)
if (lst.SelectedIndices[0] == 0)
lst.Items[lst.Items.Count-1].Selected = true;
else
lst.Items[lst.SelectedIndices[0] - 1].Selected = true;
else
if (e.KeyCode == Keys.Down)
if (lst.SelectedIndices[0] == lst.Items.Count - 1)
lst.Items[0].Selected = true;
else
lst.Items[lst.SelectedIndices[0] + 1].Selected = true;
}

Slds,

Octavio

Preguntas similares