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.

Preguntas similare

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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida