在列表框中显示文件夹,在另一个列表框中显示子文件夹
Show folders in listbox and subfolders in another listbox
我正在尝试创建一个 Autocad 插件来在 datagridview 中预览缩略图
我有两个列表框,我想将它们绑定在一起并在 datagridview 中显示 .bmp
- listbox1 显示目录
- listbox2 显示所选文件夹 (listbox1) 中的子文件夹
- 然后 .bmp 文件显示在数据网格视图中
第一题我算成功了
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]));
}
如果我没理解错的话,第一个列表框会列出子文件夹,选中一个后,第二个列表框会显示所选项目的子文件夹,选中其中一个后,datagridview 会显示该文件夹中的文件.
如果这是正确的,一种方法是在 Form_Load 事件中,将 listbox1 的数据源设置为根目录。然后在该列表框的 SelectedIndexChanged 事件中,您可以将 listbox2 的数据源设置为在 listbox1 中选择的项目。而在listbox2的SelectedIndexChanged事件中,可以将DataGridView的datasource设置为listbox2中选中的item。
像这样:
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();
}
}
我正在尝试创建一个 Autocad 插件来在 datagridview 中预览缩略图
我有两个列表框,我想将它们绑定在一起并在 datagridview 中显示 .bmp
- listbox1 显示目录
- listbox2 显示所选文件夹 (listbox1) 中的子文件夹
- 然后 .bmp 文件显示在数据网格视图中
第一题我算成功了
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]));
}
如果我没理解错的话,第一个列表框会列出子文件夹,选中一个后,第二个列表框会显示所选项目的子文件夹,选中其中一个后,datagridview 会显示该文件夹中的文件.
如果这是正确的,一种方法是在 Form_Load 事件中,将 listbox1 的数据源设置为根目录。然后在该列表框的 SelectedIndexChanged 事件中,您可以将 listbox2 的数据源设置为在 listbox1 中选择的项目。而在listbox2的SelectedIndexChanged事件中,可以将DataGridView的datasource设置为listbox2中选中的item。
像这样:
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();
}
}