如何在 c# winforms 的列表框中搜索时保持所选项目突出显示?
How to keep selected item highlighted while searching in listbox in c# winforms?
我有一个由一些项目填充的列表框,表单包含文本框和一个列表框。在文本框中,用户可以在列表框中搜索指定的条目。现在,如果用户在文本框中输入一些文本,则过滤后的列表框项目将显示在列表中。
现在,假设如果我之前在搜索之前选择了列表框中的任何项目,那么如果我搜索列表框,我最后选择的元素(如果它存在于过滤的项目中)不会突出显示。
如果筛选列表中存在我最后选择的项目,我该如何显示它。
示例 - 在列表框中搜索之前。
搜索列表后,我最后选择的项目(如果存在于过滤列表中)将失去显示选择。
我的搜索列表框的代码 -
private void vmS_TextBox1_TextChanged(object sender, EventArgs e)
{
string keyword = this.iBoxEventlistSearchTextBox.Text;
lBox_Event_list.Items.Clear();
foreach (string item in sortedEventList)
{
if (item.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
{
lBox_Event_list.Items.Add(item);
}
}
}
我还选择了应用于此列表框的索引更改事件处理程序,我不想再次触发它以用于过滤列表视图。我只想在筛选列表中突出显示它。
谢谢!
您可以保存在键入之前选择的项目并在剩余项目中搜索它,然后设置选择的项目(如果存在)。
private void vmS_TextBox1_TextChanged(object sender, EventArgs e)
{
string keyword = this.iBoxEventlistSearchTextBox.Text;
// Save the selected item before
var selectedItem = string.Empty;
if(lBox_Event_list?.Items?.Count > 0)
selectedItem = lBox_Event_list.SelectedItem;
lBox_Event_list.Items.Clear();
foreach (string item in sortedEventList)
{
if (item.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
{
lBox_Event_list.Items.Add(item);
}
}
// Search for it in the items and set the selected item to that
if(string.IsNullOrEmpty(selectedItem))
{
var index = lBox_Event_list?.Items?.IndexOf(selectedItem);
if(index != -1)
lBox_Event_list.SelectedIndex = index;
}
}
我有一个由一些项目填充的列表框,表单包含文本框和一个列表框。在文本框中,用户可以在列表框中搜索指定的条目。现在,如果用户在文本框中输入一些文本,则过滤后的列表框项目将显示在列表中。 现在,假设如果我之前在搜索之前选择了列表框中的任何项目,那么如果我搜索列表框,我最后选择的元素(如果它存在于过滤的项目中)不会突出显示。 如果筛选列表中存在我最后选择的项目,我该如何显示它。
示例 - 在列表框中搜索之前。
搜索列表后,我最后选择的项目(如果存在于过滤列表中)将失去显示选择。
我的搜索列表框的代码 -
private void vmS_TextBox1_TextChanged(object sender, EventArgs e)
{
string keyword = this.iBoxEventlistSearchTextBox.Text;
lBox_Event_list.Items.Clear();
foreach (string item in sortedEventList)
{
if (item.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
{
lBox_Event_list.Items.Add(item);
}
}
}
我还选择了应用于此列表框的索引更改事件处理程序,我不想再次触发它以用于过滤列表视图。我只想在筛选列表中突出显示它。
谢谢!
您可以保存在键入之前选择的项目并在剩余项目中搜索它,然后设置选择的项目(如果存在)。
private void vmS_TextBox1_TextChanged(object sender, EventArgs e)
{
string keyword = this.iBoxEventlistSearchTextBox.Text;
// Save the selected item before
var selectedItem = string.Empty;
if(lBox_Event_list?.Items?.Count > 0)
selectedItem = lBox_Event_list.SelectedItem;
lBox_Event_list.Items.Clear();
foreach (string item in sortedEventList)
{
if (item.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
{
lBox_Event_list.Items.Add(item);
}
}
// Search for it in the items and set the selected item to that
if(string.IsNullOrEmpty(selectedItem))
{
var index = lBox_Event_list?.Items?.IndexOf(selectedItem);
if(index != -1)
lBox_Event_list.SelectedIndex = index;
}
}