2017-10-06 52 views
0

我有一個組合框列出目錄,我有一個列表框顯示組合框中當前選定的目錄中的文件。我想要它,所以當您更改組合框中的選定項目時,列表框會使用新文件進行更新。按當前目錄從組合框過濾文件到列表框

我該如何做到這一點?

我當前的嘗試:

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

問題是? – orhtej2

+0

如何編碼以通過組合框列出選定文件夾中的文件。 – Sbk

+0

只需將您作爲處理程序提供的代碼調用到[ComboBox.SelectionChangeCommited](https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectionchangecommitted(v = vs.110))。 aspx)? – orhtej2

回答

0

您可以設置dinfocombobox路徑。

假設您的組合框只是有目錄

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,並在組合框中的字符串是完整路徑(或相對路徑)要通過篩選的目錄。 如果不是,您需要適應以達到您的目的。

+0

你不應該喂鴿子。 [回答「壞」問題的立場](https://meta.stackoverflow.com/a/281795/585968) – MickyD

+0

你是什麼意思?這個問題是否重複?編輯:tbh我不知道壞的問題是一件事情.. – edkek