2016-12-06 8 views
0

フォームが開かれたときにテキストファイルから読み込まれるコンボボックスがありますが、ファイルが空であるかどうかにかかわらず、ComboBoxの最初のアイテムはランダムテスト項目私はそれを試してみましたが、ファイルには全く存在しません。 は、ここでは、コードです:C#コンボボックスに存在しないアイテムが設定されています

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); 
    } 
} 

設計時にそれを見て、その初期化を取り除いてください。アイテム

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; 
} 

しかし、あなたの「テスト」アイテムがまだコードのどこかに残っている場合

とpopulatinig ComboBoxため

+0

これは問題を解決しました。ありがとうございます。私はまだそのアイテムがどこから来ているのか把握しようとしていますが、少なくともこの方法はそれを回避しています。 – Domz

+0

@Domzは、ファイル内の単純なスペースやタブ、改行にすぎませんか? –

+0

@Domzあなたの自動生成されたデザイナーファイルでは、デザイナーで使用されているデータがデザイナーによって使用された場合、デザイナーがコントロールをクリアすると、 – MikeT

0

コンボボックスアイテムをロードする前に消去してください。

デフォルト値があるかもしれません。

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

または使用DataBindingは - それが実行されます。だから最善の解決策はそれを見つけて削除することです。

comboBox1のすべての参照をチェックしてください。デザイナで行われたすべての変更は、yourForm.Designer.csファイルのコードとして生成されます。

関連する問題