首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CheckedListBox更新checkedItems非常慢

CheckedListBox更新checkedItems非常慢
EN

Stack Overflow用户
提问于 2019-05-14 22:21:55
回答 1查看 209关注 0票数 0

我在我的C#软件中使用CheckedListBox。软件通过图形界面检查和取消检查项目以及用户。我添加了一个取消选中所有项目的按钮。当用户按下按钮时,软件应取消选中所有项目。有时,当我在按钮单击后通过软件取消选中项目时,一些项目仍然出现在列表框的checked items属性中。是否可能CheckedListBox需要一些时间来更新CheckedItems属性?或者是我的调用用法有问题?

我发现,当我在取消检查和读取选中项之间设置断点时,选中的项将正确更新。

代码语言:javascript
复制
//---------------------------------------------
// 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 );

我希望在我调用SetItemChecked( int, bool )函数之后立即更新checkedItems属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-14 23:16:57

简化?

代码语言:javascript
复制
private void UncheckAll(CheckedListBox clb)
{
    if (clb.InvokeRequired)
    {
        clb.Invoke((MethodInvoker)delegate {
            UncheckAll(clb);
        });
    }
    else
    {
        for(int i = 0; i < clb.Items.Count; i++)
        {
            if (clb.GetItemChecked(i))
            {
                clb.SetItemChecked(i, false);
            }
        }                
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56132671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档