2008-09-06 4 views
3

ListView 컨트롤에있는 항목 수에 따라 다른 컨트롤을 사용하거나 사용하지 않도록 설정하고 싶습니다. ListView 또는 ListViewItemCollection에서이 작업을 수행 할 수있는 이벤트를 찾을 수 없습니다. 어쩌면 일반적으로 C#에서 컬렉션을 변경하는 방법을 볼 수 있습니까?ListView의 ListViewItems 수가 변경되면 트리거되는 이벤트가 있습니까? (Windows Forms)

내가 다른 이벤트 항목이 변경되지 않을 때 가끔 발생도, 심지어 사람에 만족하실 것입니다 만, 예를 들어 ControlAddedLayout 이벤트 :(작동하지 않았다.

답변

2

@Domenic

생각조차하지 않아도됩니다.

또 다른 솔루션은 ListView를 확장하는 것일 수 있으며 .items.add 및 items.remove를 호출하는 대신 물건을 추가하거나 제거 할 때 다른 함수를 호출 할 수 있습니다. 이벤트를 추가하지 않고도 추가하고 제거 할 수 있지만, .items.add 및 .items.remove가 직접 호출되지 않았는지 확인하기 위해 약간의 코드 검토만으로도 제대로 작동 할 수 있습니다. 여기에 약간의 예가 있습니다. 나는 오직 하나의 Add 함수를 보여 줬지만, 당신이 구현할 필요가있는 6 개가있다. 만약 모든 추가 함수를 사용하고 싶다면. 또한 .AddRange 및 .Clear를보고 싶을 수도 있습니다.

Public Class MonitoredListView 
    Inherits ListView 

    Public Event ItemAdded() 
    Public Event ItemRemoved() 

    Public Sub New() 
     MyBase.New() 
    End Sub 

    Public Function AddItem(ByVal Text As String) As ListViewItem 
     RaiseEvent ItemAdded() 

     MyBase.Items.Add(Text) 
    End Function 

    Public Sub RemoveItem(ByVal Item As ListViewItem) 
     RaiseEvent ItemRemoved() 

     MyBase.Items.Remove(Item) 
    End Sub 

End Class 
+0

변경 전의 이벤트를 발생시키는 것이 더 좋을 것이라고 생각합니다. 또는 두 가지 이벤트가있을 수 있습니다. 이전에는 RaiseEvent ItemAdding();을, 이후에는 RaiseEvent ItemAdded();를 사용합니다. –

0

그럴 수 없어 당신은 아마 당신이 ListViewItemCollection를 서브 클래스, 뭔가를 추가 할 때 다음과 유사한 코드로, 자신 만의 이벤트를 발생시킬 수 있습니다. 사용할 수있는 이벤트를 찾을 수 있습니다.

Public Class MyListViewItemCollection 
    Inherits ListView.ListViewItemCollection 

    Public Event ItemAdded(ByVal Item As ListViewItem) 

    Sub New(ByVal owner As ListView) 
     MyBase.New(owner) 
    End Sub 

    Public Overrides Function Add(ByVal value As System.Windows.Forms.ListViewItem) As System.Windows.Forms.ListViewItem 
     Dim Item As ListViewItem 

     Item = MyBase.Add(value) 

     RaiseEvent ItemAdded(Item) 

     Return Item 
    End Function 
End Class 
0

을 나는 당신이 여기에 할 수있는 최선의 것은 하위 클래스라고 생각합니다 ListView를 사용하여 원하는 이벤트를 제공하십시오.

관련 문제