在列表框中搜索 [英] Search in A ListBox
问题描述
HI
我正在尝试放置一个文本框以在listBox中进行搜索. 我有一个TextBox:带有以下代码的SearchText:
I'm trying to put a textbox to search in a listBox. I have a TextBox: SearchText with this code:
private void SearchText_TextChanged(object sender, EventArgs e)
{
int i = listBox3.FindString(SearchText.Text);
listBox3.SelectedIndex = i;
}
和加载时的列表框我有此代码
and a ListBox On the Load I have this code
List<string> str = GetListOfFiles(@"D:\\Music\\massive attack - collected");
listBox3.DataSource = str;
listBox3.DisplayMember = "str";
并在selectedIndexChanged上:
and on selectedIndexChanged :
private void listBox3_SelectedIndexChanged(object sender, EventArgs e)
{
player1.URL = listBox3.SelectedItem.ToString(); // HERE APPEAR THE ERROR "Object reference not set to an instance of an object."
// provaTxt.Text = listBox3.SelectedValue.ToString();
}
当我在SeachText中写下来查找歌曲时,在列表框的selectedIndexChanged行中收到错误消息(对象引用未设置为对象的实例."). 您是否知道在我的情况下在listBox中查找的另一种方法? 感谢您的分享. 问候
When I write down in the SeachText to find a songs I receive an error ("Object reference not set to an instance of an object.") in the line selectedIndexChanged of the ListBox. Do you know one more way to find in a listBox as my case? Thanks for your share. Nice Regards
推荐答案
听起来好像找不到该项目,所以SelectedItem
为空;尝试使用:
It sounds like the item wasn't found, so SelectedItem
was null; try using:
player1.URL = Convert.ToString(listBox3.SelectedItem);
我相信这可以处理空值情况(可以选择先测试空值).
I believe this handles the null case (altenatively, test for null first).
我也很想看看下面的列表:
I'd also be tempted to look in the underlying list:
List<string> items = (List<string>)listbox3.DataSource;
listbox3.SelectedIndex = items.FindIndex(s => s.StartsWith(searchFor));
例如:
For example:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
class MyForm : Form
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MyForm());
}
ListBox listbox;
TextBox textbox;
CheckBox multi;
public MyForm()
{
textbox = new TextBox { Dock = DockStyle.Top };
List<string> strings = new List<string> { "abc", "abd", "abed", "ab" };
listbox = new ListBox { Dock = DockStyle.Fill, DataSource = strings };
textbox.KeyDown += textbox_KeyDown;
Controls.Add(listbox);
Controls.Add(textbox);
listbox.SelectedIndexChanged += listbox_SelectedIndexChanged;
listbox.SelectionMode = SelectionMode.MultiExtended;
multi = new CheckBox { Text = "select multiple", Dock = DockStyle.Bottom };
Controls.Add(multi);
}
void listbox_SelectedIndexChanged(object sender, EventArgs e)
{
Text = Convert.ToString(listbox.SelectedItem);
}
void textbox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
string searchFor = textbox.Text;
List<string> strings = (List<string>)listbox.DataSource;
if (multi.Checked)
{
for (int i = 0; i < strings.Count; i++)
{
listbox.SetSelected(i, strings[i].Contains(searchFor));
}
}
else
{
listbox.ClearSelected();
listbox.SelectedIndex = strings.FindIndex(
s => s.Contains(searchFor));
}
}
}
}
这篇关于在列表框中搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!