1

リストボックスを作成して完全に機能し、検索機能も作成しましたが、リストボックス内のアイテムを非表示にして、インデックスで検索した場合にのみ表示したいと思います。これがアイテムを追加するための私のコードです

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

これを行う方法はありますか?ありがとう :)

4

2 に答える 2

2

WinFormsでこれを行う簡単な方法はありません。WPFを使用するとはるかに簡単になります。WinFormsを使用するとremove、アイテムを使用する必要があります。技術的にはデータバインディングを使用できますが、MSDNのドキュメントによるとリストボックスはコードから直接使用されることになっているため、まったくお勧めしません。

考え直してみると、リストボックスを上書きして、非表示にするアイテムを透明などに設定できますが、簡単ではありません。すべての値を配列に格納してから、配列をループして、必要な要素のみを追加することを検討することをお勧めします。または、WPFに切り替えます。

お役に立てれば。

于 2013-02-07T00:32:17.073 に答える
0

オリジン1でダミーのリストボックスをカバーし、オリジン1を非表示に設定できます。次に、次のようなコードを記述して同じ効果をアーカイブできます。

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-09-19T23:18:20.897 に答える