2016-12-06 60 views
0

我有一個組合框,應該從窗體打開時從文本文件填充,但不管文件是否爲空,ComboBox中的第一項是一個隨機測試項目我試了一下,並沒有出現在文件中。 下面的代碼:C#Combobox填充了非現在的項目

private void Form1_Load(object sender, EventArgs e) 
{ 

    string line; 
    StreamReader file = new StreamReader("filepath"); 
    while ((line = file.ReadLine()) != null) 
    { 
     comboBox1.Items.Add(line); 
    } 


    if (comboBox1.Items.Count == 0) 
    { 
     comboBox1.SelectedIndex = -1; 
     comboBox1.SelectedItem = string.Empty; 
    } 
    else 
    { 

     comboBox1.SelectedIndex = 0; 
    } 
     file.Close(); 

} 

測試項目外,該ComboBox獲取填充得很好,但我想刪除測試項目。 ComboBox的「編輯項目」屬性是完全空的,所以它不是默認項目,我100%確定文件路徑是正確的。 有什麼建議嗎?

+1

基於該代碼,它看起來像通過設計人員添加了測試項目 – Plutonix

+0

您可以檢查設計器代碼是否添加了項目,請檢查'yourForm.Designer.cs'文件。或者你可以在'Form1_Load'方法的開頭調用'comboBox1.Items.Clear()',但它只是解決方法 – Fabio

回答

0

這將有助於瞭解comboBox1的定義。

但是,當您從您的文件中讀取時,您只是添加到現有項目中,但未刪除可能已存在的項目。

添加一行:

comboBox1.Items.Clear(); 

你之前遍歷文件的內容。但是,這只是一種解決方法,將掩蓋問題的真正根源。

我會做的另一件事是檢查你有沒有從文件中讀取一個空行:

while ((line = file.ReadLine()) != null) 
{ 
    if (line.Length > 0) 
    { 
     comboBox1.Items.Add(line); 
    } 
} 

如果你只是在設計中加入您的測試項目,然後,除非你絕對需要在設計時看到它,取消初始化。

+0

這解決了這個問題,謝謝。我仍然試圖弄清楚這個項目來自哪裏,但至少這種方法可以解決這個問題。 – Domz

+0

@Domz可能只是一個簡單的空間或選項卡或文件中的換行符? –

+0

@Domz在自動生成的設計器文件中,設計器填充表單設計器中使用的任何數據,如果更改不在代碼中,那麼這就是它的來源,如果通過設計器清除控件,它應該停止這種情況發生,但是它是一個好主意,在你填充之前清除任何東西 – MikeT

0

在加載它們之前清除組合框項目。

您可能在某處有一些默認值。

private void Form1_Load(object sender, EventArgs e) 
{ 
    comboBox1.Items.Clear(); 
0

或者使用DataBinding爲populatinig ComboBox與項目

private void Form1_Load(object sender, EventArgs e) 
{ 
    List<string> lines = new List<string>(); 
    using (StreamReader file = new StreamReader("filepath")) 
    { 
     string line; 
     while ((line = file.ReadLine()) != null) 
     { 
      lines.Add(line); 
     } 
    } 

    comboBox1.DataSource = lines; 
} 

但是,如果你的「測試」項目仍停留在某處代碼 - 它會被執行。所以最好的解決方案是找到並刪除。

只需檢查comboBox1的所有參考。設計人員所做的所有更改都將生成爲yourForm.Designer.cs文件中的代碼。