winforms 在添加相同的新条目之前,如何检查列表框中是否已包含相同的条目?

pepwfjgg  于 2022-12-23  发布在  其他
关注(0)|答案(3)|浏览(137)

我尝试过制作一个简单的C# Windows窗体应用程序.NET框架,其中有一个类(string Name,string LastName,string Classroom,string DateDay),其中包含三个文本框条目和一个日期时间选择器条目。所有这些条目都保存到一个列表和一个列表框中。我需要在if语句中添加这些条目,以便检查每个条目,如果我试图放入列表/列表框中的条目已经在列表框中。如果条目重复,它将给予一个消息框错误,如果不重复,它将使用if语句的延续部分添加它。
下面是我尝试进行的重复检查:

private void btnAdding_Click(object sender, EventArgs e)
{
    if (txtName.Text != "" && txtLastName.Text != "" && txtClassroom.Text != "" )
    {
        if (ListBox.Items.Cast<string>().Contains(ListBox.Items.ToString()))
        {
            MessageBox.Show("This entry already exists.", "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        else { 
        List.Add(new Student(txtName.Text, txtLastName.Text, txtClassroom.Text, dateDay.Value.ToString("dd.MM.yyyy")));
        RefreshCheck();
        }
    }
    else
    {
        MessageBox.Show("You didnt fill out all the text boxes.", "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

public void RefreshCheck()
        {
            ListBox.Items.Clear();
            for (int i = 0; i < seznam.Count(); i++)
            {
                ListBox.Items.Add(List[i].StudentAdd());
                this.txtName.Clear();
                this.txtLastName.Clear();
                this.txtClassroom.Clear();
                this.dateDay.Value = DateTime.Today;
                this.tabStudent.SelectedTab = this.tabCheck;
            }
        }

下面是我的原始代码,没有重复检查(只有if语句):

private void btnAdding_Click(object sender, EventArgs e)
{
    if (txtName.Text != "" && txtLastName.Text != "" && txtClassroom.Text != "" )
    {
        List.Add(new Student(txtName.Text, txtLastName.Text, txtClassroom.Text, dateDay.Value.ToString("dd.MM.yyyy")));
        RefreshCheck();
    }
    else
    {
        MessageBox.Show("You didnt fill out all the text boxes.", "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

public void RefreshCheck()
        {
            ListBox.Items.Clear();
            for (int i = 0; i < List.Count(); i++)
            {
                ListBox.Items.Add(List[i].StudentAdd());
                this.txtName.Clear();
                this.txtLastName.Clear();
                this.txtClassroom.Clear();
                this.dateDay.Value = DateTime.Today;
                this.tabStudent.SelectedTab = this.tabCheck;
            }
        }

我不知道如何设置for each循环来检查列表框/列表条目。如果你知道怎么做,请帮助我。
下面是我如何添加到列表框中的代码:

List.Add(new Student(txtName.Text, txtLastName.Text, txtClassroom.Text, dateDay.Value.ToString("dd.MM.yyyy")));

以下是该类返回添加到列表框中的值的方式:

public string StudentAdd()
    {
        return $"{this.Name} {this.LastName} | {this.Clasroom} | {this.DateOfLeave}";
    }

编辑:更改了OsveziPregledDijaka()-〉刷新检查,将刷新检查函数添加到代码中。

eqqqjvef

eqqqjvef1#

可以使用LINQ表达式查看该项是否存在。

if(ListBox.Items.Any(i=>i.Name == txtName.Text && i.LastName == txtLastName.Text && i.ClassRoom == txtClassRoom.Text)
{
   //Show MessageBox
}
vjhs03f7

vjhs03f72#

可以重写Student类中的Equals运算符,然后使用Contains方法检查列表。

public override bool Equals(object obj)
{
    if (obj == null || !(obj is Student student))
    {
        return false;
    }
    return Name == student.Name && LastName == student.LastName && Classroom == student.Classroom && DateDay == student.DateDay;
}

然后检查项目:

if (!ListBox.Items.Contains(student))
{
    ListBox.Items.Add(student);
}
else
{
    MessageBox.Show("You didnt fill out all the text boxes.", "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
hgncfbus

hgncfbus3#

你需要搜索列表框显示的字符串,但是上面的代码使用了ListBox.Items.ToString(),这将只是ListBox类名,而不是ListBox显示的单个字符串。
因此,假设您的列表框使用名、姓和教室显示有关学生的信息,您需要构建一个类似于items集合所显示的字符串

string searchFor = $"{txtName.Text} {txtLastName.Text} {txtClassRoom.Text}";

并使用该字符串搜索items集合(无需调用Cast())

if (boxListBox.Items.Contains(searchFor))
    ....
 else
    ....

这里重写了完整的事件单击处理程序

private void btnAdding_Click(object sender, EventArgs e)
{
    if (txtName.Text != "" && txtLastName.Text != "" && txtClassroom.Text != "" )
    {
        string searchFor = $"{txtName.Text} {txtLastName.Text} {txtClassRoom.Text}";
        if (boxListBox.Items.Contains(searchFor))
        {
            MessageBox.Show("This entry already exists.", "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        else 
        { 
            List.Add(new Student(txtName.Text, txtLastName.Text, txtClassroom.Text, dateDay.Value.ToString("dd.MM.yyyy")));
            RefreshCheck();
        }
    }
    else
    {
        MessageBox.Show("You didnt fill out all the text boxes.", "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

相关问题