我的ListView的每个项中有多个CheckBox
时间: 2024-01-13 22:05:58 浏览: 148
ListView带CheckBox 你懂的
如果你的ListView的每个项中有多个CheckBox,那么你需要在ItemCheck事件中判断哪个CheckBox发生了改变,从而采取相应的处理措施。
以下是一个示例代码,演示如何在ListView的每个项中添加多个CheckBox,并在用户勾选或取消勾选时触发事件:
```csharp
private void Form1_Load(object sender, EventArgs e)
{
// 添加ListView的列头
listView1.Columns.Add("Name", 100);
listView1.Columns.Add("Math", 50);
listView1.Columns.Add("English", 50);
listView1.Columns.Add("Science", 50);
// 添加ListView的项
ListViewItem item1 = new ListViewItem("Tom");
item1.SubItems.Add("");
item1.SubItems.Add("");
item1.SubItems.Add("");
listView1.Items.Add(item1);
ListViewItem item2 = new ListViewItem("Jerry");
item2.SubItems.Add("");
item2.SubItems.Add("");
item2.SubItems.Add("");
listView1.Items.Add(item2);
// 添加CheckBox控件到每个项中
for (int i = 0; i < listView1.Items.Count; i++)
{
ListViewItem item = listView1.Items[i];
for (int j = 1; j < item.SubItems.Count; j++)
{
CheckBox checkBox = new CheckBox();
checkBox.Size = new Size(15, 15);
checkBox.Checked = false;
listView1.Controls.Add(checkBox);
checkBox.Location = new Point(listView1.Columns[j].Width - 15, item.Position.Y + 2);
checkBox.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
}
}
}
private void checkBox_CheckedChanged(object sender, EventArgs e)
{
CheckBox checkBox = (CheckBox)sender;
ListViewItem item = (ListViewItem)checkBox.Parent;
for (int i = 1; i < item.SubItems.Count; i++)
{
if (checkBox.Location.X == listView1.Columns[i].Width - 15)
{
// 当前CheckBox位于第i列
item.SubItems[i].Text = checkBox.Checked.ToString();
}
}
}
```
在上述代码中,我们首先在ListView的每个项中添加了多个CheckBox,并将它们添加到ListView控件中。然后,我们为每个CheckBox的CheckedChanged事件添加了一个处理程序,以便在用户勾选或取消勾选一个CheckBox时触发相应的事件处理逻辑。在事件处理程序中,我们可以通过sender获取到被点击的CheckBox控件,进而获取该控件所在的项以及该控件所在的列。根据该列的索引,我们可以获取到该项的各个子项的内容,然后修改相应子项的文本内容。
需要注意的是,在添加多个CheckBox时,我们需要通过设置CheckBox的Location属性将它们放置到每个子项的相应位置。在本例中,我们将CheckBox放置在每个子项的右侧,以便用户方便地勾选和取消勾选。
阅读全文