解决 如何在组合框删除不需要的项目

e3xpic

会员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
Heloo是新手,也是编程新手

我想知道
单击button1时如何在组合框中删除不需要的项目

3.png


f或这张照片中的示例,我只想保留列表"good" word only

test - 好
test - very 好
test- ok 好


如果我单击button1,它将是这样

44.png


谢谢您帮忙 :)
 
Solution
谢谢4乌拉圭回合的帮助,我想我已经解决了我的问题。谢谢大家的帮助。



C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
         
         

            StringBuilder sb = new StringBuilder();
            {
                foreach (var item in comboBox1.Items)
                 
                {
                    sb.Append(item.ToString() +...

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
好吧,第一个问题是,其他字符串最初是如何进入组合框的。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,499
地点
悉尼,澳大利亚
编程经验
10+
您是在早上把所有衣服穿上然后脱下不需要的衣服,还是只先穿了想要的衣服?答案很明显,那么为什么要对列表项使用其他方法呢?
 

e3xpic

会员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
首先,组合框中的项目将加载随机单词,但是"good"列表单词将被同时加载,我只想删除其他没有的列表"good" word.

它使用正则表达式
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,499
地点
悉尼,澳大利亚
编程经验
10+
组合框中的项目首先将加载随机单词
好吧,为什么呢?为什么要加载不包含单词的项目"good"如果您知道以后要删除它们?添加不需要的项目有什么意义?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
您不能同时在WinForms中加载内容。 UI是单线程的。某些事情必须先发生。
 

e3xpic

会员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
好吧,为什么呢?为什么要加载不包含单词的项目"good"如果您知道以后要删除它们?添加不需要的项目有什么意义?
该项目将用于轻松执行其他过程

像这样
如果comboBox1.SelectedItem ="test - 好" then

做bla222 ...
 

e3xpic

会员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
我不会加载该项目,但会自动加载该单词之前的过程。我知道很难知道我的过程。对不起
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,499
地点
悉尼,澳大利亚
编程经验
10+
Let's just assume that you have a valid reason for adding items that you don't want and that you do need to remove them. In that case, think about the logic involved here. You have a list of items. You need to test each item and, if it doesn't contain a specific substring, remove it. Have you considered each part and, more importantly, researched each part? They can all be addressed independently. How do you access each item in a list? How do you test whether a string contains a substring? How do you remove an item from a ComboBox? That's three unrelated issues that you should be tackling independently. The main reason that people have trouble solving a problem is that they actually try to solve multiple problems at the same time. Solve one at a time.
 

e3xpic

会员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
我可以改变问题吗

我想知道如何在单击button1时仅将特定项目保留在组合框


该项目已加载自动随机词以输入combobox1,但将包含"-test" word
2.png


或这张照片中的示例,我只想保留列表"-test"单击button1时仅在输出combobox2中包含单词


变成这样


3.png
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,499
地点
悉尼,澳大利亚
编程经验
10+
仍然是同样的问题。这只是一个已更改的实现细节。返回帖子9。那仍然是您需要实现的过程,因此您需要在其中添加一些内容。按照我的解释将问题分解。如我所解释的解决每个部分。问一个关于特定零件的特定问题,是否以及何时遇到我所解释的零件。就目前而言,您实际上只是在说"我想做X,告诉我如何"。我们不是真的为您做您的工作。我们在这里为您提供可以自己完成的工作的帮助,但是,如果您没有尝试过,我们怎么办?或者您知道您做不到?第一部分是遍历控件中的项目,我很难相信如果您尝试这样做将无法做到,如果您没有做到这一点,我只能假设您没有尝试过。如果您不打算尝试,我们几乎没有机会被启发为您这样做。尽自己所能,然后在遇到实际问题时,向我们展示您所做的事情,并说明您遇到的困难。如果这样做,您会发现我们已准备就绪,并愿意为您提供帮助。
 

ConsKa

知名会员
已加入
2020年12月11日
留言内容
85
编程经验
Beginner
如果要测试字符串中存在的特定单词,并且有一个填充ComboBox的列表,则必须检查该列表中该单词的每个项目,并删除不包含该单词的项目。

这将是填充组合框的列表的foreach语句..类似下面的内容,但是您必须进行研究以确保它是准确的,我没有任何声明。

C#:
List<string> comboBoxFiller = new List<string>

foreach (var item in comboBoxFiller)
{
    if (item.Contains("Good") != true )
    {
           comboBoxFiller.Remove(item);
    }
   
}

编辑它是因为我意识到,可以只检查它是否不正确。

请注意,与这里的其他海报不同,我也是一名业余爱好者,并且只是学习而已,上面的内容似乎符合您的想法。

如果您要从列表中删除选定的项目,请使用google"从组合框中删除所选项目"您将找到答案,因为这是一项非常基本的任务。
 
Last edited:

e3xpic

会员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
如果要测试字符串中存在的特定单词,并且有一个填充ComboBox的列表,则必须检查该列表中该单词的每个项目,并删除不包含该单词的项目。

这将是填充组合框的列表的foreach语句..类似下面的内容,但是您必须进行研究以确保它是准确的,我没有任何声明。

C#:
List<string> comboBoxFiller = new List<string>

foreach (var item in comboBoxFiller)
{
    if (item.Contains("Good") != true )
    {
           comboBoxFiller.Remove(item);
    }
  
}

编辑它是因为我意识到,可以只检查它是否不正确。

请注意,与这里的其他海报不同,我也是一名业余爱好者,并且只是学习而已,上面的内容似乎符合您的想法。

如果您要从列表中删除选定的项目,请使用google"从组合框中删除所选项目"您将找到答案,因为这是一项非常基本的任务。
感谢您的建议,我不太了解。
但这是我的尝试代码

C#:
 private void button1_Click(object sender, EventArgs e)
        {




            var removeword = comboBox1.Items.Contains("test");
            if (comboBox1.Items.Contains("test") == true)
                {
               
            }

                else
                {
                comboBox1.Items.Remove(removeword);
            }

但是当我单击button1时,该项目无法删除
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
That is because you are trying to remove a boolean value that doesn't exist inside the combo box. removeword is a boolean that will result in true or false. The combo box items collection will likely not contain a true or false.

仔细阅读文章#9。现在,感觉就像您只是在向屏幕上抛出代码以查看存在哪些问题而没有实际考虑您在做什么。
 

e3xpic

会员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
That is because you are trying to remove a boolean value that doesn't exist inside the combo box. removeword is a boolean that will result in true or false. The combo box items collection will likely not contain a true or false.

仔细阅读文章#9。现在,感觉就像您只是在向屏幕上抛出代码以查看存在哪些问题而没有实际考虑您在做什么。
这是我在combobox1中的价值

测试
测试测试
测试测试
123-测试
ABC-测试
随机文字-测试
 

附件

  • my.png
    my.png
    19.7 KB · 观看次数: 3

ConsKa

知名会员
已加入
2020年12月11日
留言内容
85
编程经验
Beginner
我以为我会尝试解决这个问题,并且foreach循环会失败,因为删除第一个单词后索引会发生变化,并引发异常,而这并不是我真正考虑的。

所以这是可行的...

C#:
public partial class Form1 : Form
    {
        List<string> Filler = new List<string>();

        public Form1()
        {
            InitializeComponent();

            Filler.Add("Test1");
            Filler.Add("Good2");
            Filler.Add("Test3");
            Filler.Add("Good4");
            Filler.Add("Test5");

            comboBox1.DataSource = Filler;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var word = "Good";

            for (int i = 0; i < Filler.Count; i++)
            {
                if(Filler[i].Contains(word))
                {
                    Filler.RemoveAt(i);
                }
            }
            comboBox1.DataSource = null;
            comboBox1.DataSource = Filler;
        }
    }

按下按钮后,组合框仅包含与测试相关的单词。

对于OP,您确实应该仔细阅读另外两个发帖人告诉您的内容....我在很短的时间内从该站点中学到了很多......但我非常仔细地阅读了所讲的内容,然后阅读了更多从这个网站尝试并理解它。

在没有阅读JMC和Skydiver告诉我的内容之前,我无法编写该代码....阅读他们在告诉您的内容。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
Yes, and what happens if you set a breakpoint on your button handler and step through your code? Which lines get executed? 什么 is the value of removeword?
 

ConsKa

知名会员
已加入
2020年12月11日
留言内容
85
编程经验
Beginner
@约翰·H 哦,我知道为什么,这是因为单词的索引仍然会更改.....所以,只要Good旁边的Good位置,您都将跳过下一个,因为您删除了Good 3,这意味着Good 4变为3 ,但您现在已经超过3,因此您将查看4,而此时Good不再存在。

有趣的是,发现了一些新东西...

C#:
        private void button1_Click(object sender, EventArgs e)
        {
            Filler.RemoveAll(Contains);
           
            comboBox1.DataSource = null;
            comboBox1.DataSource = Filler;
        }
        private static bool Contains(String s)
        {
            return s.Contains("Good");
        }
 
Last edited:

ConsKa

知名会员
已加入
2020年12月11日
留言内容
85
编程经验
Beginner
值得注意的是,以上内容区分大小写("Good" not "good")...and it isn't really a solution, as it removes all words with 好.

但这距离我们又近了一步,因为它现在允许您一次性删除列表中的所有单词,这些单词包含某个字符串。

下一步是研究如何反转它,以便删除不包含该单词的所有单词。
 
最佳 底部