gpt4 book ai didi

c# - 一次只检查一个 ListViewItem

转载 作者:太空狗 更新时间:2023-10-30 00:03:14 25 4
gpt4 key购买 nike

我正在使用 Compact Framework 开发一个智能设备项目。

我有一个 ListView,其中包含多个可检查的 ListViewItem:属性 CheckBoxes 为真。我一次只需要检查一个 ListViewItem,所以我订阅了 ItemCheck 事件:

// I need to know the last item checked
private ListViewItem lastItemChecked;

private void listView_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (lastItemChecked != null && lastItemChecked.Checked)
{
/* I need to do the following to prevent infinite recursion:
i.e. subscribe and then unsubscribe the ItemCheck event. */
listView.ItemCheck -= listView_ItemCheck;
lastItemChecked.Checked = false;
listView.ItemCheck += listView_ItemCheck;
}

lastItemChecked = listView.Items[e.Index];
}

是否有更好的方法来防止无限递归和 Stack Overflow

最佳答案

好吧,我认为可能比处理 EventHandler 更好的是检查 lastItemCheck 是否是来自 EventArgs 的当前项目。像这样:

// I need to know the last item checked
private ListViewItem lastItemChecked;

private void listView_ItemCheck(object sender, ItemCheckEventArgs e)
{
// if we have the lastItem set as checked, and it is different
// item than the one that fired the event, uncheck it
if (lastItemChecked != null && lastItemChecked.Checked
&& lastItemChecked != listView.Items[e.Index] )
{
// uncheck the last item and store the new one
lastItemChecked.Checked = false;
}

// store current item
lastItemChecked = listView.Items[e.Index];
}

我想你会同意,重新分配 EventHandlers 比简单地检查存储对象的引用要糟糕一些。

关于c# - 一次只检查一个 ListViewItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com