2014-04-16 2 views
1

내 버튼에 내 데이터베이스의 모든 항목에 대한 패널에 버튼을 추가하는 절차가 있습니다. 이 프로 시저에 추가하려는 것은 btnAddItemName이라는 것을 제외하고 이전의 모든 기존 컨트롤을 패널에서 제거하는 것입니다. 나는 그것을 어떻게 성취 할 수 있을지 전혀 모른다. 컨트롤을 추가하고 제거하고 모두 지울 수는 있지만 예외를 만드는 방법은 아닙니다.하나의 패널을 제외하고 모든 버튼 제거하기

Dim buttons() As Button = flpItem.Controls.OfType(Of Button)().ToArray 
For i As Integer = buttons.Length - 1 To 0 Step -1 
    If buttons(i).Name <> btnAddItemName.Name Then 
    buttons(i).Dispose() 
    End If 
Next 

참고 : 호출 flpItem.Controls

Private Sub btnCategory_Click(sender As Object, e As EventArgs) Handles btnCategory.Click 

    Dim source As DataTable = ItemInventoryControlTableAdapter.GetData 

    For Each row As DataRow In source.Rows 

     Dim btn As New InventoryItemButton() 

     btn.Name = DirectCast(row("ItemName"), String) 
     btn.Text = btn.Name 

     'Assign the click event to each button 
     AddHandler btn.Click, AddressOf handleItemButton 

     'Add button to the item panel 
     flpItem.Controls.Add(btn) 

    Next 
    End Sub 

답변

0

시도가 인덱스 위치를 엉망으로 피하기 위해 뒤로 목록을 반복 한 후 목록으로 버튼을 분리하고 : 여기에 지금까지 무엇을 가지고 클리어는 그러한 통제를 처분하지 않습니다.

1

시도 :

flpItem.Controls.OfType(Of Button).Except({btnAddItemName}).ToList().ForEach(Sub(btn As Button) btn.Dispose()) 

이 얻을 것이다 유형 List을 통해 모든 다음 (btnAddItemName)에 필요한 버튼을 제외한 패널 (flpItem)에서 버튼, 반복을 포함 ButtonList 및 각각 Button.

단순화하려면

flpItem.Controls.OfType(Of Button).Except({btnAddItemName}).ToList().ForEach(AddressOf RemoveButton) 
Sub RemoveButton(btn As Button) 
    btn.Dispose() 
End Sub 

또는를 :

Dim btnList As List(Of Button) = flpItem.Controls.OfType(Of Button).ToList() 
btnList.Remove(btnAddItemName) 
For Each btn As Button In btnList 
    btn.Dispose() 
Next 
+0

몇 가지 설명을 제공하십시오. –

+0

물론, 나는 나의 대답을 편집했다. –

관련 문제