您好,我有列表框中的项目列表 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();
}
}
非常感谢你
答案 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";