How to detect if items are added to a ListBox (or CheckedListBox) control
I don't know of any event that you can watch to show that an item has been added to a ListBox. Perhaps you can use the Win32 method you described instead (i.e. grab a handle, use WndProc, etc.).
Alternately, perhaps you can use another class that adds items instead. For example, rather than calling the Add method on the ListBox directly, you could have user-actions call the Add method inside the new class which then adds the item to the ListBox. You could set an event inside that class that would allow you to watch what's been added.
I also like the idea of subclassing the ListBox as mentioned by another poster....
This solution seems to work - in my situation, I implemented it in VB. I just created an ExtendedListbox class which inherits the listbox control, implements INotifyPropertyChanged and shadows the Items Property.
Imports System.ComponentModel
Public Class ExtendedListBox:Inherits ListBox:Implements INotifyPropertyChanged
Public Shadows Property Items() As ObjectCollection
Get
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Items"))
Return MyBase.Items
End Get
Set(value As ObjectCollection)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Items"))
MyBase.Items.Clear()
For Each o As Object In value
MyBase.Items.Add(o)
Next
End Set
End Property
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
End Class
Here's a post on another forum that recommends creating a child class that includes that behaviour.
http://www.eggheadcafe.com/forumarchives/netframeworkcompactframework/jul2005/post23265940.asp