2010-06-14 12 views
5

En C# Windows Form Application; ¿Hay un controlador de eventos para el control ListView que se activa cuando se agregan elementos a los elementos de la vista de lista?Añadir controlador de eventos para ListView Items_added

+0

posible duplicado de [ListView elemento añadido de evento] (http://stackoverflow.com/questions/2024401/listview-item-added-event) –

Respuesta

4

Lo haría see here o here. Son más o menos la misma respuesta, simplemente escrita en estilos muy diferentes. Versión corta, agregue evento ItemAdded a ListViewItemCollection.

+0

¡RTFM ni siquiera es una respuesta! – AHH

+0

@AHH - Especialmente cuando el FM no menciona nada como una respuesta a este OP. :) (A menos que esté buscando en una versión de .NET más allá de 4.0?) Cada respuesta funcional que he encontrado en cualquier lugar implica extender The Forms ListView para agregar esta característica. El enlace ** ver aquí ** está hablando de WPF, y el enlace ** aquí ** es otra extensión de la solución ListView. –

0

El marco no no define un evento como ItemAdded. Sin embargo, asegúrese de visitar esta solución alternativa: An Observer Pattern and an Extended ListView Event Model. Por ejemplo, los siguientes eventos se definen allí:

public event ListViewItemDelegate ItemAdded; 
public event ListViewItemRangeDelegate ItemRangeAdded; 
public event ListViewRemoveDelegate ItemRemoved; 
public event ListViewRemoveAtDelegate ItemRemovedAt;
4

No hay ningún evento que lo haga. Pero siempre se puede crear su propio cuadro de lista:

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; } 
} 
1

Otra alternativa es mantener los elementos en una instancia de la clase ObservableCollection, establecer ListView.ItemsSource a esa colección y suscribirse al evento ObservableCollection.CollectionChanged.

+0

Lamentablemente, 'Forms ListView' no tiene' ItemsSource'. Esa es una mejora 'WPF'. –

8

¡No es necesario editar otra fuente!

Ok: el cambio de ListView a MyListView

hace

largo tiempo - pero busco a una solución sin implementos con propia ItemAdd funciones! La mejor manera de hacerlo ... use la función WndProc.

mensaje: 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# -aplicación

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; 
     } 
    } 
} 

ya se puede despedir a su propia ItemAddedEvent. Espero que eso ayude a otras personas que tienen el mismo problema.

gegards raiserle

(edit: por favor voten;))

+1

Gracias por compartir esta información, ¿puedo preguntar cuál es el mensaje o caso de eliminación del artículo? – NetInfo

+2

http://msdn.microsoft.com/en-us/library/windows/desktop/bb774895%28v=vs.85%29.aspx vistazo a mi post: D – raiserle

+1

Muchas gracias, usted es una leyenda , Dios bendiga. – NetInfo

Cuestiones relacionadas