在列表框中搜索,以逗号

时间:2016-04-05 00:45:36

标签: c# listbox

您好,我有列表框中的项目列表 Landen,Lucie,812-692-5576,Jig Is Up 我需要搜索姓名或电话或比率..... 我输入了这段代码,但他在字符串中搜索

中的任何位置
        int x = 0;

        string match = textBox1.Text;

        if (textBox1.Text.Length != 0)
        {
            bool found = true;
            while (found)
            {
                if (listBox1.Items.Count == x)
                {
                    listBox1.SetSelected(lastMatch, true);
                    found = false;
                    textBox2.Text = listBox1.SelectedItem.ToString();
                }
                else
                {
                    listBox1.SetSelected(x, true);
                    match = listBox1.SelectedItem.ToString();
                    if (match.Contains(textBox1.Text))
                    {
                        lastMatch = x;
                        found = false;
                    }
                    x++;
                    textBox2.Text = listBox1.SelectedItem.ToString();
                }
            }

非常感谢你

3 个答案:

答案 0 :(得分:1)

创建一个类来保存您的信息。

public class Card
{
    public string Name { get; set; }
    public string Phone { get; set; }
    public string Note { get; set; }

    public override string ToString()
    {
        return string.Format("{0}, {1}, {2}", Name, Phone, Note);
    }
}

根据需要创建它的实例。

var card = new Card { Name = "Landen, Lucie", Phone = "812-692-5576", Note = "Jig Is Up" };

使用该类填充ListBox

var allTheCards = new List<Card>();
// populate the cards

listBox1.DataSource = allTheCards;

现在您可以搜索特定字段。您必须在代码中进行其他更新,以适应您自己的类而不仅仅是字符串。

Card match = listBox1.SelectedItem;

if (match.Name.Contains(textBox1.Text)
    || match.Phone.Contains(textBox1.Text)
    || match.Note.Contains(textBox1.Text))
{
    ...
}

扩展您的评论以及TaW建议的内容,您仍然可以在从文件中读取时使用此解决方案。只需循环搜索结果,然后使用结果填充Card类。

这是一种可行的方法,使用LINQ:

listBox1.DataSource = (from lines in File.ReadAllLines("someFile.txt")
                       let parts = lines.Split(',')
                       select new Card
                                  {
                                      Name = string.Format("{0} {1}", parts[1], parts[0]),
                                      Phone = parts[2],
                                      Note = parts[3]
                                  }).ToList();

答案 1 :(得分:0)

我从您的代码中读到的是,您需要一个逻辑来搜索List内容并突出显示第一个匹配的列表项并使用SelectedListItem更新TextBox值。

这段代码完成了我的解释。

 for(int i=0;i<listBox1.Items.Count;++i)
 {
     if(listBox1.Items[i].ToString().Contains("searchString"))
     {
           // match 
           listBox1.SetSelected(i, true);
           textBox2.Text = listBox1.SelectedItem.ToString();               
     }  
 }

答案 2 :(得分:0)

您可以通过foreach实现此目的,如下所示:

bool itemFound = false;     
object currentObject = null;  // remains null if no match found   
foreach (var item in listBox1.Items)
{
    if (item.ToString().Contains(txtbox1.Text))
    {
        currentObject = item; // will give you the current item   
        textBox2.Text=item.ToString();                
        break; // Break; if you need to check for the first occurance
    }
}
if (currentObject != null)
   listBox1.SelectedItem = currentObject;
else
   textBox2.Text = "Item not found";