2010-01-06 11 views
6

Estoy usando un control ListView con multirrow y fullrow select on. Cuando selecciono varias filas a la vez, algunas de mis filas se verifican mágicamente. Esto sucede cuando se arrastra el mouse y también cuando se selecciona uno, y se hace clic en otro.C# ListView con CheckBoxes, casilla de verificación automática marcada cuando se seleccionan varias filas

Ver imagen tema describiendo aquí: alt text

Lo que en el pomelo que está pasando? ¿Nadie?

+0

Muy buena pregunta! Muy claramente describe el problema. –

Respuesta

6

Por desgracia, hay errores en la clase ListView, este es uno de ellos. El siguiente código es una solución que funcionó para mí.

Editar: Lo sentimos, esto no funciona del todo bien, aunque evita el error que muestra en su pregunta. Esto evita seleccionar múltiples elementos y luego verificarlos haciendo clic en la casilla de verificación.

void SetupListView() 
{ 
    listView.ItemCheck += new ItemCheckEventHandler(listView_ItemCheck); 
    listView.MouseDown += new MouseEventHandler(listView_MouseDown); 
    listView.MouseUp += new MouseEventHandler(listView_MouseUp); 
    listView.MouseLeave += new EventHandler(listView_MouseLeave); 
} 

bool mouseDown = false; 
void listView_MouseLeave(object sender, EventArgs e) 
{ 
    mouseDown = false; 
} 

void listView_MouseUp(object sender, MouseEventArgs e) 
{ 
    mouseDown = false; 
} 

void listView_MouseDown(object sender, MouseEventArgs e) 
{ 
    mouseDown = true; 
} 

void listView_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    if(mouseDown) 
    { 
     e.NewValue = e.CurrentValue; 
    } 
} 
+0

Para permitir el cambio de varios elementos haciendo clic directamente en la casilla de verificación, simplemente cambié el 'mouseDown = true;' a 'mouseDown = e.X> 20;'. Esto funciona para mí ya que CheckBoxes está en el lado izquierdo de la ventana de ListView. – timfoden

0

`s simple pregunta sólo tratar este

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    if (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift) 
    { 
     e.NewValue = e.CurrentValue; 
    } 
} 
Cuestiones relacionadas