将文件填充到C#windows窗体中的文件夹的列表框中

时间:2012-05-09 12:32:10

标签: c# winforms visual-studio visual-studio-2010

我是C#的新手,我有2个列表框l - > istBox1和listBox2,我想将文件夹中的文件加载到这些列表框中。 我试过这样的: listBox1:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            DirectoryInfo dinfo = new DirectoryInfo(@"C:\TestLoadFiles");
            FileInfo[] Files = dinfo.GetFiles("*.rtdl");
            foreach (FileInfo file in Files)
            {
                listbox1.Items.Add(file.Name);
            }

        }

listBox2:

private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            DirectoryInfo dinfo = new DirectoryInfo(@"C:\TestLoadFiles");
            FileInfo[] Files = dinfo.GetFiles("*.dlz");
            foreach (FileInfo file in Files)
            {
                listbox2.Items.Add(file.Name);
            }
        }

当我运行表单时,文件夹中的文件没有显示???

3 个答案:

答案 0 :(得分:11)

而不是listBox1_SelectedIndexChanged,更新列表框反对某些按钮单击,否则您的代码看起来很好。最初,您可能没有列表框中的任何项目,这就是为什么当您点击它时,SelectedIndexChanged不会被解雇的原因。

编辑:(由于问题已被编辑,我将更新我的回答)
要使用文件覆盖列表框,您应该这样做,除了SelectedIndexChanged以外的某些事件。因为在应用程序开始时,列表框为空,并且当列表框中有项目并且用户单击它时会触发SelectedIndexChanged事件。您可以创建以下功能

private void PopulateListBox(ListBox lsb, string Folder, string FileType)
{
    DirectoryInfo dinfo = new DirectoryInfo(Folder);
    FileInfo[] Files = dinfo.GetFiles(FileType);
    foreach (FileInfo file in Files)
    {
        lsb.Items.Add(file.Name);
    }
}

现在,您可以在某些情况下使用列表框对按钮单击或表单加载调用此函数。 e.g。

private void Form1_Load(object sender, EventArgs e)
{
    PopulateListBox(listbox1, @"C:\TestLoadFiles", "*.rtld");
    PopulateListBox(listbox2, @"C:\TestLoadFiles", "*.other");
}

答案 1 :(得分:1)

这可能有用;)

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    DirectoryInfo dinfo = new DirectoryInfo(@"C:\TestLoadFiles");
    FileInfo[] Files = dinfo.GetFiles("*.rtdl");
    foreach (FileInfo file in Files)
    {
        listbox2.Items.Add(file.Name);
    }
}

答案 2 :(得分:1)

我想错误的事件。将该代码移动到窗体/控件的构造函数或将其附加到另一个控件的事件。当列表框的初始状态为空时,在SelectedIndexChanged上重新填充listBox没有意义。