2011-03-29 34 views

risposta

16

È possibile utilizzare le proprietà ListBoxItem.ForeColor e UseItemStyleForSubItems per rendere l'elemento inattivo. Usa SystemColors.GrayText per scegliere il colore del tema per gli elementi disabilitati. Evita di disabilitare la selezione, impedisce all'utente di utilizzare la tastiera. Disabilita solo il controllo della casella di controllo. Per esempio:

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

Grazie, questo ha funzionato per me, ma ho assegnato e.NewValue a CheckedState.Unchecked perché volevo far sì che sarebbe stato lasciato incontrollato, anche se non era per cominciare. –

-2

È necessario impostare la proprietà AutoCheck della casella di controllo false.

AutoCheck - Ottiene o imposta un valore che indica se i valori Checked o CheckState e l'aspetto del CheckBox vengono automaticamente modificati quando si fa clic su CheckBox.

In realtà questo è utilizzabile solo per il controllo casella di controllo.

2

Devi tirare il tuo per questo. Maneggiare s' il ListViewItemSelectionChanged evento - se non si desidera un particolare articolo per essere selezionabile, fare questo:

e.Item.Selected = false; 

si può fare un particolare elemento appare non selezionabile da brizzolati fuori, cambiando il colore del carattere, ecc

1

ho preso Hans Passant raccomandazione - buon approccio visivo che nel mio caso denota elementi non-azione legale. Ecco un esempio:

'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 questo o impostare il DisplayMode per visualizzare invece di modificare!

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; 
     } 
     } 
    } 
} 
Problemi correlati