今天一个功能需要动态创建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. Wowza 部署 安装 配置 测试 直播

    下载,最好用快的IP下好后传到需要的节点上,下面链接不能下载的情况下百度谷歌必应找资源,jdk旧版在oracle需登录方可下载 JDK1.6 wget -c http://dl.download.cs ...

  2. 使用 XML 配置 MyBatis

    构建 SqlSessionFactory 最常见的方式是基于 XML 配置(的构造方式).下面的 mybatis-config.xml 展示了一个 典型的 MyBatis 配置文件的样子: XML C ...

  3. java数组中取出最大值

    class Demo{ public static void main(String []args){ int[] arr={3,54,456,342,2798}; int max=getMax(ar ...

  4. DOCKER 从入门到放弃(一)

    前言 关于docker的各种概念已有各位大神珠玉在前,请各位自行查看,本系列的目的是各种详细操作步骤 各种概念特别推荐CloudMan的3篇blog: http://www.cnblogs.com/C ...

  5. Student implements java.io.Serializable

    package JBJADV003; public class Student implements java.io.Serializable { private String name; priva ...

  6. Watson API - Personality Insight For Certificate

    Personality Insight For Certificate 1.Describe the intended use of the Personality Insights service ...

  7. C#字典转换成where条件

    where 1=1 and Dictionary[key1]=Dictionary[value1] and Dictionary[key2]=Dictionary[value3].... /// &l ...

  8. LCS 算法实现

    动态规划算法 #include <iostream> #include <string.h> #include <algorithm> #include <m ...

  9. 详细解析 JavaScript 获取元素的坐标

    引言 最近突然看到了有关图片懒加载的问题,大致意思就是初始状态下页面只加载浏览器可视区域的图片,剩余图片在当浏览器可视区域滚动到其位置时才开始加载.貌似现在许多大型网站都有实现懒加载,所以我便就此问题 ...

  10. 使用joda-time工具类 计算时间相差多少 天,小时,分钟,秒

    下面程序使用了两种方法计算两个时间相差 天,小时,分钟,秒 package jodotest; import java.text.ParseException; import java.text.Si ...