2014-07-20 46 views
-1

錯誤的項目選擇在組合框中選擇(C#,WPF)錯誤的項目在組合框(C#,WPF)

我有一個comboBoxtextBox。當我在組合框中選擇一個項目(html文件)時,我想將這些內容添加到我的文本框中。以下是我到目前爲止有:

public void SetDataPoolToComboBox() 
    { 
     comboBox_DataPool.Items.Clear(); 

     comboBox_DataPool.Items.Add("Please choose a file..."); 
     comboBox_DataPool.SelectedIndex = 0; 

     if (true == CheckPath()) 
     { 
      foreach (string s in Directory.GetFiles(pathTexts, "*.html")) 
      { 
       comboBox_DataPool.Items.Add(Path.GetFileNameWithoutExtension(s)); 
      } 
     } 
    } 

public void comboBox_DataPool_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     SetContentToTextBox(); 
    } 

    public void SetContentToTextBox() 
    { 
     if (true == CheckPath()) 
     { 
      FileInfo[] fileInfo = directoryInfo.GetFiles("*.html"); 
      if (fileInfo.Length > 0) 
      { 
       if (comboBox_DataPool.Text == "Please choose a file..." || comboBox_DataPool.Text == "") 
       { 
        textBox_Text.Text = string.Empty; 
       } 
       else 
       { 
        StreamReader sr = new StreamReader(fileInfo[comboBox_DataPool.SelectedIndex].FullName, Encoding.UTF8); 
        textBox_Text.Text = sr.ReadToEnd(); 
        sr.Close(); 
       } 
      } 
     } 
    } 

問題:當我選擇第二項,顯示第三項的內容。每次都會發生同樣的情況 - 我選擇哪個項目並不重要。當我選擇最後一個項目時,應用程序被踢出:「錯誤:索引超出範圍!」

回答

0

問題是你已經添加了一個虛擬字符串「請選擇一個文件...」在您的comboBox的項目集合中,然後添加fileInfos集合項目。

因此,如果selectedIndex將1指向您的集合中的第0個項目。因此,在從fileInfo集合中獲取項目時,您需要從comboBox_DataPool.SelectedIndex - 1索引位置獲取項目。


變化

StreamReader sr = new StreamReader(fileInfo[comboBox_DataPool.SelectedIndex] 
            .FullName, Encoding.UTF8); 

StreamReader sr = new StreamReader(fileInfo[comboBox_DataPool.SelectedIndex - 1] 
            .FullName, Encoding.UTF8); 
+0

看來工作。不幸的是,當我點擊第一項「請選擇一個文件...」時,它會拋出相同的異常。 – gpuk360

+1

第0個索引不應該超過你的其他語句。它應該先處理,如果條件。不知道爲什麼不是,而是檢查字符串,你可以像這樣檢查SelectedIndex - 'if(comboBox_DataPool.SelectedIndex == 0) {textBox_Text.Text = string.Empty; }'。 –

+0

完美!大拇指。 – gpuk360