现在有一个 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
麻烦了
能不能描述明白点,最好给个代码和演示截图,我不清楚你的准确目的。
老板 这样清楚吗
@很OKResult: 你得重写listbox,可以设置重写它的DrawItem,因为它不存在设置某个项目的颜色,我觉得你可以继承该控件重写控件。
@寂静的羽夏: 变色不变色不重要 主要是 上面的问题 判断list集合 只要存在Listbox 就行
把List集合值 赋值给Listbox 就好了
最后显示的是 1,2,3,4,5,6,7,8
@很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);
}
}
}
@寂静的羽夏: 比如 listbox1 原先为 139 list为:1,2,3,4,5 我需要的是 1,3,9 但是1,3肯定是List里的 9为原先的
原先:1,3,9, list:1,2,3, 判断list 如果存在 listbox里 那就替换成list的1,3 如果 list的没有9,那listbox还是显示9
@寂静的羽夏:
@寂静的羽夏:
最终实现这样
@很OKResult: 要的是这样的效果吗?
@很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;
}
}
}
@很OKResult:
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]));
}
}
}
}
你可以这样做,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 中。
例如:
最终实现这样
老板
@很OKResult: 你能变色的话,那就好办了啊
Listbox 显示List3的数据就行了,判断List1(最初数据)的每一项是否在List2(查询到的数据)中存在,根据这个来决定Llist3(显示的数据)中的数据怎么显示。
@中华鲟3670: 这个我知道老板,主要是我想listbox有没有直接查询,匹配的
老板 昨天那个可以发我一下吗 我看下