C# 使用匿名函数解决EventHandler参数传递的难题
所属分类:
软件编程 / C#教程
阅读数:
152
收藏 0赞 0分享
首先,动态生成PictureBox,很简单,
PictureBox box = new PictureBox() ;
box.ImageLocation = imageRoad ;
其次,给PictureBox添加右键菜单,也不难,
ContextMenu menu = new ContextMenu();
box.ContextMenu = menu ;
然后,要给右键菜单增加“删除”项,并实现删除图片事件。这个,比较麻烦。
MenuItem item = new MenuItem("删除") ;
menu.MenuItems.Add( item , new EventHandler( item_Click )) ;
void item_Click(object sender, EventArgs e)
{
// 增加删除图片的功能
// 1、获取图片对象
// 2、删除图片
}
在item_Click方法中,由于无法获得图片对象的值,所以无法进行删除操作。除非,在item_Click方法中,能够将PictureBox对象作为参数传递进来。这个,没想出来怎么实现。
尝试使用匿名方法,
menu.MenuItems.Add( item, delegate(Object o,EventHandler e){ box.ImageLocation = "" ; });
由于匿名方法是在方法体内,因此,可以将box作为参数传递进来。
总结:使用匿名方法实现事件参数的传递,因为匿名方法可以使用外部参数。
关键词:事件、委托、匿名方法
语言平台:C# 2.0及以上
c# 深拷贝与浅拷贝的区别分析及实例
浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用. 深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.
收藏 0赞 0分享
C#利用com操作excel释放进程的解决方法
最近利用Microsoft.Office.Interop.Excel.Application读取一个excel后,进程中一直存在excel,在网上找了一阵子,其中有几个解决方案
收藏 0赞 0分享
查看更多