coi*_*ird 3 c# listview winforms
我的程序生成充满信息的ListView。我在文本框中键入一个可能与 ListView 中的项目名称之一匹配的名称。我希望这个输入的名称能够从 ListView 中清除不匹配的名称。
例如,如果我输入“abc”,“uvw”和“xyz”等名称将不再显示,但“abc”和“abcde”仍会显示在列表视图中。
最终目标是能够选中我想要的名称旁边的复选框,并搜索更多名称,最终选择几个名称,而无需重置复选框。
现在我单击一个按钮并填充 ListView:
private void button1_Click(object sender, EventArgs e)
{
List<string> myList = getList();
foreach(string s in myList)
{
listView1.Items.Add(s);
}
}
Run Code Online (Sandbox Code Playgroud)
getList()只返回List<string>我想要的所有名称中的一个。
当我在文本框中输入内容时,我不知道如何使 ListView 实时更新。我可以通过基于循环列表并检查每个名称来重新填充 ListView 来单击按钮来更新它,但这不是我想要的。它也不保留选中的复选框,因为它每次都是新生成的列表。
我读到了有关“文本更改侦听器”的内容,但我不确定这就是我应该在这里使用的......
通过过滤,您需要某种方式来记住选择了哪些 ListViewItems,因此您不想将所有 ListViewItems 插入到列表视图中,而是希望在主列表中实例化它们。然后将 TextChanged 事件处理程序附加到文本框,当文本更改时,您将显示项目。
List<ListViewItem> masterlist;
public Form1()
{
InitializeComponent();
masterlist = new List<ListViewItem>();
}
private void button1_Click(object sender, EventArgs e)
{
// Populate the masterlist
masterlist.Clear();
foreach(string s in getList())
{
masterlist.Items.Add(new ListViewItem(s));
}
// Display the items in the listview
DisplayItems();
}
private void DisplayItems()
{
listView1.Items.Clear();
// This filters and adds your filtered items to listView1
foreach(ListViewItem item in masterlist.Where(lvi => lvi.Text.ToLower().Contains(textBox1.Text.ToLower().Trim())))
{
listView1.Items.Add(item);
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
// Re-display the items when the filter changes
DisplayItems();
}
Run Code Online (Sandbox Code Playgroud)
当您直接处理 ListViewItems 时,masterlist它们在换入和换出时将保留其选中状态listView1。
我假设您的过滤器文本框名为textBox1.
| 归档时间: |
|
| 查看次数: |
6820 次 |
| 最近记录: |