2013-04-02 27 views
1

我目前使用这种方法来精确匹配的字符串,并选择其中属于在ListBox指数:选择列表框的成员与部分匹配的字符串

private void searchbtn_Click(object sender, EventArgs e) 
{ 
    string term = searchbox.Text; 
    int index = memlist.FindString(term); 
    if (index != -1) 
     memlist.SetSelected(index, true); 
} 

是否可以有选择的所有部分匹配的字符串? 我该怎么做呢?

+0

你应该通过'Items'物业自己只是想迭代。 http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.items.aspx – Matthew

回答

2

您可以使用下面的代码,它选择的项目,这与你的字符串开始的索引,然后在它们之间迭代,并设置所选项目:

memlist.ClearSelected(); // clear previous selection 
memlist.Items.Cast<object>() 
     .Select((item, index) => new { Text = memlist.GetItemText(item), Index = index }) 
     .Where(x => x.Text.StartsWith(term, StringComparison.CurrentCultureIgnoreCase)) 
     .ToList() 
     .ForEach(x => memlist.SetSelected(x.Index, true)); 

BTW不要忘记设置列表框的SelectMode到多选。


您也可以选择在foreach循环项目:

var indexesToSelect = memlist.Items.Cast<object>() 
     .Select((item, index) => new { Text = memlist.GetItemText(item), Index = index }) 
     .Where(x => x.Text.StartsWith(term, StringComparison.CurrentCultureIgnoreCase)) 
     .Select(x => x.Index); 

foreach(int index in indexesToSelect) 
    memlist.SetSelected(index, true); 
+1

谢谢,这正是我需要的! – Bitz

+0

@Bitz感谢您的接受。顺便说一句,我更新了更常见的解决方案,这将工作,如果你的列表框绑定到一些对象 –