2016-09-01 6 views
0

私は2番目のコンボボックスを使用しています。最初のボックスはドロップダウンリストから指定された場所にフォルダを表示します。ファイルは最初のボックスの選択されたフォルダに依存します(注:データベースとは関係なく、コンピュータフォルダにアクセスしています)。 Visual Studio 2013 with C#で作業しています。前もって感謝します。コンボボックスの選択されたフォルダ(C#)を呼び出す

DirectoryInfo di = new DirectoryInfo(@"C:\Users\jeeva\Desktop\1234"); 
DirectoryInfo[] folders = di.GetDirectories(); 
comboBox1.DataSource = folders; 
string selected =comboBox1.SelectedItem.ToString(); 
String fullpath = Path.Combine(@"C:\Users\jeeva\Desktop\1234", selected); 
DirectoryInfo di1 = new DirectoryInfo(fullpath); 
DirectoryInfo[] folders1 = di1.GetDirectories(); 
comboBox2.DataSource = folders1 
+0

お試しいただいた内容を教えてください。 –

+1

WindowsフォームまたはWPF? –

+0

WINDOWS FORMS @Ythistran S – warriors

答えて

1

内のすべてのファイルを読み込む必要があります。コード内でそれらを区切ります。

1)(フォームのコンストラクタで、既にかもしれない)あなたのコンボボックスにフォルダを取得:デザイナで

DirectoryInfo di = new DirectoryInfo(@"C:\Users\jeeva\Desktop\1234"); 
DirectoryInfo[] folders = di.GetDirectories(); 
comboBox1.DataSource = folders; 

2)ダブルクリックcomboBox1。これにより、ユーザーが項目を選択するとトリガーされるイベントが作成されます。その中にサブフォルダをすべて取得し、DataSourceとしてComboBoxに渡します。ComboBoxに表示されます。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{  

    string selected =comboBox1.SelectedItem.ToString(); 
    String fullpath = Path.Combine(@"C:\Users\jeeva\Desktop\1234", selected); 
    DirectoryInfo di1 = new DirectoryInfo(fullpath); 
    DirectoryInfo[] folders1 = di1.GetDirectories(); 
    comboBox2.DataSource = folders1  
} 
+0

コンボボックス2のファイルにアクセスしていませんコンボボックス1の選択されたフォルダのサブフォルダにアクセスする必要があります@Mong Zhu – warriors

+0

@warriors私の間違いですが、変更しましたが、コードはあなたの例から取られているので、トリックを行う必要があります –

+0

@warriorsあなたはあなたの質問でこの行を変更する必要があります:** "ので、選択した後、2番目のコンボボックスは、最初のボックスの選択されたフォルダに応じてファイルのみを表示する" **、それは混乱につながる可能性があります –

0

あなたは二コンボボックスを移入するDirectory.GetFiles("folderName")メソッドを使用することができます。 DirectoryクラスはSystem.IO名前空間に存在します。 ComboBox1ののOnChangeイベントで

0

ComboBox2.dataSource = System.IO.Directory.GetFiles(ComboBox1.SelectedText) 

これはこれは、2つの段階で基本的に行われているCombobox2

+0

あなたが使っているテクノロジーや問題は何か? –

+0

'ComboBox1.SelectedText'は空の文字列を返します。このソリューションは動作しません。 –

+0

私は以下のコードを試しましたが、結果は否定的でした。 DirectoryInfo di =新しいDirectoryInfo(@ "C:\ Users \ jeeva \ Desktop \ 1234"); DirectoryInfo [] folders = di.GetDirectories(); comboBox1.DataSource = folders; comboBox2.DataSource = System.IO.Directory.GetDirectories(comboBox1.SelectedText); @karthi keyan – warriors

0

あなたはこのようなもので、フォルダ一覧を取得することができます。

DirectoryInfo obj = new DirectoryInfo("E:\\");//you can set your directory  path here 
DirectoryInfo[] folders = obj.GetDirectories(); 
YourDirCombo.DataSource = folders ; 

あなたはおそらくあなたの最初のコンボ変化を聞い方法があります:

あなたが得ることができる。このようになりまし
private void YourDirCombo_SelectedIndexChanged(object sender, EventArgs e) 

選択したフォルダのファイル:

string [] fileEntries = Directory.GetFiles(YourDirCombo.SelectedValue); 
YourFileCombo.DataSource = fileEntries; 
0

以下は、いくつかの異なる方法で最適化して一般化することができます。可能な限り多くの情報を提供するために、私はそれを「長持ち」しています。

private void initializeComboBoxes() 
    { 
     ComboBox c = new ComboBox(); 
     c.Name = "cbx_One"; 
     c.Items.Add("Select a File"); 
     foreach(string direc in System.IO.Directory.GetDirectories(@"PathToYourFiles")) 
     { 
      c.Items.Add(direc); 
     } 
     c.SelectedIndex = 0; 
     c.SelectedIndexChanged += loadComboBox2; 
     Controls.Add(c); 
     ComboBox c1 = new ComboBox(); 
     c1.Name = "cbx_Two"; 
     c1.Items.Add("Waiting for file selection"); 
     c1.SelectedIndex = 0; 
     c1.SelectedIndexChanged += loadFile; 
     Controls.Add(c1); 
     areComboBoxesUpdating = false; 
    } 
    bool areComboBoxesUpdating = true; 
    protected void loadComboBox2(object sender, EventArgs e) 
    { 
     if (!areComboBoxesUpdating) 
     { 
      ComboBox c1 = sender as ComboBox; 
      ComboBox c2 = Controls.Find("cbx_Two", true)[0] as ComboBox; 
      c2.Items.Clear(); 
      if (c1.SelectedIndex == 0) 
      { 
       c2.Items.Add("Waiting for file selection"); 
      } 
      else 
      { 
       c2.Items.Add("Please select a file"); 
       //assuming c1 is the list of directories 
       foreach (string file in System.IO.Directory.GetFiles(c1.SelectedItem.ToString())) 
       { 
        c2.Items.Add(Path.GetFileName(c1.SelectedItem.ToString())); 
       } 
      } 
      areComboBoxesUpdating = true; 
      c2.SelectedIndex = 0; 
      areComboBoxesUpdating = false; 
     } 
    } 
    protected void loadFile(object sender, EventArgs e) 
    { 
     //a selection has been made from the second box - you have directory in box1 and filename in box2 
     ComboBox c = sender as ComboBox; 
     if (c.SelectedIndex > 0) 
     { 
      string directory = ((ComboBox)Controls.Find("cbx_One", true)[0]).SelectedItem.ToString(); 
      string file = c.SelectedItem.ToString(); 
      //do something 
     } 
    } 
関連する問題