110,499
社区成员
发帖
与我相关
我的任务
分享
public class ListViewEx : ListView
{
private ListViewItemCollectionEx _Items;
public event EventHandler<ListViewItemEventArgs> ItemAdded;
public event EventHandler<ListViewItemEventArgs> ItemRemoved;
public ListViewEx()
{
_Items = new ListViewItemCollectionEx(this,base.Items);
}
public new ListViewItemCollectionEx Items
{
get {
return _Items;
}
}
internal void OnItemAdded(ListViewItem item)
{
if (ItemAdded != null)
{
ItemAdded(this, new ListViewItemEventArgs(item));
}
}
internal void OnItemRemoved(ListViewItem item)
{
if (ItemRemoved != null)
{
ItemRemoved(this, new ListViewItemEventArgs(item));
}
}
}
public class ListViewItemCollectionEx : System.Windows.Forms.ListView.ListViewItemCollection
{
private ListViewEx _Owner;
System.Windows.Forms.ListView.ListViewItemCollection _baseCollecation;
public ListViewItemCollectionEx(ListViewEx owner, System.Windows.Forms.ListView.ListViewItemCollection baseCollecation)
: base(owner)
{
_Owner = owner;
_baseCollecation = baseCollecation;
}
public override ListViewItem Add(ListViewItem value)
{
_baseCollecation.Add(value);
_Owner.OnItemAdded(value);
return value;
}
public override void Remove(ListViewItem value)
{
_baseCollecation.Remove(value);
_Owner.OnItemRemoved(value);
}
}
public class ListViewItemEventArgs:EventArgs
{
public readonly ListViewItem Item;
public ListViewItemEventArgs(ListViewItem item)
{
Item = item;
}
}
上面这样子吧,虽不完美,也可以用用。要用Add的方式就可以不要用DataSource[/quote]
恩 这个重写控件了,更牛逼~~
public class ListViewEx : ListView
{
private ListViewItemCollectionEx _Items;
public event EventHandler<ListViewItemEventArgs> ItemAdded;
public event EventHandler<ListViewItemEventArgs> ItemRemoved;
public ListViewEx()
{
_Items = new ListViewItemCollectionEx(this,base.Items);
}
public new ListViewItemCollectionEx Items
{
get {
return _Items;
}
}
internal void OnItemAdded(ListViewItem item)
{
if (ItemAdded != null)
{
ItemAdded(this, new ListViewItemEventArgs(item));
}
}
internal void OnItemRemoved(ListViewItem item)
{
if (ItemRemoved != null)
{
ItemRemoved(this, new ListViewItemEventArgs(item));
}
}
}
public class ListViewItemCollectionEx : System.Windows.Forms.ListView.ListViewItemCollection
{
private ListViewEx _Owner;
System.Windows.Forms.ListView.ListViewItemCollection _baseCollecation;
public ListViewItemCollectionEx(ListViewEx owner, System.Windows.Forms.ListView.ListViewItemCollection baseCollecation)
: base(owner)
{
_Owner = owner;
_baseCollecation = baseCollecation;
}
public override ListViewItem Add(ListViewItem value)
{
_baseCollecation.Add(value);
_Owner.OnItemAdded(value);
return value;
}
public override void Remove(ListViewItem value)
{
_baseCollecation.Remove(value);
_Owner.OnItemRemoved(value);
}
}
public class ListViewItemEventArgs:EventArgs
{
public readonly ListViewItem Item;
public ListViewItemEventArgs(ListViewItem item)
{
Item = item;
}
}
上面这样子吧,虽不完美,也可以用用。要用Add的方式就可以不要用DataSource public delegate void ItemChanged(ListViewItem[]);
public Class ListViewItemCollectionEx:ListViewItemCollection
{
private delegate ItemChanged sendmessage;
private ListViewItemCollection items;
public ListViewItemCollectionEx(ListViewItemCollection items)
{
this.items = items;
}
public ItemChanged Sendmessage
{
set{ sendmessage = value;}
}
public add(ListViewItem item)
{
this.items.add(items);
if(sendmessage!=null)
sendmessage(new ListViewItem[]{item});
}
public insert(int index, ListViewItem item)
{
this.items.insert(index, item);
if(sendmessage!=null)
sendmessage(new ListViewItem[]{item});
}
public remove(ListViewItem item)
{
this.items.remove(item);
if(sendmessage!=null)
sendmessage(new ListViewItem[]{item});
}
public remove(int index)
{
ListViewItem itme = this.items[index];
this.items.remove(index);
if(sendmessage!=null)
sendmessage(new ListViewItem[]{item});
}
public removeall()
{
ListViewItem items = this.items.toarray();
this.items.removeall();
if(sendmessage!=null)
sendmessage(items );
}
}
public Class ListViewEx:ListView
{
public ListViewItemCollectionEx ItemEx
{
get
{
return new ListViewItemCollectionEx(base:Items);
}
}
public ItemChanged Sendmessage
{
set{ ItemEx.Sendmessage = value;}
}
}
大概是这样,自己调吧