2011-02-02 61 views
3

我在列表框中有大量項目,名爲listBox1。我也有一個文本框(textBox1)在頂部。我希望能夠輸入到文本框中,並且列表框通過它的項目搜索並找到包含我輸入內容的項目。C#搜索列表框

例如,假設列表框包含

「貓」

「狗」

「胡蘿蔔」

和 「Brocolli」

如果我開始鍵入字母C,那麼我希望它顯示貓和胡蘿蔔,當我鍵入它應該不斷顯示它們,但是當我添加一個r它應該從列表中刪除貓。無論如何要做到這一點?

+1

你使用的是什麼GUI框架?的WinForms? WPF?還有別的嗎? `TextBox`和`ListBox`不是純C#的一部分... – stakx 2011-02-02 19:31:43

+0

WinForms,對不起,我應該說明這一點。 – 2011-02-02 19:45:26

回答

5

篩選列表框。試試這個:

List<string> items = new List<string>(); 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     items.AddRange(new string[] {"Cat", "Dog", "Carrots", "Brocolli"}); 

     foreach (string str in items) 
     { 
      listBox1.Items.Add(str); 
     } 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     listBox1.Items.Clear(); 

     foreach (string str in items) 
     { 
      if (str.StartsWith(textBox1.Text, StringComparison.CurrentCultureIgnoreCase)) 
      { 
       listBox1.Items.Add(str); 
      } 
     } 
    } 
0

我認爲你需要使用LINQ查詢,然後將數據綁定結果。在WPF中的一個例子是here,但我相信你可以在winforms中做同樣的事情。

1

簡單的例子;然而,這應該讓你開始...

public partial class Form1 : Form 
    { 
     List<String> _animals = new List<String> { "cat", "carrot", "dog", "goat", "pig" }; 

     public Form1() 
     { 
      InitializeComponent(); 

      listBox1.Items.AddRange(_animals.ToArray()); 
     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 
      String search = textBox1.Text; 

      if (String.IsNullOrEmpty(search)) 
      { 
       listBox1.Items.Clear(); 
       listBox1.Items.AddRange(_animals.ToArray()); 
      } 

      var items = (from a in _animals 
         where a.StartsWith(search) 
         select a).ToArray<String>(); 

      listBox1.Items.Clear(); 
      listBox1.Items.AddRange(items); 
     } 
    } 
+0

如果列表很長,Clear和AddRange不會對性能造成影響嗎?或者因爲這些都是引用,這並不重要? – Ziv 2011-02-03 00:09:57

1

爲了得到所期望的結果,你必須使用Contains方法代替StartWith方法。 像這樣: -

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     listBox1.Items.Clear(); 

     foreach (string str in items) 
     { 
      if (str.ToUpper().Contains(textBox1.Text.ToUpper())) 
      { 
       listBox1.Items.Add(str); 
      } 
     } 
    } 

我是在尋找這一點。