C# 使用文本框为listView项着色时,如何使其以小写和大写显示结果?

C# 使用文本框为listView项着色时,如何使其以小写和大写显示结果?,c#,.net,winforms,C#,.net,Winforms,如果我在文本框中键入例如:form1,它将为文本form1中包含的所有项目着色,但如果我键入form1,它将仅为文本中带有form1的部分项目着色 不知道为什么,因为在文本中所有带有form1的项目中,它是带有大F的form1 所以我不明白为什么如果我输入Form1,它会给所有Form1上色,而如果输入Form1,它只会给部分项目上色 我用来给物品上色的方法 private void ColorListViewItems(Color color, DoWorkEventArgs e)

如果我在文本框中键入例如:form1,它将为文本form1中包含的所有项目着色,但如果我键入form1,它将仅为文本中带有form1的部分项目着色

不知道为什么,因为在文本中所有带有form1的项目中,它是带有大F的form1 所以我不明白为什么如果我输入Form1,它会给所有Form1上色,而如果输入Form1,它只会给部分项目上色

我用来给物品上色的方法

private void ColorListViewItems(Color color, DoWorkEventArgs e)
        {
            for (int i = 0; i < ListViewCostumControl.lvnf.Items.Count; i++)
            {
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    if (textBox4.InvokeRequired)
                    {
                        textBox4.Invoke(new MethodInvoker(delegate
                        {
                            if (ListViewCostumControl.lvnf.Items[i].Text.Contains(textBox4.Text))
                            {
                                ListViewCostumControl.lvnf.Items[i].ForeColor = color;
                            }
                            backgroundWorker2.ReportProgress(i * 100 / ListViewCostumControl.lvnf.Items.Count);
                        }));
                    }
                }
            }
        }
在dowork progresschanged和completed events中

BackgroundWorker worker;
        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            worker = sender as BackgroundWorker;
            ColorListViewItems(Color.Red, e);
        }

        private void backgroundWorker2_ProgressChanged_1(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
        }

        private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            progressBar1.Value = 0;
        }
我想做的是,当我在文本框4中键入字母“f”或“f”时,它会将包含“f”/“f”的项目文本中的所有项目都涂成红色,然后如果我继续在文本框4中键入字母“o”或“o”,它现在会将包含FO的所有项目涂成颜色,如果我继续键入Form1,它应该将包含FO的所有项目涂成颜色Form1或Form1或Form1

因此,每次我在文本框4中键入另一个字母时,如果backgroundworker很忙,它就会停止,然后重新开始

如果文本框4为空,则会将所有项目的颜色恢复为默认的黑色


现在的问题是小写和大写。

您是否尝试以区分大小写的方式执行此操作?如果是这样的话,您应该得到预期的结果,其中包含“F”的项目与包含“F”的项目不同

如果您是在
“f”==“f”(应被视为相同)
的位置执行此操作,那么为什么不将所有内容转换为较低的值

textBox4.Invoke(new MethodInvoker(delegate
{
    if (ListViewCostumControl.lvnf.Items[i].Text.ToLower().Contains(textBox4.Text.ToLower()))
    {
        ListViewCostumControl.lvnf.Items[i].ForeColor = color;
    }
    backgroundWorker2.ReportProgress(i * 100 / ListViewCostumControl.lvnf.Items.Count);
})
我希望我正确理解了你的问题

BackgroundWorker worker;
        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            worker = sender as BackgroundWorker;
            ColorListViewItems(Color.Red, e);
        }

        private void backgroundWorker2_ProgressChanged_1(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
        }

        private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            progressBar1.Value = 0;
        }
textBox4.Invoke(new MethodInvoker(delegate
{
    if (ListViewCostumControl.lvnf.Items[i].Text.ToLower().Contains(textBox4.Text.ToLower()))
    {
        ListViewCostumControl.lvnf.Items[i].ForeColor = color;
    }
    backgroundWorker2.ReportProgress(i * 100 / ListViewCostumControl.lvnf.Items.Count);
})