按当前目录从ComboBox过滤文件到ListBox

时间:2017-10-06 22:18:20

标签: c# winforms

我有一个列出目录的组合框,我有一个列表框,显示目前在组合框中选择的目录中的文件。我想要它,所以当您更改组合框中的选定项目时,列表框会使用新文件进行更新。

我如何实现这一目标?

我目前的尝试:

private void Form1_Load(object sender, EventArgs e)
{
    DirectoryInfo dinfo = new DirectoryInfo(@"C:\Users\guest\Desktop\test");
    DirectoryInfo[] folders = dinfo.GetDirectories();
    FileInfo[] Files = dinfo.GetFiles();

    cbobox.DataSource = folders;

    foreach(FileInfo file in Files)
    {
        lstbox.Items.Add(file.Name);
    }
}

1 个答案:

答案 0 :(得分:0)

您可以将dinfo设置为combobox中的路径。

假设你的组合框只有目录的字符串

dinfo = new DirectoryInfo(combobox.SelectedItem);

并且其余代码保持不变

private void Form1_Load(object sender, EventArgs e)
{
    DirectoryInfo dinfo = new DirectoryInfo(combobox.SelectedItem);
    DirectoryInfo[] folders = dinfo.GetDirectories();
    FileInfo[] Files = dinfo.GetFiles();

    cbobox.DataSource = folders;

    foreach(FileInfo file in Files)
    {
        lstbox.Items.Add(file.Name);
    }
}

如果您想在选择组合框中的新项目时更改它,则需要使用活动。

private void Form1_Load(object sender, EventArgs e)
{
    RefreshList();
    combobox.SelectedIndexChanged += 
        new System.EventHandler(ComboBox1_SelectedIndexChanged);
}

private void RefreshList() 
{
    DirectoryInfo dinfo = new DirectoryInfo(combobox.SelectedItem);
    DirectoryInfo[] folders = dinfo.GetDirectories();
    FileInfo[] Files = dinfo.GetFiles();

    cbobox.DataSource = folders;

    foreach(FileInfo file in Files)
    {
        lstbox.Items.Add(file.Name);
    }
}

private void ComboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    RefreshList();
}

请阅读

此代码假设您的组合框的名称为combobox,组合框中的字符串是您要过滤的目录的完整路径(或相对路径)。 如果不是,那么你需要适应你的目的。