我在列表框中有大量項目,名爲listBox1。我也有一個文本框(textBox1)在頂部。我希望能夠輸入到文本框中,並且列表框通過它的項目搜索並找到包含我輸入內容的項目。C#搜索列表框
例如,假設列表框包含
「貓」
「狗」
「胡蘿蔔」
和 「Brocolli」
如果我開始鍵入字母C,那麼我希望它顯示貓和胡蘿蔔,當我鍵入它應該不斷顯示它們,但是當我添加一個r它應該從列表中刪除貓。無論如何要做到這一點?
我在列表框中有大量項目,名爲listBox1。我也有一個文本框(textBox1)在頂部。我希望能夠輸入到文本框中,並且列表框通過它的項目搜索並找到包含我輸入內容的項目。C#搜索列表框
例如,假設列表框包含
「貓」
「狗」
「胡蘿蔔」
和 「Brocolli」
如果我開始鍵入字母C,那麼我希望它顯示貓和胡蘿蔔,當我鍵入它應該不斷顯示它們,但是當我添加一個r它應該從列表中刪除貓。無論如何要做到這一點?
篩選列表框。試試這個:
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);
}
}
}
-1雖然類似這是一個ComboBox; OP有一個ListBox和一個TextBox。假設OP在類型行爲方面類似於過濾器,那麼ICollectionView.Filter – 2011-02-02 19:54:11
我認爲你需要使用LINQ查詢,然後將數據綁定結果。在WPF中的一個例子是here,但我相信你可以在winforms中做同樣的事情。
簡單的例子;然而,這應該讓你開始...
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);
}
}
如果列表很長,Clear和AddRange不會對性能造成影響嗎?或者因爲這些都是引用,這並不重要? – Ziv 2011-02-03 00:09:57
爲了得到所期望的結果,你必須使用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);
}
}
}
我是在尋找這一點。
你使用的是什麼GUI框架?的WinForms? WPF?還有別的嗎? `TextBox`和`ListBox`不是純C#的一部分... – stakx 2011-02-02 19:31:43
WinForms,對不起,我應該說明這一點。 – 2011-02-02 19:45:26