在另一个列表框

时间:2017-10-30 14:13:53

标签: c# datagridview listbox thumbnails subdirectory

我试图创建一个Autocad插件来预览datagridview中的缩略图

我有两个列表框我想将它们绑定在一起并在datagridview中显示.bmp

  1. listbox1 show Directory
  2. listbox2显示所选文件夹(listbox1)的子文件夹
  3. 然后.bmp文件显示在datagridview
  4. 我成功地想出了第一个问题

    String[] dirs = System.IO.Directory.GetDirectories(@"D:\test\Blocks");
            int i;
            for (i = 0; i < dirs.Length; i++)
            {
                listBox1.Items.Add(Path.GetFileName(dirs[i]));
            }
    
            String[] files = System.IO.Directory.GetFiles(@"D:\test\Blocks");
            for (i = 0; i < files.Length; i++)
            {
                listBox1.Items.Add(Path.GetFileName(files[i]));
            }
    

1 个答案:

答案 0 :(得分:1)

如果我理解正确,第一个列表框会列出子文件夹,当选择一个子文件夹时,第二个列表框会显示所选项目的子文件夹,当选择其中一个子文件夹时,datagridview会显示该文件夹中的文件。

如果这是正确的,一种方法是在Form_Load事件中将listbox1的数据源设置为根目录。然后在该列表框的SelectedIndexChanged事件中,您可以将listbox2的数据源设置为listbox1中选择的项目。在listbox2的SelectedIndexChanged事件中,您可以将DataGridView的数据源设置为listbox2中选定的项目。

这样的事情:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private string rootDirectory = @"D:\test\Blocks";

    private void Form1_Load(object sender, EventArgs e)
    {
        listBox1.DataSource = Directory.GetDirectories(rootDirectory)
            .Select(Path.GetFileName).ToList();
        listBox1.SelectedIndexChanged += ListBox1_SelectedIndexChanged;
        listBox2.SelectedIndexChanged += ListBox2_SelectedIndexChanged;
    }

    private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        var parentDir = Path.Combine(rootDirectory, listBox1.SelectedItem.ToString());
        listBox2.DataSource = Directory.GetDirectories(parentDir)
            .Select(Path.GetFileName).ToList();
    }

    private void ListBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        var parentDir = Path.Combine(rootDirectory, listBox1.SelectedItem.ToString(), 
            listBox2.SelectedItem.ToString());
        dataGridView1.DataSource = Directory.GetFiles(parentDir)
            .Select(f => new { FileName = Path.GetFileName(f) }).ToList();
    }
}