Я использую CheckedListBox в моем программном обеспечении C #. Программное обеспечение проверяет и снимает флажки с элементов, а также пользователя с помощью графического интерфейса. Я добавил кнопку, чтобы снять все пункты. Когда пользователь нажимает кнопку, программное обеспечение должно снять все пункты. Иногда, когда я убираю пункты с помощью программного обеспечения после нажатия кнопки, некоторые элементы по-прежнему отображаются в свойстве отмеченных элементов списка. Возможно ли, что CheckedListBox требуется некоторое время для обновления свойства CheckedItems? Или что-то не так с моим Invoke-Usage?
Я обнаружил, что когда я устанавливаю точку останова между снятием отметки и чтением отмеченного элемента, проверенные элементы обновляются должным образом.
//---------------------------------------------
// function to get the checked items
//---------------------------------------------
public List<object> getCheckedItems() {
var returnedItems = new List<object>();
var checkedItems = checkedListBox.CheckedItems;
var iterator = checkedItems.GetEnumerator();
while ( iterator.MoveNext() )
returnedItems.Add( iterator.Current );
return returnedItems;
}
//---------------------------------------------
// function to uncheck an item
//---------------------------------------------
public void uncheckItem( object item ) {
if ( containsItem( item ) ) {
int index = checkedListBox.Items.IndexOf( item );
if ( checkedListBox.InvokeRequired ) {
var uncheckInvoker =
new MethodInvoker( () => checkedListBox.SetItemChecked( index, false ) );
checkedListBox.BeginInvoke( uncheckInvoker );
}
else
checkedListBox.SetItemChecked( index, false );
// the following two line are added for debugging
var items = checkedListBox.CheckedItems; // breakpoint here
Console.WriteLine( "number of checked items = " + items.Count );
}
else
throw new ArgumentException( "Item " + item + " is not available" );
}
//---------------------------------------------
//client code
//---------------------------------------------
var checkedItems = subTestListBox.getCheckedItems();
foreach ( var checkedItem in checkedItems )
subTestListBox.uncheckItem( checkedItem );
Я ожидаю, что свойство checkedItems обновляется сразу после того, как я вызвал функцию SetItemChecked( int, bool )
.