无法防止双重输入 c# listview
Posted
技术标签:
【中文标题】无法防止双重输入 c# listview【英文标题】:Can't prevent double entry c# listview 【发布时间】:2021-11-22 19:38:46 【问题描述】:我正在尝试编写任务管理器。
我的问题是,我在列表视图中添加了进程列表,但是 我找不到不重复输入的方法
这里是代码:
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 的新列表。 但这似乎行不通!
我真的被困住了!
【问题讨论】:
do_job 是从哪里调用的? 每次点击listView1
时,当前进程ID 都会被添加到列表中已经存在的进程ID 中吗?您应该在每次调用listView1_MouseUp()
时清除listView1
;然后可以将processId
设为局部变量,或者更好的是,将其消除并在foreach
循环中填充listView1
。
【参考方案1】:
我看到一些步骤,您将项目添加到列表视图但从不删除任何项目。我建议创建一个仅用于使用当前集合更新列表视图的方法,我建议调用 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();
【讨论】:
以上是关于无法防止双重输入 c# listview的主要内容,如果未能解决你的问题,请参考以下文章