هل هناك حدث يتم تشغيله إذا تغير عدد ListViewItems في ListView؟(نماذج ويندوز)
سؤال
أرغب في تمكين/تعطيل بعض عناصر التحكم الأخرى بناءً على عدد العناصر الموجودة في ملفي ListView
يتحكم.لا يمكنني العثور على أي حدث من شأنه أن يفعل ذلك، سواء على ListView
نفسها أو على ListViewItemCollection
.ربما هناك طريقة لمشاهدة أي مجموعة بشكل عام في C# لإجراء التغييرات؟
سأكون سعيدًا بالأحداث الأخرى أيضًا، حتى تلك التي يتم تنشيطها أحيانًا عندما لا تتغير العناصر، ولكن على سبيل المثال ControlAdded
و Layout
الأحداث لم تنجح :(.
المحلول
@ دومينيك
لست متأكدًا تمامًا، لم تصل أبدًا إلى هذا الحد في عملية التفكير.
قد يكون الحل الآخر هو توسيع ListView، وعند إضافة أشياء وإزالتها، بدلاً من استدعاء .items.add و items.remove، يمكنك استدعاء وظائفك الأخرى.سيظل من الممكن الإضافة والإزالة دون رفع الأحداث، ولكن مع القليل من مراجعة التعليمات البرمجية للتأكد من عدم استدعاء .items.add و.items.remove مباشرة، يمكن أن يعمل الأمر بشكل جيد.وهنا مثال صغير.لقد أظهرت وظيفة إضافة واحدة فقط، ولكن هناك 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 وتوفير الأحداث التي تريدها.