winforms 如何在listBox中只添加字典〈string,string>的左边部分?

daolsyd0  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(169)

在表单顶部

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中看到右侧的值,另一方面,我希望选定的索引事件正在工作。

zi8p0yeb

zi8p0yeb1#

字典将键Map到值,你所谓的“左部/侧”实际上是键,而另一个元素是值。
C#Dictionary有一个属性:Keys,它只返回字典中的(例如,"hello"字符串)。
因此,您可以用途:

listBox1.DataSource = FileList.Keys.ToList();
  • 请注意,如果您只需要(例如"d:\test\test1.txt"等),则Dictionary具有类似的属性:Values.*
rks48beu

rks48beu2#

我猜,当用户选择一个键时,你会想要得到相应的值。在这种情况下,不是只绑定键,而是绑定整个Dictionary

myListBox.DisplayMember = "Key"
myListBox.ValueMember = "Value"
myListBox.DataSource = myDictionary.ToArray()

每个项目都是一个KeyValuePair,它有KeyValue属性。上面的代码将显示键,然后,当用户选择一个项目时,您可以从SelectedValue属性中获取相应的值。
注意,这样的数据绑定需要一个IList,而Dictionary只实现了ICollection。因此,您需要调用ToArrayToList来创建一个IList进行绑定。

相关问题