C#如何从另一个列表框中选择列表框中的对象

时间:2017-03-21 20:02:56

标签: c# winforms

说我希望listBox1包含一组名字。当有人点击其中一个名字时,它会在listBox2已选中中显示姓氏。

我似乎无法让第二个列表框已经选中它。

因此,如果选择listBox1中的第一项,则会选择listBox2中的第一项。等等。

这怎么可能?

以下是一些代码:

private void materialFlatButton3_Click_1(object sender, EventArgs e)
        {
            OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
            OpenFileDialog1.Multiselect = true;
            OpenFileDialog1.Filter = "DLL Files|*.dll";
            OpenFileDialog1.Title = "Select a Dll File";
            if (OpenFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // put the selected result in the global variable
                fullFileName = new List<String>(OpenFileDialog1.FileNames);


                foreach (string s in OpenFileDialog1.FileNames)
                {
                    listBox2.Items.Add(Path.GetFileName(s));
                    listBox4.Items.Add(s);
                }

            }
        }

    private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        string text = listBox2.GetItemText(listBox2.SelectedItem);
        textBox3.Text = text;
    }

在listbox4中,它显示完整路径。在listbox2中,它只显示文件的名称。

当有人点击listbox2中的某个文件时,如何才能这样做,在listbox4中会选择相应的路径?

2 个答案:

答案 0 :(得分:1)

创建您自己的类型以存储和显示文件名:

@IBAction func buttonPressed(_ sender: UIButton) {
}

并将这些项目添加到列表框中。这样您就可以存储完整路径并同时显示文件名。

或者只是保留对原始Files数组的引用或将其内容复制到另一个数组。然后通过选定的索引从此数组中获取完整路径,而不是从用于存储内容的第二个列表框中获取。

答案 1 :(得分:1)

创建一个表示完整路径和名称以显示的类 然后使用绑定加载的数据到ListBox

public class MyPath
{
    public string FullPath { get; private set; }
    public string Name '
    { 
        get { return Path.GetFileName(s) }             
    }

    public MyPath(string path)
    {
        FullPath = path;
    }
}

// Load and bind it to the ListBox

var data = OpenFileDialog1.FileNames
                            .Select(path => new MyPath(path))
                            .ToList();

// Name of the property which will be used for displaying text
listBox1.DisplayMember = "Name"; 
listBox1.DataSource = data;

private void ListBox1_SelectedValueChanged(object sender, EventArgs e)
{
    var selectedPath = (MyPath)ListBox1.SelectedItem;
    // Both name and full path can be accesses without second listbox
    // selectedPath.FullPath
    // selectedPath.Name
}