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 будет выглядеть иначе, чем другие, и пользователь может понять, что повторное нажатие кнопки не изменит его!
Алан.