Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add event handler for ListView Items_added

Tags:

c#

winforms

In C# Windows Form Application; Is there an event handler for the ListView control that is fired when items are added to the listview items ?

like image 389
EgyEast Avatar asked Jun 14 '10 21:06

EgyEast


4 Answers

You dont need to edit other source!

Ok: change from ListView to myListView

Long time ago - but i search for an solution without implements with own ItemAdd-Function! The best way to do it... use the WndProc-Function.

Message: LVM_INSERTITEM

http://msdn.microsoft.com/en-us/library/windows/desktop/bb761107%28v=vs.85%29.aspx

//COMMCTRL.H
#define LVM_FIRST               0x1000           // ListView messages
#define LVM_INSERTITEMA         (LVM_FIRST + 7)  
#define LVM_INSERTITEMW         (LVM_FIRST + 77) 
//edit itemremove (LVM_DELETEITEM)
#define LVM_DELETEITEM          (LVM_FIRST + 8)

C#-implementation

class myListView : ListView {

    protected override void WndProc(ref Message m){
        base.WndProc(ref m);

        switch (m.Msg){
            case 0x1007:    //ListViewItemAdd-A
                System.Diagnostics.Debug.WriteLine("Item added (A)");
                break;
            case 0x104D:    //ListViewItemAdd-W
                System.Diagnostics.Debug.WriteLine("Item added (W)");
                break;
            //edit for itemremove
            case 0x1008:
                System.Diagnostics.Debug.WriteLine("Item removed");
                break;
            case 0x1009:
                System.Diagnostics.Debug.WriteLine("Item removed (All)");
                break;
            default:
                break;
        }
    }
}

Now you can fire your own ItemAddedEvent. I hope that helps other people, who have the same issue.

gegards raiserle

(edit: please vote ;) )

like image 98
raiserle Avatar answered Nov 12 '22 16:11

raiserle


I would see here or here. They are more or less the same answer, just written in very different styles. Short version, add ItemAdded event to ListViewItemCollection.

like image 33
Serapth Avatar answered Nov 12 '22 16:11

Serapth


There is no event that do that. But you can always create your own list box:

public class MyListView : ListView
{
    public void AddItem(ListViewItem item)
    {
        Items.Add(item);
        if (ItemAdded != null)
            ItemAdded.Invoke(this, new ItemsAddedArgs(item));
    }

    public EventHandler<ItemsAddedArgs> ItemAdded;
}

public class ItemsAddedArgs : EventArgs
{
    public ItemsAddedArgs(ListViewItem item)
    {
        Item = item;
    }

    public object Item { get; set; }
}
like image 37
Dig Avatar answered Nov 12 '22 16:11

Dig


Another alternative is to hold the items in an instance of the ObservableCollection class, set ListView.ItemsSource to that collection and subscribe to the ObservableCollection.CollectionChanged event.

like image 1
eugen_nw Avatar answered Nov 12 '22 17:11

eugen_nw