无法防止双重输入 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的主要内容,如果未能解决你的问题,请参考以下文章

Apple ID双重认证,验证码无法输入问题

防止 MySQL 双重插入

防止数组中的双重条目[重复]

HTML 防止双重提交

Ajax 和防止双重“提交”

如何防止使用 jQuery 或 Javascript 进行双重提交?