今天一个功能需要动态创建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

最新文章

  1. ab
  2. C# 与 C++ 数据类型比较及结构体转换
  3. Android 数据存储五种方式
  4. Mixing ASP.NET and MVC routing
  5. jade学习02
  6. php 修改 AppServ 下Apache 端口
  7. 20141211—C#面向对象,封装
  8. [HDOJ - 5208] Where is Bob 【DFS+按位贪心】
  9. (一)Eclipse 快捷键
  10. Oracle OS认证和口令文件认证方法
  11. HDU 5777 domino
  12. 分析业务模型-类图(Class Diagram)
  13. JAVA -数据类型与表达式---变量与赋值
  14. vim之快速查找功能
  15. weblogic10.3 启动报错 Unrecognized option: -jrockit Error: Could not create the Java Virtual Machine
  16. 旋转数组的最小数字(JAVA)
  17. opencv学习之路(23)、轮廓查找与绘制(二)——访问轮廓每个点
  18. python 全栈开发,Day109(客户管理之动态&quot;二级&quot;菜单)
  19. Qt编写echart仪表盘JS交互程序支持webkit和webengine(开源)
  20. c++-pimer-plus-6th-chapter03

热门文章

  1. fdisk 非交互式创建 分区
  2. Apache和PHP环境配置
  3. Paxos Made Simple(译)
  4. Mybatis中使用 #{} 和 ${} 向sql传参时的区别
  5. 1.Smarty的下载安装
  6. flex sqlite基本用法
  7. Python系列教程(一):简介
  8. Python3 面向对象程序设计(类)
  9. HTML form表单小结
  10. JavaMail 邮件开发