如题,当listview add 和 remove item 时添加个事件处理。望大牛给个代码listview控件C#自定义事件

解决方案 »

  1.   

    listview  不是已经有自带这些事件处理了吗?
    ADD 对应ListView1_ItemCreated 
    remove  对应 ListView1_ItemDeleting
    如果要再增加事件的话  
    this.ListView1.ItemDeleting+=new EventHandler<ListViewDeleteEventArgs>(ListView1_ItemDeleting2);
    public EventHandler<ListViewDeleteEventArgs> ListView1_ItemDeleting2 (object sender, ListViewItemEventArgs e){}
      

  2.   

    我是想add 和remove 放在一起触发。可以吗?
      

  3.   

    另外补充 我是winform 中的listview 。没有看到 itemcreat和itemdeleting 事件
      

  4.   

    如果是 winform 中的listview 
    你需要给 listView绑定一个BindingContext ,每次去修改这个绑定的集合,再重新绑定。
    触发 BindingContextChanged事件  
    要自定义事件的话  可以使用 
    this.listView1.BindingContextChanged+=new EventHandler(listView1_BindingContextChanged2);
    listView1_BindingContextChanged2 为自定义事件
      

  5.   


    自己继承一个ListViewEx控件 与 ListViewItemCollectionEx 类,然后重写继承的 Items属性 变为
    ListViewItemCollectionEx 
    在ListViewItemCollectionEx 重载Add与Remove方法 向ListViewEx 抛事件
      

  6.   

    this.ListView1.ItemDeleting+=new EventHandler<ListViewDeleteEventArgs>(ListView1_ItemDeleting2); 
    this.ListView1.ItemAdding+=new EventHandler<ListViewAddEventArgs>(ListView1_ItemAdding2); public EventHandler<ListViewDeleteEventArgs> ListView1_ItemDeleting2 (object sender, ListViewItemEventArgs e)
    {
         DoSomeThing();
    }
    public EventHandler<ListViewAddEventArgs> ListView1_ItemAdding2(object sender, ListViewItemEventArgs e)
    {
         DoSomeThing();
    }public void DoSomeThing()
    {}
      

  7.   


    自己继承一个ListViewEx控件 与 ListViewItemCollectionEx 类,然后重写继承的 Items属性 变为
    ListViewItemCollectionEx 
    在ListViewItemCollectionEx 重载Add与Remove方法 向ListViewEx 抛事件
    可以给个代码例子吗?我是菜鸟。谢谢
      

  8.   

     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;}
             }
    }大概是这样,自己调吧
      

  9.   


    public Class ListViewEx:ListView
    {
         public ListViewItemCollectionEx ItemEx
        {
            get
            {
                  return new ListViewItemCollectionEx(base:Items);
             }
        }
            public ItemChanged Sendmessage
            { 
                set{ ItemEx.Sendmessage = value;}
             }
    }后半段错了,应该是:public Class ListViewEx:ListView
    {
        private ListViewItemCollectionEx itemEx;
         public ListViewItemCollectionEx ItemEx
        {
            get
            {
                  if(itemEx == null)
                      itemEx = new ListViewItemCollectionEx(base:Items);
                  return itemEx;
             }
        }
            public ItemChanged Sendmessage
            { 
                set{ ItemEx.Sendmessage = value;}
             }
    }
      

  10.   


    自己继承一个ListViewEx控件 与 ListViewItemCollectionEx 类,然后重写继承的 Items属性 变为
    ListViewItemCollectionEx 
    在ListViewItemCollectionEx 重载Add与Remove方法 向ListViewEx 抛事件
    可以给个代码例子吗?我是菜鸟。谢谢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
      

  11.   


    自己继承一个ListViewEx控件 与 ListViewItemCollectionEx 类,然后重写继承的 Items属性 变为
    ListViewItemCollectionEx 
    在ListViewItemCollectionEx 重载Add与Remove方法 向ListViewEx 抛事件
    可以给个代码例子吗?我是菜鸟。谢谢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恩 这个重写控件了,更牛逼~~ 
      

  12.   

    不好意思,上面120 分本来给wyd1520的,抱歉。非常感谢 wyd1520。以后有问题 再给wyd1520 补上吧。 同时也感谢kimizhou_blog 的热情