2014-12-04 96 views
0

所以我有一個列表框,充滿了從結構選項卡中的信息如下:刪除線和標籤vb.net更新

Private Sub Modifier_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    For i As Integer = 0 To frmConnecter.TabPolyFlix.Length - 1 
     ListBox1.Items.Add(frmConnecter.TabPolyFlix(i).strTitre) 
    Next 
End Sub 

而且我希望用戶選擇刪除TabPolyFlix (ListBox1.SelectedIndex),它必須獲得原標籤的列表框更新,從而

PS我試過,但它僅更新它在列表框,而不是在原來的標籤

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 
    Dim Temp As New List(Of ListViewItem) 

    For i As Integer = 0 To ListBox1.Items.Count - 1 
     If ListBox1.SelectedIndices.Contains(i) = False Then 
      Temp.Add(ListBox1.Items(i)) 
     End If 
    Next 

    ListBox1.Items.Clear() 

    For i As Integer = 0 To Temp.Count - 1 
     ListBox1.Items.Add(Temp(i)) 
    Next i 
End Sub 

回答

0

陣列有一個固定的大小。 TabPolyFlix最好使用List(Of ListViewItem)。然後直接分配清單列表框的DataSource

'Fill the listbox 
ListBox1.DisplayMember = "strTitre" 'You can also set this in the property grid. 
ListBox1.DataSource = frmConnecter.TabPolyFlix 

您還可以覆蓋的ListViewItemToString方法,以在列表框中顯示任何你想要的,並保持ListBox1.DisplayMember空。

現在,您可以直接刪除的項目列表:

frmConnecter.TabPolyFlix.Remove(ListBox1.SelectedItem) 

frmConnecter.TabPolyFlix.RemoveAt(ListBox1.SelectedIndex) 

,或者如果你想在一次

For Each i As Integer In ListBox1.SelectedIndices.Cast(Of Integer)() 
    frmConnecter.TabPolyFlix.Remove(ListBox1.Items(i)) 
Next 

刪除多個項目,並重新顯示清單:

ListBox1.DataSource = Nothing 
ListBox1.DataSource = frmConnecter.TabPolyFlix 

故事的寓意是:不要使用控件(在這種情況下是ListBox)作爲主數據結構。僅用於顯示和用戶交互。在與顯示無關的數據結構和對象(所謂的業務對象)上執行邏輯(所謂的業務邏輯),並在完成時顯示結果。