如何通过单击同一ListBox中的项目以编程方式选择ListBox中的其他项?这是一个c#winforms项目。
例如,当我点击下面的衣服时,裤子和衬衫需要自动突出显示。汽车零件也是如此,它将突出轮胎和变速器。
Clothes
Pants
Tires
Shirts
Transmissions
Auto Parts
我将ListBox绑定到DataSource(itemList),并尝试添加" itemIndex"对于我列表中的每个项目,我可以处理排序(我确定可能有更好的方法吗?),这对我来说当时有意义,但我无法弄清楚如何实际制作它在我脑海外工作......
这是我目前的代码。任何建议都很棒。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace listBox_test
{
public partial class Form1 : Form
{
BindingList<Item> itemList = new BindingList<Item>();
public Form1()
{
InitializeComponent();
ShowData();
}
private void ShowData()
{
this.listBox1.DataSource = itemList;
this.listBox1.DisplayMember = "ItemName";
}
private void Form1_Load(object sender, EventArgs e)
{
AddItem(itemIndex: 0, itemName: "Clothes", itemPrice: 0.95);
AddItem(itemIndex: 1, itemName: "Pants", itemPrice: 0.95);
AddItem(itemIndex: 2, itemName: "Tires", itemPrice: 0.95);
AddItem(itemIndex: 3, itemName: "Shirts", itemPrice: 0.95);
AddItem(itemIndex: 4, itemName: "Transmissions", itemPrice: 0.95);
AddItem(itemIndex: 5, itemName: "Auto Parts", itemPrice: 0.95);
}
// Add an item to the list
private void AddItem(int itemIndex, string itemName, double itemPrice)
{
itemList.Add(new Item(itemIndex, itemName, itemPrice));
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// SelectChild(); ??
}
}
public class Item
{
public int ItemIndex { get; set; }
public string ItemName { get; set; }
public double ItemPrice { get; set; }
public Item(int itemIndex, string itemName, double itemPrice)
{
ItemIndex = itemIndex;
ItemName = itemName;
ItemPrice = itemPrice;
}
}
}
答案 0 :(得分:1)
您需要在它们之间声明某种关系(可能多个值的一个键),以便您的程序知道哪些项与哪些项相关
例如,以下是使用string
为string[]
与Dictionary<string, string[]>
关系实施的方式:
Dictionary<string, string[]> dict = new Dictionary<string, string[]>(){
{"Clothes", new string[] {"Pants","Shirts"}},
{"Auto Parts", new string[] {"Tires","Transmissions"}}
};
然后,将ListBox.SelectionMode
设为MultiSimple
并基于Key
(string
),然后您可以选择Value
({{ 1}})使用string[]
为了完全实现你想要的东西,我发现它非常棘手 - 特别是如果你使用ListBox.SetSelected
事件。至少还有两件事你需要考虑:
SelectedIndex
事件handelr中选择某些内容时,它将导致程序触发另一个 SelectedIndexChanged
。如果不小心处理,这可能会因递归调用而导致SelectedIndexChanged
异常。StackOverflow
列表中的不项目(例如key
)设置一些默认功能。为此,您可能需要记录最后所选项目的内容。 但,遗憾的是,Shirts
的{{1}}和SelectedItems
并未通过选择按时间顺序排列顺序,而是通过顺序订单。因此,您无法推断SelectedIndices
或ListBox
中最后选择的项目是什么,因此您可能需要为最后一个(单数)所选项目实现自己的“记忆”。考虑到以上几点,最终的,安全的实现可能看起来像这样(评论):
SelectedItems
答案 1 :(得分:0)
您需要遍历列表框并将所选内容设置为true
for (int i = 0; i < myListBox.Items.Count;i++)
{
myListBox.SetSelected(i, true);
}