首页 新闻 搜索 专区 学院

C#listbox问题

0
悬赏园豆:50 [已解决问题] 解决于 2021-12-07 09:42

现在有一个 Listbox 有一个集合List

list集合的值部分存在Listbox 然后 更改下状态

主要是 只要能 把list集合的值 判断存在ListBox 显示就好了

例如 listbox List集合 1,2,3,9
1
2
3
4
5

最后显示 1,2,3,4,5 但是里面的123 是List的123

麻烦了

C#
91One的主页 91One | 初学一级 | 园豆:12
提问于:2021-12-06 17:37
< >
分享
最佳答案
0

能不能描述明白点,最好给个代码和演示截图,我不清楚你的准确目的。

收获园豆:50
寂静的羽夏 | 小虾三级 |园豆:1318 | 2021-12-06 17:41

91One | 园豆:12 (初学一级) | 2021-12-06 17:45

老板 这样清楚吗

91One | 园豆:12 (初学一级) | 2021-12-06 17:45

@很OKResult: 你得重写listbox,可以设置重写它的DrawItem,因为它不存在设置某个项目的颜色,我觉得你可以继承该控件重写控件。

寂静的羽夏 | 园豆:1318 (小虾三级) | 2021-12-06 17:54

@寂静的羽夏: 变色不变色不重要 主要是 上面的问题 判断list集合 只要存在Listbox 就行

把List集合值 赋值给Listbox 就好了

最后显示的是 1,2,3,4,5,6,7,8

91One | 园豆:12 (初学一级) | 2021-12-06 17:57

@很OKResult: 你看看这个例子是不是符合你的想法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        List<int> list = new List<int>();//你所说的list
        List<int> tmplist =  new List<int>();//暂存的list

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            tmplist.Clear();//清空上一次缓存
            tmplist.AddRange(list);//将list的东西加进去
            foreach (int item in listBox1.Items)//将listbox的东西加进去
            {
                tmplist.Add(item);
            }
            listBox1.Items.Clear();//清空listbox
            foreach (var item in tmplist.Distinct().ToArray())//获取不同的值重新加进去
            {
                listBox1.Items.Add(item);
            }
        }

        private void Form1_Load(object sender, EventArgs e)    //设置初值
        {
            listBox1.Items.Add(1);
            listBox1.Items.Add(3);
            listBox1.Items.Add(9);
            listBox1.Sorted = true;//设置排序

            list.Add(1);
            list.Add(2);
            list.Add(3);
            list.Add(4);   
            list.Add(5);    
        }
    }
}
寂静的羽夏 | 园豆:1318 (小虾三级) | 2021-12-06 18:15

@寂静的羽夏: 比如 listbox1 原先为 139 list为:1,2,3,4,5 我需要的是 1,3,9 但是1,3肯定是List里的 9为原先的

91One | 园豆:12 (初学一级) | 2021-12-06 18:23

原先:1,3,9, list:1,2,3, 判断list 如果存在 listbox里 那就替换成list的1,3 如果 list的没有9,那listbox还是显示9

91One | 园豆:12 (初学一级) | 2021-12-06 18:25

91One | 园豆:12 (初学一级) | 2021-12-06 18:29

@寂静的羽夏:

91One | 园豆:12 (初学一级) | 2021-12-06 18:34

@寂静的羽夏:

最终实现这样

91One | 园豆:12 (初学一级) | 2021-12-06 18:37

@很OKResult: 要的是这样的效果吗?

img

寂静的羽夏 | 园豆:1318 (小虾三级) | 2021-12-06 19:22

@很OKResult:

using System;
using System.Windows.Forms;

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

        private void ListBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox1.SelectedItem = listBox2.SelectedItem;
        }

    }
}
寂静的羽夏 | 园豆:1318 (小虾三级) | 2021-12-06 19:55

@很OKResult:

img

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Linq;

namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        class MyClass
        {
            public string Name { get; set; }
            public List<string> Values { get; set; }

            public override string ToString()
            {
                return Name;
            }
        }


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            MyClass myClass = new MyClass
            {
                Name = "test1",
                Values = new List<string>() { "A", "B", "C" }
            };

            MyClass myClass1 = new MyClass
            {
                Name = "test2",
                Values = new List<string>() { "1", "2", "3" }
            };
            listBox1.Items.Add(myClass);
            listBox1.Items.Add(myClass1);
        }

        private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            var cls = (MyClass)listBox1.SelectedItem;
            if (cls==null)
            {
                return;
            }

            listBox2.ClearSelected();
            for (int i = 0; i < listBox2.Items.Count; i++)
            {
                listBox2.SetSelected(i, cls.Values.Contains(listBox2.Items[i]));
            }
        }
    }
}
寂静的羽夏 | 园豆:1318 (小虾三级) | 2021-12-06 20:30
其他回答(1)
0

你可以这样做,List 1 有:{1,2,3,4,5,6,7,8} ;List 2有:{1,2,3,4,5,9}
你可以另外新建1个List 3 把List 1 中的每一项进行判断是否存在List2中,就把List 1的那1项后面加个符号* 后放到List3 中,如果不存在List2中 ,就直接把 List 1的那1项放到List3 中。
例如:

中华鲟3670 | 园豆:645 (小虾三级) | 2021-12-06 18:26

支持(0) 反对(0) 91One | 园豆:12 (初学一级) | 2021-12-06 18:33

最终实现这样

老板

支持(0) 反对(0) 91One | 园豆:12 (初学一级) | 2021-12-06 18:37

@很OKResult: 你能变色的话,那就好办了啊
Listbox 显示List3的数据就行了,判断List1(最初数据)的每一项是否在List2(查询到的数据)中存在,根据这个来决定Llist3(显示的数据)中的数据怎么显示。

支持(0) 反对(0) 中华鲟3670 | 园豆:645 (小虾三级) | 2021-12-06 18:43

@中华鲟3670: 这个我知道老板,主要是我想listbox有没有直接查询,匹配的

支持(0) 反对(0) 91One | 园豆:12 (初学一级) | 2021-12-06 19:19

老板 昨天那个可以发我一下吗 我看下

支持(0) 反对(0) 91One | 园豆:12 (初学一级) | 2021-12-07 09:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册