Как отключить элемент управления ListView in.net 3.5

в .net 3.5 windows forms у меня есть listview с "флажками" = true. Можно ли отключить или отключить некоторые элементы, чтобы пользователь не мог установить флажок?

5 ответов


вы можете использовать ListBoxItem.ForeColor и UseItemStyleForSubItems свойства, чтобы элемент выглядел затемненным. Использовании Системных Цветов.GrayText, чтобы выбрать цвет темы для отключенных элементов. Избегайте отключения выбора, это мешает пользователю использовать клавиатуру. Только отключите проверку флажка. Например:

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

вы должны свернуть свой собственный для этого. Обрабатывать ListView ' s ItemSelectionChanged событие-если вы не хотите, чтобы конкретный элемент выбирался, сделайте следующее:

e.Item.Selected = false;

вы можете сделать определенный элемент появляются невыбираемый на седины его, изменять цвет шрифта и т. д.


Я взял рекомендацию Ханса Пассанта-хороший визуальный подход, который в моем случае обозначает не подлежащие действию предметы. Вот пример:

    '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

используйте это или установите displaymode для просмотра insted редактирования!

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

вы должны установить свойство AutoCheck флажка false.

AutoCheck-получает или задает значение, указывающее, будут ли автоматически изменены значения Checked или CheckState и внешний вид флажка при нажатии флажка.

на самом деле это можно использовать только для управления checkbox.