c# - 删除列表框项目

标签 c# .net winforms listbox

我处于初学者水平,现在已经尝试了一段时间。我试图借助删除按钮从 ListBox 中删除一个项目。该代码没有给出任何错误,但项目并没有从列表中消失。 这是我挣扎的部分

void taBort()
{
    listboxKontakter.SelectedItems.Remove(listboxKontakter.SelectedItems);
    textboxAnteckningar.Clear();
    textboxGatuadress.Clear();
    textboxNamn.Clear();
    textboxPostnummerOrt.Clear();
    textboxEmail.Clear();
    textboxFödelsedag.Value = DateTime.Now;
}

这是我的全部代码:

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

namespace adressboken
{
    public partial class Form1 : Form
    {

        List<Kontakter> kontaktLista = new List<Kontakter>();
        Kontakter person;
        string path = "kontakter.txt";



        public Form1()
        {
            InitializeComponent();
        }

        private void LäggTill_Click(object sender, EventArgs e)
        {
            person = new Kontakter();
            person.FullständigtNamn = textboxNamn.Text;
            person.Gatuadress = textboxGatuadress.Text;
            person.PostnummerOrt = textboxPostnummerOrt.Text;
            person.Födelsedag = textboxFödelsedag.Value;
            person.Email = textboxEmail.Text;
            person.Anteckningar = textboxAnteckningar.Text;

            kontaktLista.Add(person);

            listboxKontakter.DataSource = null;
            listboxKontakter.DisplayMember = "FullständigtNamn";
            listboxKontakter.DataSource = kontaktLista;

            textboxAnteckningar.Clear();
            textboxGatuadress.Clear();
            textboxNamn.Clear();
            textboxPostnummerOrt.Clear();
            textboxEmail.Clear();
            textboxFödelsedag.Value = DateTime.Now;

            textboxAntal.Text = kontaktLista.Count.ToString();
        }

        private void Rensa_Click(object sender, EventArgs e)
        {
            textboxAnteckningar.Clear();
            textboxGatuadress.Clear();
            textboxNamn.Clear();
            textboxPostnummerOrt.Clear();
            textboxEmail.Clear();
            textboxFödelsedag.Value = DateTime.Now;
        }
        void taBort()
        {

            textboxAnteckningar.Clear();
            textboxGatuadress.Clear();
            textboxNamn.Clear();
            textboxPostnummerOrt.Clear();
            textboxEmail.Clear();
            textboxFödelsedag.Value = DateTime.Now;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            kontaktLista = new List<Kontakter>();
            string line = "";
            StreamReader sr = new StreamReader(path);
            while ((line = sr.ReadLine()) != null)
            {
                string[] listarray = line.Split(',');
                person = new Kontakter();
                person.FullständigtNamn = listarray[0];
                person.Gatuadress = listarray[1];
                person.PostnummerOrt = listarray[2];
                person.Email = listarray[3];
                person.Födelsedag = Convert.ToDateTime(listarray[4]);
                person.Anteckningar = listarray[5];
                kontaktLista.Add(person);
            }
            sr.Close();
            listboxKontakter.DataSource = kontaktLista;
            listboxKontakter.DisplayMember = "FullständigtNamn";
        }

        public void listboxKontakter_Click(object sender, EventArgs e)
        {
            person = (Kontakter)listboxKontakter.SelectedItem;
            textboxNamn.Text = person.FullständigtNamn;
            textboxGatuadress.Text = person.Gatuadress;
            textboxPostnummerOrt.Text = person.PostnummerOrt;
            textboxEmail.Text = person.Email;
            textboxFödelsedag.Value = person.Födelsedag;
            var selectedindex = listboxKontakter.SelectedItems;
        }

        private void Spara_Click(object sender, EventArgs e)
        {
            StreamWriter sw = new StreamWriter(path);
            foreach (Kontakter k in kontaktLista)
            {
                sw.WriteLine(k.FullInfo);
            }
            sw.Close();
        }

        private void taBortToolStripMenuItem_Click(object sender, EventArgs e)
        {
            taBort();
        }

        private void TaBort_Click(object sender, EventArgs e)
        {
            taBort();
        }


    }


}

最佳答案

您的代码似乎删除了所有选定的项目,并且不刷新。

怎么样:

listboxKontakter.SelectedItems.Remove(listboxKontakter.SelectedItem);
listboxKontakter.Refresh();

您只删除单个选定的项目,然后刷新您的列表框。

如果你想删除所有项尝试:

listboxKontakter.Items.Clear();

如果您使用 DataSource 尝试:

listboxKontakter.DataSource = null;

如果所有其他方法都失败了,您可以遍历集合并 RemoveAt:

for(int i=listboxKontakter.Items.Count; i > -1; i--) {
{
    listboxKontakter.Items.RemoveAt(i);
}

基于一些聊天,这应该适合你:

void taBort()
{
    var newList = (List<Kontakter>)listboxKontakter.DataSource;
    var ds = newList.Where(k => k.FullständigtNamn != ((Kontakter)listboxKontakter.SelectedItem).FullständigtNamn).ToList();
    listboxKontakter.DataSource = ds;
    listboxKontakter.DisplayMember = "FullständigtNamn";
    textboxAnteckningar.Clear();
    textboxGatuadress.Clear();
    textboxNamn.Clear();
    textboxPostnummerOrt.Clear();
    textboxEmail.Clear();
    textboxFödelsedag.Value = DateTime.Now;
}

如果您想一次删除多个项目,请尝试:

var ds = newList.Where(k => !listboxKontakter.SelectedItems.Contains(k.FullständigtNamn)).ToList();

关于c# - 删除列表框项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18968885/

相关文章:

c# - 如何使面板以编程方式滚动以显示其自动调整大小图片框

c# - ListView 组标题单击 - 在 Windows 7 中禁用全选

.net - 是否可以在一个文件中包含 win32 和 x64 版本的 native DLL?

c# - 在不阻塞主线程的情况下运行代码

c# - 无法在 C# 应用程序中为我的线程使用多个处理器组

C# 从另一个线程调用 form.show()

c# - 如何隐藏RadioButton控件中的圆圈?

c# - 即使在外部终止时,也使 WPF 应用程序有机会清理其资源

c# - 无法在azure上部署asp.net web api Debug模式

c# - C#-更改组合框项目的索引?