解决  如何在福彩12选5走势图框删除不需要的项目

e3xpic

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

我想知道
单击button1时如何在福彩12选5走势图框中删除不需要的项目

3.png


例如在这张照片中,我只想保留清单"good" word only

测试-好
测试-很好
测试还可以


如果我单击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() +...

ConsKa

知名会员
已加入
2020年12月11日
留言内容
92
编程经验
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日
留言内容
92
编程经验
Beginner
值得注意的是,以上内容区分大小写("Good" not "good")...这并不是真正的解决方案,因为它将Good删除所有单词。

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

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

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
并且请注意,它也不能区分单词和复合单词。所以这个词"goodbye" and "hardgoods"也有可能被发现。
 

ConsKa

知名会员
已加入
2020年12月11日
留言内容
92
编程经验
Beginner
并且请注意,它也不能区分单词和复合单词。所以这个词"goodbye" and "hardgoods"也有可能被发现。

老实说,我不确定他到底想要什么,我只是想看看我是否可以写一些东西来删除包含一个单词的列表中的所有内容,这对于了解从索引中删除时的索引问题很有用。列表-以及如何更改索引。

这对我将来的项目可能很有用。
 

e3xpic

成员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
谢谢大家,终于我得到了我想要的
但是代码不是很好,因为我尝试并错误地结合了多代码,checkedListBox,文本框,
在此代码中,我使用正则表达式




2.png



单击button1之后

3.png


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 WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (object item in comboBox1.Items)
            {
                checkedListBox1.Items.Add(item);
            }

            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                checkedListBox1.SetItemChecked(i, true);
            }

            StringBuilder sb = new StringBuilder();

            foreach (object checkedItem in checkedListBox1.CheckedItems)
            {
                {
                    sb.Append(checkedItem.ToString() + Environment.NewLine);
                }

                textBox1.Text = sb.ToString();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            comboBox2.Items.Clear();

       
            var regex = new Regex(@"[\n].*- test");

            var vv = textBox1.Text;
            MatchCollection matches = regex.Matches(vv);
            foreach (Match match in matches)
            {

                comboBox2.Items.Add(match);
            }
        }
    }
}


如果您全都帮忙解决它,我非常感谢。再次感谢。
对不起,您的小姐明白我的错。
 

ConsKa

知名会员
已加入
2020年12月11日
留言内容
92
编程经验
Beginner
了解您实际要删除的数据类型以及其来源将很有用。

我在下面提供的代码实际上删除了"- test"在单个按钮中单击一个福彩12选5走势图框。

但是,如果要删除的实际数据变化更大,则代码可能需要与上面编写的代码一样复杂。

代码:

C#:
List<string> myList = new List<string>();
        public Form1()
        {
            InitializeComponent();

            myList.Add("testing");
            myList.Add("testing");
            myList.Add("test-testing");
            myList.Add("test-test test");
            myList.Add("123 - test");
            myList.Add("ABC - test");
            myList.Add("random text - test");

            comboBox1.DataSource = myList;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            myList.RemoveAll(Contains);

            comboBox1.DataSource = null;
            comboBox1.DataSource = myList;
        }
        private static bool Contains(String s)
        {
                return !s.Contains("- test");
        }

结果:

启动福彩12选5走势图框:

列出Full.jpg


按下按钮后:

清单Cut.jpg
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
@ e3xpic :您说过您想从福彩12选5走势图框中删除项目,但是在您发布的文章#25中,您实际上是从文本框中删除项目。

使用UI进行数据存储确实不是一个好主意。
 

e3xpic

成员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
了解您实际要删除的数据类型以及其来源将很有用。

我在下面提供的代码实际上删除了"- test"在单个按钮中单击一个福彩12选5走势图框。

但是,如果要删除的实际数据变化更大,则代码可能需要与上面编写的代码一样复杂。
如果您问我数据来自哪里,对不起,我无法告诉您更多信息,但是数据将来自随机名称,但是"- test "会一起放入combobox1.not我们或我通过手动添加,如您的代码(myList.Add("testing") ;) .
现在的问题是我找不到直接从combobox1中删除项目的代码,这就是为什么我将数据传输到textbox1的原因,因为文本框很容易删除该数据。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
现在的问题是我找不到直接从combobox1删除项目的代码
问题就在这里。您正在尝试"find"代码,而不是自己为之迷惑并尝试"write" code.
 

e3xpic

成员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
我的更新代码我添加新的正则表达式代码

= var regex =新的Regex(@"[\n].*- test");


= var regex =新的Regex(@"(.*?- test*)");

支持很多文字




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 WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (object item in comboBox1.Items)
            {
                checkedListBox1.Items.Add(item);
            }

            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                checkedListBox1.SetItemChecked(i, true);
            }

            StringBuilder sb = new StringBuilder();

            foreach (object checkedItem in checkedListBox1.CheckedItems)
            {
                {
                    sb.Append(checkedItem.ToString() + Environment.NewLine);
                }

                textBox1.Text = sb.ToString();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            comboBox2.Items.Clear();

     
            var regex = new Regex(@"(.*?- test*)");

            var vv = textBox1.Text;
            MatchCollection matches = regex.Matches(vv);
            foreach (Match match in matches)
            {

                comboBox2.Items.Add(match);
            }
        }
    }
}
 
Last edited:

ConsKa

知名会员
已加入
2020年12月11日
留言内容
92
编程经验
Beginner
我的更新代码我添加新的正则表达式代码

= var regex =新的Regex(@"[\n].*- test");


= var regex =新的Regex(@"(.*?- test*)");

支持很多文字
我同意跳伞运动员的观点,即1,通过创建文本框和福彩12选5走势图框将数据存储在UI中是个坏主意,而2,这并不是必须的。

从上面获取代码:

C#:
public void button1_Click(object sender, EventArgs e)
        {
            comboBox1.DataSource = null;

            var regex = new Regex(@"(.*?- test.*)");
          
            StringBuilder sb = new StringBuilder();
            foreach (string item in myList)
            {
                sb.Append(item + Environment.NewLine);
            }
            string tested = sb.ToString();
            MatchCollection matches = regex.Matches(tested);
            foreach (Match match in matches)
            {
                comboBox1.Items.Add(match);
            }
        }

在单个福彩12选5走势图框中执行相同的操作。
 

ConsKa

知名会员
已加入
2020年12月11日
留言内容
92
编程经验
Beginner
另外,让您了解。

当我问数据来自ComboBox1的来源时,我不是说工作,上学等。我的意思是:

1.文本文件;
2.清单;
3. SQL数据库;
4. Excel文件;
5.数据表;

目前,我的答案是基于列表填充的福彩12选5走势图框...。但不知道您如何填充福彩12选5走势图框,很难说该答案是否正确。
 

ConsKa

知名会员
已加入
2020年12月11日
留言内容
92
编程经验
Beginner
我只是重新阅读了该线程,尽管尝试新代码很有趣,但我认为您早早就错过了建议 @jmcilhinney

查看您的申请步骤:

1.您收到数据。
2.您将数据放入福彩12选5走势图框。

您这样做,它不会神奇地出现在福彩12选5走势图框中,而是将其放在福彩12选5走势图框中。

为什么没有3个步骤?

1.您收到数据。
2.您删除不需要的项目。
3.您将数据放入福彩12选5走势图框。

然后,您有一个仅包含所需数据的福彩12选5走势图框。
 

e3xpic

成员
已加入
2020年12月30日
留言内容
11
编程经验
Beginner
谢谢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() + Environment.NewLine);
                }
     
                var regex = new Regex(@"(.*?- test*)");
                string tested = sb.ToString();
                MatchCollection matches = regex.Matches(tested);
                foreach (Match match in matches)
                {


                    comboBox2.Items.Add(match);



                }

            }
        }


    }
    }

但是如果我使用单个福彩12选5走势图框
会变成这样


Untitled.png
 
解决方案

ConsKa

知名会员
已加入
2020年12月11日
留言内容
92
编程经验
Beginner
我知道英语不是您的母语,但是无论如何您似乎都不会阅读所写内容或对所写内容进行回复时,英语确实很难为您提供帮助。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
我再也无法绕过这个线程了。不需要该StringBuilder。不需要第二个福彩12选5走势图框。您可以直接过滤项目。请参见下面的代码:

C#:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace SimpleWinForms
{
    class TestForm : Form
    {
        public TestForm()
        {
            var flow = new FlowLayoutPanel()
            {
                FlowDirection = FlowDirection.TopDown,
                Dock = DockStyle.Fill,
                AutoSize = true,
            };

            SuspendLayout();
            flow.SuspendLayout();
            Controls.Add(flow);

            var comboBox = new ComboBox() { Width = 200 };
            flow.Controls.Add(comboBox);

            var btnPopulate = new Button() { Text = "Populate" };
            btnPopulate.Click += (o, e) => PopulateComboBox(comboBox);
            flow.Controls.Add(btnPopulate);

            var btnClean = new Button() { Text = "Clean" };
            btnClean.Click += (o, e) => CleanComboBox(comboBox);
            flow.Controls.Add(btnClean);

            flow.ResumeLayout(false);
            ResumeLayout(false);
        }

        Random _random = new Random();
        string[] _adjectives = { "large", "small", "glorious", "heavy", "light", "cursed" };
        string[] _colors = { "red", "orange", "yellow", "green", "blue", "indigo", "violet" };
        string[] _weapons = { "wand", "bow", "sword", "mace", "dagger", "hammer" };

        string GenerateRandomObject()
        {
            var adjective = _adjectives[_random.Next(_adjectives.Length)];
            var color = _colors[_random.Next(_colors.Length)];
            var weapon = _weapons[_random.Next(_weapons.Length)];

            return $"{adjective} {color} {weapon}";
        }

        string GenerateRandomTesSuffix()
            => _random.Next(100) > 50 ? " - test" : "";

        void PopulateComboBox(ComboBox cmb)
        {
            var count = _random.Next(10, 20);
            for (int i = 0; i < count; i++)
                cmb.Items.Add(GenerateRandomObject() + GenerateRandomTesSuffix());
        }

        bool AcceptItem(object item)
            => !item.ToString().EndsWith(" - test");

        List<object> GetItemsToRemove(ComboBox cmb)
        {
            var itemsToRemove = new List<object>();
            foreach(var item in cmb.Items)
            {
                if (!AcceptItem(item))
                    itemsToRemove.Add(item);
            }
            return itemsToRemove;
        }

        void CleanComboBox(ComboBox cmb)
        {
            foreach (var item in GetItemsToRemove(cmb))
                cmb.Items.Remove(item);
        }

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new TestForm());
        }
    }
}

GetItemsToRemove() returns a list of objects that should be removed from the combobox. What it does is iterate over the combobox items and calls 接受 Item() 到 determine whether to keep the item or not. In my particular implementation, 接受 Item() gets the string representation of the combobox item in question and checks to see if it ends with " - test". If it does, then it does not consider it acceptable. CleanComboBox() just takes the results of GetItemsToRemove()和removes them from the combo box items collection.

Obviously, the implementation of 接受 Item() can be as simple or as sophisticated as you want it to be. It could be a regular expression. It could be a switch statement. It could be a really long complicated call that passes the object into some AI for acceptance or rejection.

无论如何,这使我们回到了OP在他最初的帖子中想要的:福彩12选5走势图框中的数据被过滤到他可接受的值。
 
最佳 底部