2010-06-14 43 views
5

Trong ứng dụng biểu mẫu C# Windows; Có một trình xử lý sự kiện cho điều khiển ListView được kích hoạt khi các mục được thêm vào các mục listview không?Thêm trình xử lý sự kiện cho ListView Items_added

+0

thể trùng lặp của [ListView mục Added Event] (http://stackoverflow.com/questions/2024401/listview-item-added-event) –

Trả lời

4

Tôi sẽ see here hoặc here. Họ có nhiều hay ít câu trả lời giống nhau, chỉ được viết theo các phong cách rất khác nhau. Phiên bản ngắn, thêm sự kiện ItemAdded vào ListViewItemCollection.

+0

RTFM thậm chí không phải là câu trả lời! – AHH

+0

@AHH - Đặc biệt khi FM không đề cập đến bất cứ điều gì giống như câu trả lời cho OP này. :) (Trừ khi bạn đang tìm kiếm trong một phiên bản của NET ngoài 4.0?) Mỗi ​​câu trả lời chức năng tôi đã tìm thấy bất cứ nơi nào liên quan đến việc mở rộng Các hình thức ListView để thêm tính năng này. Liên kết ** xem ở đây ** đang nói về WPF, và liên kết ** here ** là một giải pháp ListView mở rộng khác. –

0

Khuôn khổ thực hiện không xác định sự kiện như ItemAdded. Tuy nhiên, hãy đảm bảo truy cập giải pháp này: An Observer Pattern and an Extended ListView Event Model. Ví dụ: các sự kiện sau được xác định tại đó:

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

Không có sự kiện nào xảy ra. Nhưng bạn luôn có thể tạo hộp danh sách của riêng bạn:

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

Một lựa chọn khác là để giữ các mục trong một thể hiện của lớp ObservableCollection, thiết ListView.ItemsSource vào bộ sưu tập đó và đăng ký vào các sự kiện ObservableCollection.CollectionChanged.

+0

Đáng buồn thay, 'Dạng xem danh sách 'không có' MụcSource'. Đó là một cải tiến 'WPF'. –

8

Bạn không cần chỉnh sửa nguồn khác!

Ok: thay đổi từ ListView để myListView

thời gian dài trước đây - nhưng tôi tìm kiếm một giải pháp mà không dụng cụ với riêng ItemAdd-Function! Cách tốt nhất để làm điều đó ... sử dụng chức năng WndProc.

nhắn: 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; 
     } 
    } 
} 

Bây giờ bạn có thể bắn ItemAddedEvent của riêng bạn. Tôi hy vọng rằng sẽ giúp những người khác, những người có cùng một vấn đề.

gegards raiserle

(chỉnh sửa: hãy bỏ phiếu;))

+1

Cảm ơn bạn đã chia sẻ thông tin này, tôi có thể hỏi thông báo hoặc trường hợp của mục bị xóa không? – NetInfo

+2

http://msdn.microsoft.com/en-us/library/windows/desktop/bb774895%28v=vs.85%29.aspx xem bài đăng của tôi: D – raiserle

+1

Cảm ơn bạn rất nhiều, bạn là huyền thoại , Chúa phù hộ. – NetInfo

Các vấn đề liên quan