c#列表框实时搜索

c#列表框实时搜索,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我正在学习c#,我从制作一些虚拟应用程序开始,里面有我可以练习的所有元素。我有搜索文本字段,下面有一个包含项目的列表框 我尝试使用此代码,但只有当我从第一个字母开始搜索时,我才得到结果。我希望能够通过单词之间的字母进行搜索 示例:列表项:“0445110085” 如果我从“0445”开始搜索,我将得到结果,但如果我从“5110”开始搜索,例如,我得到的消息项未找到 下面是我的代码 private void searchBox_TextChanged(object sender, EventArg

我正在学习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!");
    }
提前谢谢


注意:)

使用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!");
    }
}
private void searchBox\u text已更改(对象发送者,事件参数e)
{
字符串前缀=searchBox.Text;
bool-found=false;
对于(int i=0;i
从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!");
        }                
    }
private void textBox1\u TextChanged(对象发送者,事件参数e)
{
字符串myString=textBox1.Text;
bool-found=false;

对于(int i=0;i可能重复的可能重复的可能重复的这不是上述两项的重复,因为它们用于不同的控件和/或框架。将ComboBox替换为ListBox和我引用的一项。User2012384也可以工作。它肯定是重复的。我在第一次按键时出错。谢谢你的帮助。你能告诉我吗请告诉我您收到了什么错误?已修复。请立即重试。错误1“System.Windows.Forms.ListBox.ObjectCollection”不包含“Length”的定义,并且找不到接受类型为“System.Windows.Forms.ListBox.ObjectCollection”的第一个参数的扩展方法“Length”(是否缺少using指令或程序集引用?)C:\Users\shogy\Documents\visualstudio 2010\Projects\WindowsFormsApplication4a\WindowsFormsApplication4\Form1.cs 55 48 WindowsFormsApplication4抱歉。再次修复。现在没有工作室:/@AleksandarMilic不客气。编码和学习愉快!!:D:D希望有一天我能像你们今天帮助我一样帮助别人。贝丝关于此解决方案有两个问题。第一个问题很小,作者可能会接受(此类型的经典搜索使用StartsWith方法不包含)。第二个问题是,您没有检查列表的最后一项,因此将永远找不到它。@Seprum OP希望搜索列表框中的项目中是否存在他的搜索文本。StartsWith如何在这里起作用?FindString已经这样做了,但这不是问题所在。第二,所有项目都将被验证,直到列表框直到找到匹配项。你怎么说最后一项永远找不到?请看这部分:
i
。无需减去
1