-
前言
上次兴起,写了篇文章,许久再无所出...
整理电脑时发现过往的学习时编写的工程,兴起决定拿出来分享,曾经的学生作品,见怪不怪~~、
文章部分是以前写的...懒了就拷贝一下
简单qq表情浏览器
功能:简单浏览一个文件夹下面的图片,图片可以拖拽
实现透明窗体,分页,图片位置变换等功能
软件截图:
-
起因:
Winform老师有令:做一个图片浏览器。小的得令勒~~
发现做jpg的图片浏览简单容易,所以马上想到了平时用到的拖拽功能。
可是,刚刚开始就遇见了一个问题,gif格式操作问题。
然后张罗旗鼓的baidu,google。
上网剽窃一通,收获无多!
关于gif的内容比较少,那就自己研究呗!
自己动手,丰衣食足!
这里贴出小教程,希望能弥补一些空白!
-
预览:
下面是该工程的一个PictureBox
笑的挺猥琐的家伙~~
开发环境:vs2008,win7
使用继承控件:PictureBoxAllowDrop(继承自PictureBox)
继承原因:PictureBox中不显示AllowDrop属性,控件要使用“拖拽”必须设为ture
代码:拷贝自网上前辈,最好添加新建项写入一个单独的类成为一个继承控件类
然后拉入一个pictureBox1,在Windows 窗体设计器生成的代码InitializeComponent()改为pictureBoxAllowDrop1。
如:this.pictureBoxAllowDrop1 = new PictureBoxAllowDrop();
public class PictureBoxAllowDrop : PictureBox { private bool pic_yes = true;//默认已经为打开 public override bool AllowDrop { get { return pic_yes; } set { pic_yes = value; } } } |
小贴士:关于AllowDrop这个属性,有一个郁闷的地方,在Form1_Load事件中进行设置,开始我没设置默认为ture,所以不能拖入。郁闷忒久!原因不清。希望有好心人能告诉我。我猜测是重写后的问题!
- 添加事件(应该是叫事件吧,呵呵,学艺不精):
this.pictureBoxAllowDrop1.DragDrop += new System.Windows.Forms.DragEventHandler(this.pictureBoxAllowDrop1_DragDrop); this.pictureBoxAllowDrop1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBoxAllowDrop1_MouseDown); this.pictureBoxAllowDrop1.DragEnter += new System.Windows.Forms.DragEventHandler(this.pictureBoxAllowDrop1_DragEnter); |
这里是用双击设计视图中事件窗体设计器自动生成。也可自己写代码添加。
事件代码:
- 首先,当鼠标经过图片框,且有拖动数据在鼠标上,那么发生这个事件。在这里我们可以添加判断。如果不是图片文件,就无法发生下一个“写入”事件。
private void pictureBoxAllowDrop1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("Bitmap")) e.Effect = DragDropEffects.Copy; } |
验证好数据,我们就要“写入”了。
以下代码上网学习而来。“安全性”不高,不一定是标准代码哦。不过我会继续学习研究的。
private void pictureBoxAllowDrop1_DragDrop(object sender, DragEventArgs e) { string[] fileName; fileName = e.Data.GetData("FileNameW") as string[]; MessageBox.Show(fileName[0]); if (fileName != null && fileName.Length > 0) { using (System.IO.StreamReader sr = System.IO.File.OpenText(fileName[0])) { pictureBoxAllowDrop1.Image = Image.FromFile(fileName[0]); } pictureBoxAllowDrop1.Tag = fileName;//把拖入的文件集合地址写入Tag } } |
好,但你写上这两个事件,那么你可以试试从qq对话框中拖入gif格式的图片了。当然,jpg也不在话下了。
但这个不是我们的最终目的!
拖出代码:
private void pictureBoxAllowDrop1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left && pictureBoxAllowDrop1.Image != null) { string[] path = (string[])pictureBoxAllowDrop1.Tag; DataObject data = new DataObject(DataFormats.FileDrop, path); data.SetData(DataFormats.Bitmap, path[0]); pictureBoxAllowDrop1.DoDragDrop(data, DragDropEffects.Copy); } } |
写上这个,我们的图片框就能将拖入的gif格式的表情拖会qq聊天框了!
其实关键的就简单的两句:
DataObject data = new DataObject(DataFormats.FileDrop, path);
data.SetData(DataFormats.Bitmap, path[0]);
反反复复的错了几十次!
但错误编程了一种习惯,习惯到我不该怎么办~~~耶~耶~耶
所以又反反复复百度,学习,查资料!
其实,我最想说是:把基础学好,把对象搞好(是面向对象学好,不是那个啥~~)
把类型,类型转化学好,就可以避免一下低级的错误!
这是这次学习最珍贵的感悟!
还有,就是坚持走在错误路线上,测试失败是一种收获!
错误路线的尽头就是正确,沿途的风景让你成长更多!
学习ing...
以上大部分完成于2010年05月06日,这里算完成了核心代码