2013-02-07 69 views
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; 
    } 
} 

代碼是有這個辦法代碼?謝謝:)

回答

2

有沒有簡單的方法與winforms做到這一點。 WPF更容易。用winforms你將不得不remove的項目。您可以在技術上使用數據綁定,但根本不推薦使用數據綁定,因爲根據MSDN文檔,列表框應該直接從您的代碼中使用。

第二個想法是,你可以透視列表框並將你想要隱藏的項目設置爲透明或其他東西,但它不容易。您可能需要考慮將所有值存儲在數組中,然後遍歷數組並僅添加所需的元素。或切換到WPF。

希望這會有所幫助。

+0

我決定隱藏在那裏它們被插入列表框,然後在可見列表框中轉移搜索項目通過編寫代碼歸檔相同的效果,這是可能的,但我認爲這將是很難編碼:( – Pyromancer

+1

@AlfredSanz這將工作,或者你可以像我提到的陣列使用 – FrostyFire

0

您可以在原點上覆蓋虛擬列表框,並將原點設置爲不可見。 然後你就可以像

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