作者:嘻嘻嘻嘻 | 来源:互联网 | 2023-08-04 14:01
篇首语:本文由编程笔记#小编为大家整理,主要介绍了列表视图Item.Selected = false导致未选中所有复选框相关的知识,希望对你有一定的参考价值。
c#有问题。我有一个带有复选框的列表视图和4个项目。
我希望选中该项目,如果用户选中其复选框,则取消选中用户取消选中其复选框。问题是,当我取消选中一个复选框时,其他人同时取消选中。
如果我将multiselect属性更改为false,复选框应该按原样运行,但我想选择多个项目。
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
foreach(ListViewItem lvi in listView1.Items)
if(lvi.Checked == true)
lvi.Selected = true;
else
lvi.Selected = false;
答案
我有类似的问题。我同步了行选择和复选框。
这是代码:
private void ListView1_ItemChecked(object sender, ItemCheckedEventArgs e)
for (int i = 0; i
listView1.ItemSelectionChanged -= ListView1_ItemSelectionChanged;
listView1.ItemCheck -= ListView1_ItemCheck;
listView1.Items[i].Selected = listView1.Items[i].Checked;
listView1.ItemSelectionChanged += ListView1_ItemSelectionChanged;
listView1.ItemCheck += ListView1_ItemCheck;
private void ListView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
for (int i = 0; i
listView1.ItemChecked -= ListView1_ItemChecked;
listView1.ItemCheck -= ListView1_ItemCheck;
listView1.Items[i].Checked = listView1.Items[i].Selected;
listView1.ItemChecked += ListView1_ItemChecked;
listView1.ItemCheck += ListView1_ItemCheck;
private void ListView1_ItemCheck(object sender, ItemCheckEventArgs e)
if (e.NewValue != CheckState.Unchecked) return;
Point locaPoint = listView1.PointToClient(MousePosition);
ListViewItem prevHoverdItem = listView1.GetItemAt(locaPoint.X, locaPoint.Y);
if (prevHoverdItem == null) return;
if (prevHoverdItem != listView1.Items[e.Index]) e.NewValue = CheckState.Checked;
卸载事件非常重要,以防止循环。 ItemCheck事件是在Checkboxes获得更改时调用的事件以及每个Checkbox的事件。首先,我们检查一个框是否未经检查。我们检查Mouse Cursor下的ListViewItem是否是我们当前所在的Item。如果没有,我们将NewValue更改为选中,因此不会取消选中。这样,只有我们点击的项目才会被取消选中。如果你是Checkbox的几个像素,那么它不起作用,因为这就是Listview中的选择是如何工作的。但是使用该代码,应该很容易理解如何改变它。
PS。:我希望我没有弄乱代码,因为我将其复制出一个包含更多代码的项目,并迅速更改了名称。