如何使用textBox textchanged事件搜索listView特定项?

时间:2016-06-22 17:07:54

标签: c# .net winforms

private void textBox4_TextChanged(object sender, EventArgs e)
        {
            foreach (ListViewItem item in ListViewCostumControl.lvnf.Items)
            {
                if (item.Text.ToLower().StartsWith(textBox1.Text.ToLower()))
                {
                    item.Selected = true;
                    item.BackColor = Color.CornflowerBlue;
                    item.ForeColor = Color.White;
                }
                else
                {
                    item.Selected = false;
                    item.BackColor = Color.White;
                    item.ForeColor = Color.Black;
                }
            }
            if (ListViewCostumControl.lvnf.SelectedItems.Count == 1)
            {
                ListViewCostumControl.lvnf.Focus();
            }
        }

例如在listView中,如果我有30个项目,我输入textBox F所以它会显示所有带F的项目,但后来我继续输入Form1然后它应该自动将结果缩小到只有Form1我的意思将它们涂上CornflowerBlue或更好的红色。

所以首先,当我只键入F时,它将以红色显示多个项目,然后我继续输入Form1,这样它就会减少颜色,等等。

此代码根本没有着色。

3 个答案:

答案 0 :(得分:0)

你可以做的只是在else部分中添加item.Remove()。然后它将缩小列表范围。 但是您需要将删除的项目保留在其他地方并适当添加。否则它将是一个空列表。

item.Selected = false;
item.BackColor = Color.White;
item.ForeColor = Color.Black;
item.Remove();

iTextSharp 4.1.6

答案 1 :(得分:0)

我构建表单并使用你的代码(没有" ListViewCostumControl.lvnf") 而且它运作良好。 这是代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        listView1.View = View.Details;
        listView1.GridLines = true;
        listView1.FullRowSelect = true;

        //Add column header
        listView1.Columns.Add("ProductName", 100);
        listView1.Columns.Add("Price", 70);
        listView1.Columns.Add("Quantity", 70);

        //Add items in the listview
        string[] arr = new string[4];
        ListViewItem itm;

        //Add first item
        arr[0] = "product_1";
        arr[1] = "100";
        arr[2] = "10";
        itm = new ListViewItem(arr);
        listView1.Items.Add(itm);

        //Add second item
        arr[0] = "product_2";
        arr[1] = "200";
        arr[2] = "20";
        itm = new ListViewItem(arr);
        listView1.Items.Add(itm);
    }


    private void textBox4_TextChanged(object sender, EventArgs e)
    {
        foreach (ListViewItem item in listView1.Items)
        {
            if (item.Text.ToLower().StartsWith(textBox1.Text.ToLower()))
            {
                item.Selected = true;
                item.BackColor = Color.CornflowerBlue;
                item.ForeColor = Color.White;
            }
            else
            {
                item.Selected = false;
                item.BackColor = Color.White;
                item.ForeColor = Color.Black;
            }
        }
        if (listView1.SelectedItems.Count == 1)
        {
            listView1.Focus();
        }
    }
}

所以也许是" ListViewCostumControl.lvnf" ..

中的问题

答案 2 :(得分:0)

您的TextChanged活动已在textBox4,但您的代码正在检查textBox1的文字。

我想你会想要检查你输入过滤器的同一个TextBox上的文本。

更改

if (item.Text.ToLower().StartsWith(textBox1.Text.ToLower()))

if (item.Text.ToLower().StartsWith(textBox4.Text.ToLower()))