给list view控件 添加个自定义事件

happy20101027 2013-06-28 09:34:04
如题,当listview add 和 remove item 时添加个事件处理。望大牛给个代码
...全文
167 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anod 2013-06-28
  • 打赏
  • 举报
回复
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() { }
本拉灯 2013-06-28
  • 打赏
  • 举报
回复
引用 3 楼 happy20101027 的回复:
另外补充 我是winform 中的listview 。没有看到 itemcreat和itemdeleting 事件
自己继承一个ListViewEx控件 与 ListViewItemCollectionEx 类,然后重写继承的 Items属性 变为 ListViewItemCollectionEx 在ListViewItemCollectionEx 重载Add与Remove方法 向ListViewEx 抛事件
  • 打赏
  • 举报
回复
如果是 winform 中的listview 你需要给 listView绑定一个BindingContext ,每次去修改这个绑定的集合,再重新绑定。 触发 BindingContextChanged事件 要自定义事件的话 可以使用 this.listView1.BindingContextChanged+=new EventHandler(listView1_BindingContextChanged2); listView1_BindingContextChanged2 为自定义事件
happy20101027 2013-06-28
  • 打赏
  • 举报
回复
另外补充 我是winform 中的listview 。没有看到 itemcreat和itemdeleting 事件
happy20101027 2013-06-28
  • 打赏
  • 举报
回复
引用 1 楼 kimizhou_blog 的回复:
listview 不是已经有自带这些事件处理了吗? ADD 对应ListView1_ItemCreated remove 对应 ListView1_ItemDeleting 如果要再增加事件的话 this.ListView1.ItemDeleting+=new EventHandler<ListViewDeleteEventArgs>(ListView1_ItemDeleting2); public EventHandler<ListViewDeleteEventArgs> ListView1_ItemDeleting2 (object sender, ListViewItemEventArgs e){}
引用 1 楼 kimizhou_blog 的回复:
listview 不是已经有自带这些事件处理了吗? ADD 对应ListView1_ItemCreated remove 对应 ListView1_ItemDeleting 如果要再增加事件的话 this.ListView1.ItemDeleting+=new EventHandler<ListViewDeleteEventArgs>(ListView1_ItemDeleting2); public EventHandler<ListViewDeleteEventArgs> ListView1_ItemDeleting2 (object sender, ListViewItemEventArgs e){}
我是想add 和remove 放在一起触发。可以吗?
  • 打赏
  • 举报
回复
listview 不是已经有自带这些事件处理了吗? ADD 对应ListView1_ItemCreated remove 对应 ListView1_ItemDeleting 如果要再增加事件的话 this.ListView1.ItemDeleting+=new EventHandler<ListViewDeleteEventArgs>(ListView1_ItemDeleting2); public EventHandler<ListViewDeleteEventArgs> ListView1_ItemDeleting2 (object sender, ListViewItemEventArgs e){}
happy20101027 2013-06-28
  • 打赏
  • 举报
回复
不好意思,上面120 分本来给wyd1520的,抱歉。非常感谢 wyd1520。以后有问题 再给wyd1520 补上吧。 同时也感谢kimizhou_blog 的热情
  • 打赏
  • 举报
回复
引用 10 楼 wyd1520 的回复:
[quote=引用 7 楼 happy20101027 的回复:] [quote=引用 5 楼 wyd1520 的回复:] [quote=引用 3 楼 happy20101027 的回复:] 另外补充 我是winform 中的listview 。没有看到 itemcreat和itemdeleting 事件
自己继承一个ListViewEx控件 与 ListViewItemCollectionEx 类,然后重写继承的 Items属性 变为 ListViewItemCollectionEx 在ListViewItemCollectionEx 重载Add与Remove方法 向ListViewEx 抛事件[/quote] 可以给个代码例子吗?我是菜鸟。谢谢[/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[/quote] 恩 这个重写控件了,更牛逼~~
本拉灯 2013-06-28
  • 打赏
  • 举报
回复
引用 7 楼 happy20101027 的回复:
[quote=引用 5 楼 wyd1520 的回复:] [quote=引用 3 楼 happy20101027 的回复:] 另外补充 我是winform 中的listview 。没有看到 itemcreat和itemdeleting 事件
自己继承一个ListViewEx控件 与 ListViewItemCollectionEx 类,然后重写继承的 Items属性 变为 ListViewItemCollectionEx 在ListViewItemCollectionEx 重载Add与Remove方法 向ListViewEx 抛事件[/quote] 可以给个代码例子吗?我是菜鸟。谢谢[/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
Anod 2013-06-28
  • 打赏
  • 举报
回复
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;} } }
Anod 2013-06-28
  • 打赏
  • 举报
回复
 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;}
         }
}
大概是这样,自己调吧
happy20101027 2013-06-28
  • 打赏
  • 举报
回复
引用 5 楼 wyd1520 的回复:
[quote=引用 3 楼 happy20101027 的回复:] 另外补充 我是winform 中的listview 。没有看到 itemcreat和itemdeleting 事件
自己继承一个ListViewEx控件 与 ListViewItemCollectionEx 类,然后重写继承的 Items属性 变为 ListViewItemCollectionEx 在ListViewItemCollectionEx 重载Add与Remove方法 向ListViewEx 抛事件[/quote] 可以给个代码例子吗?我是菜鸟。谢谢

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧