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,这样它就会减少颜色,等等。
此代码根本没有着色。
答案 0 :(得分:0)
你可以做的只是在else部分中添加item.Remove()
。然后它将缩小列表范围。 但是您需要将删除的项目保留在其他地方并适当添加。否则它将是一个空列表。
item.Selected = false;
item.BackColor = Color.White;
item.ForeColor = Color.Black;
item.Remove();
答案 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()))