C#按listview查找文本并给它一个背景色

时间:2013-12-30 11:31:40

标签: c# winforms listview backcolor

我想找到在listView1的textBox1字段中输入的某个字符串(文本)。所以当前的问题是,下面的代码可以正常工作,它的背景颜色发生了变化,另一个项目在悬停时会有相同的背景颜色。当选择行然后盘旋时,颜色会发生变化(当盘旋时深蓝色会变亮).listView保存在tabControl中。 任何想法为什么它旁边的项目得到背景颜色?任何解决方案都会很棒。

foreach (ColumnHeader sColumnHeader in listView1.Columns)
{
    foreach (ListViewItem items in listView1.Items)
    {
        if (items.SubItems[sColumnHeader.Index].Text == textBox1.Text)
        {
            listView1.Items[items.Index].UseItemStyleForSubItems = false;
            listView1.Items[items.Index].SubItems[sColumnHeader.Index]
                                        .BackColor = Color.LightBlue;
         }
    }
}

以下是问题截图的链接: http://i.stack.imgur.com/A7H7E.png

3 个答案:

答案 0 :(得分:0)

更新使用此代码

       foreach (ColumnHeader sColumnHeader in listView1.Columns)
        {
            foreach (ListViewItem item in listView1.Items)
            {
                if (item.SubItems[0].Text == textBox1.Text)
                {
                    listView1.Items[item.Index].UseItemStyleForSubItems = false;
                    listView1.Items[item.Index].SubItems[0]
                                                .BackColor = Color.LightBlue;
                }
            }
        }

答案 1 :(得分:0)

[这不是一个真正意义上的答案,但是评论的时间太长了]

您显示的代码对我来说非常合适 - 与textBox1中的文本匹配的子项目的背景更改为LightBlue。如果颜色在选择或悬停时发生变化,则与此特定位代码无关。

显然,如果您将FullRowSelect设置为true,则在选择行时背景会发生变化。

顺便说一句,你应该使用更少的索引 - 而只是迭代ItemsSubItems集合:

foreach (ListViewItem item in listView1.Items)
{
    foreach (ListViewItem.ListViewSubItem subItem in item.SubItems) 
    {
        if (subItem.Text == textBox1.Text)
        {
            item.UseItemStyleForSubItems = false;
            subItem.BackColor = Color.LightBlue;
        }
    }
}

答案 2 :(得分:0)

问题是由于listView上的激活是在“OneClick”上。

将其重置为标准修复此问题。

对不起,感谢所有帮助过的人。