我有一个包含 2 列的列表视图,并且在用户输入和 ip:port 的表单上有一个按钮,然后当他单击按钮时它会将项目添加到列表视图中,非常基本。
我想要做的是:
当用户单击按钮时,我想检查 ip 是否存在于列表视图中,如果存在,然后我想检查与该 ip 关联的端口是否存在于子项中。如果我不想添加该项目,那么我将拥有例如 2 个具有相同 IP 但具有不同端口的项目。
任何帮助将不胜感激,在此先感谢!
我有一个包含 2 列的列表视图,并且在用户输入和 ip:port 的表单上有一个按钮,然后当他单击按钮时它会将项目添加到列表视图中,非常基本。
我想要做的是:
当用户单击按钮时,我想检查 ip 是否存在于列表视图中,如果存在,然后我想检查与该 ip 关联的端口是否存在于子项中。如果我不想添加该项目,那么我将拥有例如 2 个具有相同 IP 但具有不同端口的项目。
任何帮助将不胜感激,在此先感谢!
尝试这个:
void Main()
{
Form form = new Form();
ListView lv = new ListView();
lv.View = View.Details;
lv.Columns.Add(new ColumnHeader() { Name = "ip", Text = "IP Address" });
lv.Columns.Add(new ColumnHeader() { Name = "port", Text = "Port" });
lv.Dock = DockStyle.Fill;
// Tests.
AddItem(lv, "10.0.0.1", String.Empty);
AddItem(lv, "10.0.0.2", String.Empty);
AddItem(lv, "10.0.0.1", "8080");
AddItem(lv, "10.0.0.1", String.Empty);
AddItem(lv, "10.0.0.1", "8080");
form.Controls.Add(lv);
form.ShowDialog();
}
private void AddItem(ListView listView, string ip, string port)
{
var items = listView.Items.Cast<ListViewItem>();
// First subitem starts at index 1.
bool exists = items.Where(item =>
(item.Text == ip && item.SubItems[1].Text == port)).Any();
if (!exists)
{
var item = new ListViewItem(ip);
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, port));
listView.Items.Add(item);
}
else
{
Console.WriteLine("Duplicate: {0}:{1}", ip, port);
}
}
检查在AddItem()
方法中。根据您的要求进行修改。
我将通过使用Dictionary<string, List<string>>
填充列表视图的模型来分离控件和数据。更容易验证和修改。