我正在尝试将字典中的键/值对显示为ListBox。
Key Value
A 10
B 20
C 30
我想以下列格式在ListBox中显示它们
A(10)
B(20)
C(30)
使用以下代码,我可以将Listbox.Datasource链接到Dictionary。
myListBox.DataSource = new BindingSource(myDictionary, null);
显示为
[A, 10]
[B, 20]
[C, 30]
我无法弄清楚如何格式化它以便以我想要的方式显示。
任何帮助将不胜感激。
由于 阿希什
答案 0 :(得分:6)
使用列表框中的Format事件:
KeyValuePair<string, int> item = (KeyValuePair<string, int>)e.ListItem;
e.Value = string.Format("{0}({1})", item.Key, item.Value);
答案 1 :(得分:5)
为了获得适当的长期灵活性,我会尝试使用一个类型化的对象,然后你可以做以后喜欢的事情,引发事件,更改值,不必使用唯一键,从列表框中获取真实对象而不仅仅是格式化的字符串
public partial class tester : Form
{
public tester()
{
InitializeComponent();
List<MyObject> myObjects = new List<MyObject>();
MyObject testObject = new MyObject("A", "10");
myObjects.Add(testObject);
BindingSource bindingSource = new BindingSource(myObjects,null);
listBox1.DisplayMember = "DisplayValue";
listBox1.DataSource = bindingSource;
}
}
public class MyObject
{
private string _key;
private string _value;
public MyObject(string value, string key)
{
_value = value;
_key = key;
}
public string Key
{
get { return _key; }
}
public string Value
{
get { return _value; }
}
public string DisplayValue
{
get { return string.Format("{0} ({1})", _key, _value); }
}
}
答案 2 :(得分:0)
您可以迭代遍历字典对象并构建列表框项目。
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
lbx.Items.Add(String.Format("{0}({1})", kvp.Key, kvp.Value.ToString()));
}
答案 3 :(得分:0)
实际上,如果您想自定义从中派生的列表框并覆盖
protected override OnDrawItem
答案1将获得您在问题中所述的内容,但如果您想反映对象的变化,那么如果您编写绘图例程以便它会自动反映出来会更好。
或者您可以更改项目的文本,这也可以解决问题。
不要忘记调用BeginUpdate()和EndUpdate()