在C# Windows Form应用程序中,ListView控件是否有一个事件处理程序,在向列表视图项添加项目时触发?
您不需要编辑其他源代码!
好的:将ListView更改为myListView
很久以前,但我在寻找一种不需要实现自己的ItemAdd函数的解决方案!最好的方法是使用WndProc函数。
消息: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# 实现
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;
}
}
}
现在你可以触发自己的ItemAddedEvent。我希望这能帮助其他遇到同样问题的人。
祝好 raiserle
(编辑:请投票 ;) )
没有能够做到这件事的事件。 但是您可以随时创建自己的列表框:
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; }
}
Forms ListView
没有 ItemsSource
。这是 WPF
的改进。 - Jesse Chisholm该框架不定义像ItemAdded
这样的事件。但是,请务必访问此解决方法:观察者模式和扩展的ListView事件模型。例如,下面的事件在那里被定义:
public event ListViewItemDelegate ItemAdded;
public event ListViewItemRangeDelegate ItemRangeAdded;
public event ListViewRemoveDelegate ItemRemoved;
public event ListViewRemoveAtDelegate ItemRemovedAt;