2011-12-24 3 views
-1

私はC#について小さなコードブロックを作りたいと思っています。テキストボックスが変更されたときにリストボックスから項目を削除する方法

まず、要素を含むリストボックスを考えます。 は、空白のテキストボックスと考える。

私はテキストボックスに文字を書くとき(単に文字と考えるのではなく、単語を考え、textbox1_textchangedで分割します)、要素に単語がない場合はリストボックスから削除する必要があります。

例:ここ

は、リストボックスの要素です:

abraham 
michael 
george 
anthony 

私は「A」を入力したとき、私は私が入力したときにマイケルとジョージは、その後、削除したい「N」私はアブラハムになりたいです削除された(この時点で合計文字列は "AN" である)...今では

おかげで(:

+4

を? –

答えて

3
private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     for (int i = 0; i < listBox1.Items.Count; i++) 
     { 
      string item = listBox1.Items[i].ToString(); 
      foreach(char theChar in textBox1.Text) 
      { 
       if(item.Contains(theChar)) 
       { 
        //remove the item, consider the next list box item 
        //the new list box item index would still be i 
        listBox1.Items.Remove(item); 
        i--; 
        break; 
       } 
      } 
     } 
    } 
1

あなたはTRができこのようなものこれは、テキストボックスにあるものと一致し、一致しないものを削除します。

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    for (int i = 0; i < listBox1.Items.Count ; i++) 
    { 
     for (int j = 0; j < textBox1.Text.Length ; j++) 
     { 
      if (textBox1.Text[j] != listBox1.Items[i].ToString()[j]) 
      { 
       if (i < 0) break; 
       listBox1.Items.RemoveAt(i); 
       i = i - 1; // reset index to point to next record otherwise you will skip one 
      } 

     } 

    } 
} 
1

テキストが含まれているし、リストボックスから削除していないアイテムフィルタリングすることができます:あなたが何をしようとしなかった

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    var itemsToRemove = listBox1.Items.Cast<object>().Where(x => !x.ToString().Contains(textBox1.Text)).ToList(); 
    foreach(var item in itemsToRemove) 
     listBox1.Items.Remove(item); 
} 
+0

listBox1.Items.Where?どこにも拡張はありません! –

+0

私は拡張メソッドをサポートするように編集しました。ちょうど不平を言うのではなく(私は投票していると思います)、あなたはそれを編集することができました! @alicanbaturがコピーしてプロダクションコードに貼り付けるのではなく、ソリューションのアイデアを提供するためのものです。 – ivowiblo

+0

@ivowiblo WinFormsのListBoxItemはWPFでのみ存在し、ListBox.Itemsはオブジェクトとして返されます。エラーを投げている列挙子も変更しています。 –

関連する問題