我正在学习c#,我开始制作一些虚拟应用程序,其中包含我可以练习的所有元素。我有搜索文本字段,下面有一个包含项目的列表框。
我尝试使用此代码,但只有在我从第一个字母开始搜索时才得到结果。我希望能够通过单词之间的字母进行搜索。
示例:列表项:" 0445110085" 如果我开始从" 0445"我会得到结果,但我开始用" 5110"例如,我找不到消息项。
以下是我的代码,
private void searchBox_TextChanged(object sender, EventArgs e)
{
string myString = searchBox.Text;
int index = listBox1.FindString(myString, -1);
if (index != -1)
{
listBox1.SetSelected(index,true);
}
else
MessageBox.Show("Item not found!");
}
提前致谢。
问候:)
答案 0 :(得分:3)
使用 StartsWith 方法检查特定项目是否以您输入的字符串开头:
private void searchBox_TextChanged(object sender, EventArgs e)
{
string prefix = searchBox.Text;
bool found = false;
for(int i = 0; i < listBox.Items.Count; i++)
{
if(listBox.Items[i].ToString().StartsWith(prefix))
{
listBox.SelectedItem = listBox.Items[i];
found = true;
break;
}
}
if(!found)
{
MessageBox.Show("Item not found!");
}
}
答案 1 :(得分:3)
来自FindString的详细信息,
在System.Windows.Forms.ListBox中查找以开头的第一项 指定的字符串。
因此,您必须自定义编写代码才能实现它。如下所示,
private void textBox1_TextChanged(object sender, EventArgs e)
{
string myString = textBox1.Text;
bool found = false;
for (int i = 0; i <= listBox1.Items.Count - 1; i++)
{
if(listBox1.Items[i].ToString().Contains(myString))
{
listBox1.SetSelected(i, true);
found = true;
break;
}
}
if(!found)
{
MessageBox.Show("Item not found!");
}
}
答案 2 :(得分:0)
当然不是最好的解决方案,但它有效
List<string> search = new List<string>();
List<string> listBoxItems = new List<string>();
listBoxItems = listBox1.Items.Cast<string>().ToList();
private void textBox1_TextChanged(object sender, EventArgs e)
{
if(!string.IsNullOrEmpty(textBox1.Text))
{
search.Clear();
listBoxItems.ForEach(x =>
{
if (IsSubstring(textBox1.Text, x))
{
search.Add(x);
}
});
listBox1.DataSource = null;
listBox1.DataSource = search;
}
else
{
listBox1.DataSource = listBoxItems;
}
}
public bool IsSubstring(string text, string x)
{
if (x.ToLower().Contains(text.ToLower()))
{
return true;
}
else
{
return false;
}
}