ListView의 ListViewItem 수가 변경되면 트리거되는 이벤트가 있나요?(윈도우 폼)

StackOverflow https://stackoverflow.com/questions/47169

  •  09-06-2019
  •  | 
  •  

문제

내 폴더에 있는 항목 수에 따라 다른 컨트롤을 활성화/비활성화하고 싶습니다. ListView 제어.이 작업을 수행하는 이벤트를 찾을 수 없습니다. ListView 자체적으로 또는 ListViewItemCollection.C#의 모든 컬렉션에서 변경 사항을 일반적으로 관찰할 수 있는 방법이 있을까요?

다른 이벤트에도 만족하겠습니다. 항목이 변경되지 않을 때 가끔 실행되는 이벤트도 있지만 예를 들어 ControlAdded 그리고 Layout 이벤트가 작동하지 않았습니다 :(.

도움이 되었습니까?

해결책

@도메닉

확실하지 않습니다. 사고 과정에서 그렇게 멀리까지 도달한 적이 없습니다.

또 다른 해결책은 ListView를 확장하는 것일 수 있으며, 항목을 추가하고 제거할 때 .items.add 및 items.remove를 호출하는 대신 다른 함수를 호출합니다.이벤트가 발생하지 않고도 추가 및 제거가 가능하지만 약간의 코드 검토를 통해 .items.add 및 .items.remove가 직접 호출되지 않았는지 확인하면 꽤 잘 작동할 수 있습니다.여기에 작은 예가 있습니다.나는 1개의 추가 기능만 보여줬지만, 사용 가능한 모든 추가 기능을 사용하려면 구현해야 할 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

다른 팁

사용할 수 있는 이벤트를 찾을 수 없습니다.아마도 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

여기서 할 수 있는 가장 좋은 방법은 ListView를 하위 클래스로 분류하고 원하는 이벤트를 제공하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top