我创建了一个列表框并且它完美地工作,我也创建了一个搜索功能,但是我想隐藏列表框中的项目并仅在通过索引搜索时显示它们。 这是我添加项目的代码
private void Savebtn_Click(object sender, EventArgs e)
{
addTolist(gatherItem());
refreshView();
}
private void addTolist(Person p)
{
Person.listperson.Add(p);
}
private void refreshView()
{
listBox1.Items.Add(getItem());
}
private String getItem()
{
String result = null;
foreach (Person p in Person.listperson)
{
result = p.lastname;
}
return result;
}
这是我的搜索代码
private void button1_Click(object sender, EventArgs e)
{
int index = listBox1.FindString(textBox6.Text);
if (0 <= index)
{
listBox1.SelectedIndex = index;
}
}
有没有办法解决这个问题?谢谢:))
答案 0 :(得分:2)
winforms没有简单的方法。使用WPF更容易。使用winforms,您必须remove
项目。您可以在技术上使用数据绑定,但根本不建议使用数据绑定,因为根据MSDN文档,listbox应该直接在您的代码中使用。
第二个想法,你可以透支列表框并将要隐藏的项目设置为透明或其他东西,但这并不容易。您可能需要考虑将所有值存储在数组中,然后循环遍历数组并仅添加所需的元素。或者切换到WPF。
希望这有帮助。
答案 1 :(得分:0)
您可以在原点上覆盖虚拟ListBox,并将原点设置为不可见。 然后,您可以通过编写
等代码来存档相同的效果class DummyItem {
public string text;
public int index;
public override string ToString() {
return text;
}
}
public void build_dummy() {
listbox_dummy.Items.Clear();
for (int i = 0; i < listbox_origin.Items.Count; i++) {
// replace with your own judgement
if (! should_hide(listbox_origin.Items[i])) {
DummyItem item = new DummyItem();
item.text = listbox_origin.Items[i].ToString();
item.index = i;
listbox_dummy.Items.Add(item);
}
}
}
private void listbox_dummy_SelectedIndexChanged(object sender, EventArgs e) {
var item = (DummyItem) listbox_dummy.SelectedItem;
var index = item.index;
listbox_origin.SelectedIndex = index;
}