搜索后,使用“文本更改”事件重置列表视图的背景颜色



我有一个文本框,可用于在列表视图中搜索项目和子项目。 找到匹配项后,物品的BG颜色会发生变化。 这工作正常,但是当我从文本框中删除条目时,项目和子项目仍然保持突出显示,直到我输入另一个搜索。
我不确定这是我正在使用的事件还是我的逻辑问题。 我希望当用户在搜索中键入内容时动态突出显示这些项目,但如果他们删除该条目,我希望BG颜色变回白色。

private void txtSearchMenu_TextChanged(object sender, EventArgs e)
    {
        string searchVal = txtSearchMenu.Text.ToLower();
        if (searchVal != "")
        {
            foreach (ListViewItem item in lvMenuItems.Items)
            {
                foreach (ListViewItem.ListViewSubItem subSearch in item.SubItems)
                {
                    if (subSearch.Text.ToLower().Contains(searchVal) == true)
                    {
                        subSearch.BackColor = Color.MediumAquamarine;
                    }
                    else
                    {
                        subSearch.BackColor = Color.White;
                    }
                }
                item.UseItemStyleForSubItems = false;
            }
        }
    }

当我从文本框中删除条目时,项目和子项目仍然保持突出显示,直到我输入另一个搜索

这是因为如果文本框为空,则不执行任何操作。

像这样在 foreach 内部移动检查空字符串:

private void txtSearchMenu_TextChanged(object sender, EventArgs e)
{
    string searchVal = txtSearchMenu.Text.ToLower();
    foreach (ListViewItem item in lvMenuItems.Items)
    {
        foreach (ListViewItem.ListViewSubItem subSearch in item.SubItems)
        {
            // move condition here
            if (searchVal != "" && subSearch.Text.ToLower().Contains(searchVal) == true)
            {
                subSearch.BackColor = Color.MediumAquamarine;
            }
            else
            {
                subSearch.BackColor = Color.White;
            }
        }
        item.UseItemStyleForSubItems = false;
    }
}

正如辛塔尔所说:

private void txtSearchMenu_TextChanged(object sender, EventArgs e)
{
    string searchVal = txtSearchMenu.Text.ToLower();
    if (searchVal != "")
    {
        foreach (ListViewItem item in lvMenuItems.Items)
        {
            foreach (ListViewItem.ListViewSubItem subSearch in item.SubItems)
            {
                if (subSearch.Text.ToLower().Contains(searchVal) == true)
                {
                    subSearch.BackColor = Color.MediumAquamarine;
                }
                else
                {
                    subSearch.BackColor = Color.White;
                }
            }
            item.UseItemStyleForSubItems = false;
        }
    }
    else
    {
        foreach (ListViewItem item in lvMenuItems.Items)
        {
            foreach (ListViewItem.ListViewSubItem subSearch in item.SubItems)
            {
                subSearch.BackColor = Color.White;
            }
        }
    }
}

最新更新