在表单顶部
Dictionary<string, string> FileList = new Dictionary<string, string>();
在构造函数中
public Form1()
{
InitializeComponent();
if (System.IO.File.Exists(Path.Combine(path, "test.txt")))
{
string g = System.IO.File.ReadAllText(Path.Combine(path, "test.txt"));
FileList = JsonConvert.DeserializeObject<Dictionary<string, string>>(g);
listBox1.DataSource = FileList.ToList();
}
改为:
listBox1.DataSource = FileList.ToList();
然后在列表框中,我将看到例如“hello”、“d:\test\test1.txt”
我希望listBox中只有:“你好”
我不想更改FileList,但想更改将从FileList添加到listBox的内容,这只是左侧。
另一个问题可能与listBox选定的索引有关:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var item = ((ListBox)sender).SelectedItem;
var itemCast = (KeyValuePair<string, string>)item;
pictureBox1.Image = System.Drawing.Image.FromFile(itemCast.Value);
}
一方面,我不希望在listBox中看到右侧的值,另一方面,我希望选定的索引事件正在工作。
2条答案
按热度按时间zi8p0yeb1#
字典将键Map到值,你所谓的“左部/侧”实际上是键,而另一个元素是值。
C#
Dictionary
有一个属性:Keys
,它只返回字典中的键(例如,"hello"
字符串)。因此,您可以用途:
"d:\test\test1.txt"
等),则Dictionary
具有类似的属性:Values
.*rks48beu2#
我猜,当用户选择一个键时,你会想要得到相应的值。在这种情况下,不是只绑定键,而是绑定整个
Dictionary
:每个项目都是一个
KeyValuePair
,它有Key
和Value
属性。上面的代码将显示键,然后,当用户选择一个项目时,您可以从SelectedValue
属性中获取相应的值。注意,这样的数据绑定需要一个
IList
,而Dictionary
只实现了ICollection
。因此,您需要调用ToArray
或ToList
来创建一个IList
进行绑定。