【问题标题】:show/ hide items in the listbox显示/隐藏列表框中的项目
【发布时间】:2013-02-07 00:27:56
【问题描述】:

我做了一个列表框,它工作得很好,我也做了一个搜索功能,但我想隐藏列表框中的项目,只在通过索引搜索时显示它们。 这是我添加项目的代码

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;
    }
}

有办法吗?谢谢:)

【问题讨论】:

    标签: c# winforms listbox


    【解决方案1】:

    使用 winform 没有简单的方法可以做到这一点。使用 WPF 更容易。使用 winforms,您必须remove 项目。从技术上讲,您可以使用数据绑定,但根本不建议这样做,因为根据 MSDN 文档,列表框应该直接从您的代码中使用。

    再想一想,您可以过度绘制列表框并将要隐藏的项目设置为透明或其他东西,但这并不容易。您可能需要考虑将所有值存储在一个数组中,然后遍历数组并仅添加您想要的元素。或者切换到 WPF。

    希望这会有所帮助。

    【讨论】:

    • 我决定隐藏插入它们的列表框,然后将搜索到的项目转移到可见列表框中,这是可能的,但我认为它会被硬编码:(
    • @AlfredSanz 这行得通,或者你可以使用我提到的数组
    【解决方案2】:

    您可以在原始列表框上覆盖一个虚拟列表框,并将原始列表设置为不可见。 然后你可以通过编写类似的代码来归档相同的效果

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2011-10-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多