gpt4 book ai didi

C# ListView 检查是否选中了 ListViewItem

转载 作者:行者123 更新时间:2023-11-30 17:19:22 26 4
gpt4 key购买 nike

我正在创建一个包含 ListViewItems 集合的 ListView ,所有这些都带有复选框。我想检查哪个项目被选中。我知道如何启动 ItemChecked 事件,但每次将 ListViewItem 添加到 ListView 时都会启动该事件。我怎样才能防止这种情况发生?


为了帮助您理解我想要做什么,这里有一些关于该应用程序的信息。

我正在为红十字会调度员构建一个应用程序。这将帮助他们跟踪现场的单位。该应用程序用于记录传输等。当在传输期间有优先传输进入时,当前单元将被设置为保持。这将通过选中属于单元 ListViewItem 的复选框来完成。

通过选中复选框,对象(类型为 Unit)会将属性 objUnit.onHold 设置为 true。当取消选中该复选框时,该属性将再次设置为 false。每 3 分钟,应用程序将循环遍历所有单元,以查看是否有人仍在等待。如果是这样,将弹出一个消息框,提醒调度员该单元处于等待状态。

所以你看,我必须确保调度员确实选中或取消选中了 ListViewItem。

我希望有人能指出我正确的方向。

最佳答案

您可以设置一个标志,指示您正在插入一个项目,如果选中该标志,则忽略该事件。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Forms;

class Form1 : Form
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

ListView listView;
List<Unit> units;
bool insertingItem = false;

public Form1()
{
Controls.Add(listView = new ListView
{
Dock = DockStyle.Fill,
View = View.Details,
CheckBoxes = true,
Columns = { "Name" },
});

Controls.Add(new Button { Text = "Add", Dock = DockStyle.Top });
Controls[1].Click += (s, e) => AddNewItem();

listView.ItemChecked += (s, e) =>
{
Unit unit = e.Item.Tag as Unit;
Debug.Write(String.Format("Item '{0}' checked = {1}", unit.Name, unit.OnHold));
if (insertingItem)
{
Debug.Write(" [Ignored]");
}
else
{
Debug.Write(String.Format(", setting checked = {0}", e.Item.Checked));
unit.OnHold = e.Item.Checked;
}
Debug.WriteLine("");
};

units = new List<Unit> { };
}

Random Rand = new Random();
int NameIndex = 0;
readonly string[] Names = { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten" };
void AddNewItem()
{
if (NameIndex < Names.Length)
{
Unit newUnit = new Unit { Name = Names[NameIndex++], OnHold = Rand.NextDouble() < 0.6 };
units.Add(newUnit);
insertingItem = true;
try
{
listView.Items.Add(new ListViewItem { Text = newUnit.Name, Checked = newUnit.OnHold, Tag = newUnit });
}
finally
{
insertingItem = false;
}
}
}
}

class Unit
{
public string Name { get; set; }
public bool OnHold { get; set; }
}

关于C# ListView 检查是否选中了 ListViewItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978230/

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