2011-03-29 10 views

Respuesta

16

Puede usar las propiedades ListBoxItem.ForeColor y UseItemStyleForSubItems para que el elemento se vea atenuado. Use SystemColors.GrayText para elegir el color del tema para los elementos desactivados. Evite deshabilitar la selección, evita que el usuario use el teclado. Solo desactiva la casilla de verificación. Por ejemplo:

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) { 
     // Disable checking odd-numbered items 
     if (e.Index % 2 == 1) e.NewValue = e.CurrentValue; 
    } 
+0

Gracias, esto funcionó para mí, pero asigna a e.NewValue CheckedState.Unchecked porque quería asegurarse de que se deja sin control, incluso si no era para empezar. –

-2

Debe establecer la propiedad AutoCheck de la casilla de verificación en falso.

AutoCheck - Obtiene o establece un valor que indica si los valores comprobados o CheckState y el aspecto del CheckBox se cambian automáticamente cuando se hace clic en el CheckBox.

Actualmente solo se puede usar para el control de casilla de verificación.

2

Tienes que hacer tu propio para esto. Manejar la ListView 's ItemSelectionChanged caso - si usted no quiere un artículo determinado a ser seleccionable, hacer esto:

e.Item.Selected = false; 

Usted puede hacer un artículo en particular parece no seleccionable por canoso hacia fuera, cambiando el color de la fuente, etc.

1

Tomé recomendación Hans Passant - buena aproximación visual que en mi caso denota artículos no-viables. He aquí una muestra:

'Select all attachements in case user wants to mask or pick and choose 
    For i As Integer = 0 To lstView.Items.Count - 1 
     If Not Scan.SupportedMasking.Contains(Path.GetExtension(lstView.Items(i).Text)) Then 
      lstView.Items(i).ForeColor = SystemColors.GrayText 
      lstView.Items(i).Text += " (No masking supported)" 
      lstView.Items(i).BackColor = SystemColors.InactiveBorder 
      lstView.Items(i).Selected = False 
     Else 
      lstView.Items(i).Selected = True 
     End If 
    Next i 
0

uso de este o establecer el DisplayMode para ver insted de edición!

public void SetItemEnabled(ListViewItem item, bool enabled) 
{ 
    if (item != null) 
    { 
     List<ListViewControl> lvControls = this.ListViewControls.FindAll(FindListViewControl(item)); 
     foreach (ListViewControl lvControl in lvControls) 
    { 
     if (lvControl.Control != null) 
     { 
     lvControl.Control.Enabled = enabled; 
     } 
     } 
    } 
} 
Cuestiones relacionadas