Member 13765884 Ответов: 3

Отключите один элемент в chekcedlistbox


У меня есть combobox, где, если выбран параметр "option3", элементы 5 в checkedlistbox должны быть отключены (не разрешать пользователю выбирать эти элементы)

Как бы я это сделал?

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (checkedListBox1.GetItemCheckState(5) == CheckState.Checked && (Define.Text != "Option 3"))
    {
            MessageBox.Show("This part does not require this process");

    }

}


Как только пользователь добирается до пункта 17, он вызывает сообщение, однако затем повторяет сообщение для каждого элемента - и проверяет элемент независимо от этого

Что я уже пробовал:

В google не так уж много информации

3 Ответов

Рейтинг:
1

User 7429338

Возможно, наиболее удобным для пользователя вариантом было бы обновить элементы из вашего checkedlistbox, включая или исключая элементы 5, в ответ на checkedListBox1_ItemCheck.


Member 13765884

извините, я не понимаю, что это значит. Не могли бы Вы уточнить пожалуйста

Рейтинг:
1

Maciej Los

Не уверен, что я вас хорошо понимаю, но если вы хотите изменить состояние элемента checked на основе условия: Define.Text != "Option 3", вы можете упростить свой код до:

bool x = !(Define.Text == "Option 3");
checkedListBox1.SetItemChecked(5, x);


Видеть: Списке checkedlistbox.SetItemChecked Method (Int32, Boolean) (System.Окна.Формы)[^]

Похоже, вы очень новичок, поэтому я настоятельно рекомендую вам прочитать это: 8 наиболее распространенных ошибок, которые совершают разработчики C# [^]


Рейтинг:
0

Alan N

Ваш вопрос не ясен, и этот ответ будет предполагать, что вы спросили: "как я могу запретить пользователю изменять checkstate элемента CheckedListBox?".

Это может быть достигнуто с помощью события ItemCheck, которое происходит до состояние проверки изменилось. ItemCheckEventArgs дает индекс элемента, который собирается измениться, текущее checkstate в CurrentValue и текущий checkstate в CurrentValue. предложенный новое checkstate в NewValue. Значение могут быть переданы изменить поведение элемента управления.

Изменения в пункте 5 можно было бы предотвратить следующим образом

private bool lockItem5;

private void CheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) {
  CheckedListBox clbx = (CheckedListBox)sender;
  // The ItemCheck event is raised before the check is changed
  Debug.Print(@"""{0}"" Index:{1} Current:{2} New:{3}", clbx.Items[e.Index], e.Index, e.CurrentValue, e.NewValue);

  if (e.Index == 5 && lockItem5) {
    // Suppress the change by setting NewValue to CurrentValue
    e.NewValue = e.CurrentValue;
    Debug.Print("[{0}] change suppressed", e.Index);
  }
}


Чтобы дать некоторое визуальное указание на то, что элемент был заблокирован, checkstate может быть установлен в CheckState.Неопределенный непосредственно перед тем, как lockItem5 будет установлен в true. Таким образом, пункт 5 будет выглядеть иначе, чем другие, и пользователь может понять, что повторное нажатие кнопки не изменит его!

Алан.