今天一个功能需要动态创建pictruebox然后根据时间来倒叙显示,一开始对于这个需求摸不着头脑,后来在公司的大神帮助下实现了,话不多说具体实现上代码了;

1、动态添加控件并倒叙

首先添加一个用户控件里面放pictruebox使其动态创建(用户控件的用法大家自行百度哈)
然后又一个用户控件集合用来排序这个

                 var picture = new CapturePicture()
{
CreateTime = DateTime.Now
};
picture.SetPicture(savePath);
picture.Width = pnlCapturePictureList.Width - ;
picture.Margin = new Padding();
picture.OnPictureClick += Picture_OnPictureClick;
pictures.Add(picture); DisplayCapturePictures();

这个capturePicture是用户控件,这个OnPictureClick是这个图片的点击事件 这里需要用到委托后面再说如何实现
下面是如何实现倒序的代码

         private void DisplayCapturePictures()
{
this.pnlCapturePictureList.Controls.Clear();
var pics = pictures.OrderByDescending(x => x.CreateTime);
foreach (var capturePicture in pics)
{
this.pnlCapturePictureList.Controls.Add(capturePicture);
}
}

先清除用户控件所有的图片控件

在集合里面的排序好的数据循环添加到用户控件里面就大功告成了。

2,、点击事件的委托

首先定义一个委托,这里这个CapturePictureEventArgs定义字段能实现传参,如果不需要传参可以直接把

CapturePictureEventArgs e 换成 EventArgs e
 public delegate void CapturePictureClick(object sender, CapturePictureEventArgs e);
/// <summary>
/// 参数
/// </summary>
public class CapturePictureEventArgs : EventArgs
{
public CapturePictureEventArgs(string picturePath)
{
PicturePath = picturePath;
} public string PicturePath { get;private set; }
}

然后在用户控件里面注册事件

  //注册事件
public event CapturePictureClick OnPictureClick;
//picturePath是图片路径是一个参数可以不传
private void pictureBox1_Click(object sender, EventArgs e)
{
if (OnPictureClick != null)
{
OnPictureClick(this.pictureBox1,new CapturePictureEventArgs(PicturePath));
}
}

注册完然后开始调调用

picture.OnPictureClick += 

双击tab键就出来委托事件啦!

 picture.OnPictureClick += Picture_OnPictureClick;//绑定事件

 private void Picture_OnPictureClick(object sender, CapturePictureEventArgs e)
{
PictureBox pic = (PictureBox)sender;
//释放图片资源
img.Dispose();
ImgFrom imgf = new ImgFrom();
imgf.ShowDialog();
int num = ;
string desc = "";
if (imgf.DialogResult == DialogResult.OK)
{
num = imgf.Num;
desc = imgf.Desc;
Upload(num, desc, pic);
}
}

======================================================================最后来个总结吧======================================================================

委托关键字 :delegate

事件关键字:event

WinFrom通过委托传递事件的更多相关文章

  1. 【.NET基础】--委托、事件、线程(1)

    1,委托 是存放方法的指针的清单,也就是装方法的容器 A, 新建winform项目[01委托],项目中添加dg_SayHi.cs 委托类 用于存储方法 namespace _01委托 { //定义委托 ...

  2. 转载 【.NET基础】--委托、事件、线程(1) https://www.cnblogs.com/chengzish/p/4559268.html

    [.NET基础]--委托.事件.线程(1)   1,委托 是存放方法的指针的清单,也就是装方法的容器 A, 新建winform项目[01委托],项目中添加dg_SayHi.cs 委托类 用于存储方法 ...

  3. .NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...

  4. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  5. [转载]C#深入分析委托与事件

    原文出处: 作者:风尘浪子 原文链接:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 同类链接:http://www.c ...

  6. [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...

  7. C#之委托与事件

    委托与事件 废话一堆:网上关于委托.事件的文章有很多,一千个哈姆雷特就有一千个莎士比亚,以下内容均是本人个人见解. 1. 委托 1.1 委托的使用 这一小章来学习一下怎么简单的使用委托,了解一些基本的 ...

  8. [ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件

    在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但 ...

  9. .NET委托和事件

    .net学习之委托和事件   1.什么是委托 通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器 上传图片: 2.委托语法 准备一个方法:string Hello(string ...

随机推荐

  1. orcale设置自增列

    create sequence SEQ_ERRORID minvalue 1 maxvalue 99999999 start with 1000 increment by 1 nocache orde ...

  2. .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)

    我们知道Kafka支持Consumer Group的功能,但是最近在应用Consumer Group时发现了一个Topic 的Partition不能100%覆盖的问题. 程序部署后,发现Kafka在p ...

  3. 使用mongodb作为Quartz.Net下的JobStore实现底层的持久化机制

    我们都知道默认的Quartz底层采用的是RAMJobStore,所有的Job,Trigger,Calendar都是用Dictionary,SortSet等等这样的数据结构进行储存,相对来说性能肯 定快 ...

  4. mysql数据与Hadoop之间导入导出之Sqoop实例

    前面介绍了sqoop1.4.6的 如何将mysql数据导入Hadoop之Sqoop安装,下面就介绍两者间的数据互通的简单使用命令. 显示mysql数据库的信息,一般sqoop安装测试用 sqoop l ...

  5. java wait 和notify

    这几天自己学习了一下线程的知识,wait 方法使当前的线程等待,notify 方法 唤醒当前的线程的方法 th 线程在5的时候进行wait,此时主线程继续执行, 主线程执行到9的时候 唤醒 th 线程 ...

  6. java中得到图片的宽度 高度:

    java中得到图片的宽度 高度:BufferedImage srcImage = null;srcImage = ImageIO.read(new File(srcImagePath));int sr ...

  7. sublime 设置字体

    通过菜单Preferences/Settings - User,添加下面这行配置就可以修改字体: "font_face": "Courier New", &qu ...

  8. strval

    将变量转成字符串类型. 语法: string strval(mixed var); 返回值: 字符串 函数种类: PHP 系统功能   内容说明 本函数可将数组及类之外的变量类型转换成字符串类型.   ...

  9. [leetcode-629-K Inverse Pairs Array]

    Given two integers n and k, find how many different arrays consist of numbers from 1 to n such that ...

  10. ajax来判断用户是否登录与添加

    首先在用ajax之前,先说一下JSON: JSON:javascript object notation   js对象标记 对于json,我们只需要知道如何定义json?如何输出?怎么遍历? 1.定义 ...