首页 > 解决方案 > 无法防止双重输入 c# listview

问题描述

我正在尝试编写任务管理器。

在这里我的问题是我在列表视图中添加了进程列表,但我找不到没有相同双重输入的方法

这里的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Process_Manager
{
    public partial class Form1 : Form
    {
        List<int> processId = new List<int>();
        int first_time = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void do_job(List<int> test,int id)
        {
            for(int i = 0; i < test.Count; i++)
            {
                if(!listView1.Items.ContainsKey(Convert.ToString(id)))
                {
                    ListViewItem t = new ListViewItem(Convert.ToString(id));
                    listView1.Items.Add(t);
                }
            }
        }

        private void listView1_MouseUp(object sender, MouseEventArgs e)
        {
            Process[] process = Process.GetProcesses();

            foreach (Process t in process)
            {
                processId.Add(t.Id);
            }
            for(int i = 0; i < processId.Count; i++)
            {
                ListViewItem listviewitemprocess = new ListViewItem(Convert.ToString(processId[i]));
                listView1.Items.Add(listviewitemprocess);
            }
            processId.Clear();
        }
    }
}

我尝试使用列表,将数据添加到列表中,然后清除列表以获得没有 doublon 的新列表。但这似乎行不通!

我真的被困住了!

标签: c#.netwinformslistviewduplicates

解决方案


我看到一些步骤,您将项目添加到列表视图但从不删除任何项目。我建议创建一个仅用于使用当前集合更新列表视图的方法,我建议调用 listView1.Items.Clear(); 在添加集合之前。

可能是这样的:

using System.Linq;

private void UpdateListView()
{ 
    var newListViewItems =
        Process.GetProcesses().
            Select(p => new ListViewItem(p.Id.ToString())).
            ToArray();
    listView1.BeginUpdate();
    try
    {
        listView1.Items.Clear();
        listView1.Items.AddRange(newListViewItems);
    }
    finally
    {
        listView1.EndUpdate();
    }
}


推荐阅读