c#图像拖拽相关事件

国创做的项目涉及到了图像处理,但是以前真的是没有接触过,所以只能从头学。当然我肯定不会先看纯图像处理的理论,那样会吐的 ^^ 所以直接学习处理的算法实例。

最开始一般都是先学灰度处理,最喜欢的还是内存法。但这不是这篇文章说的重点,重点是将图片用鼠标拖进picturebox的一个小方法。比如qq的传送文件,你可以直接将桌面上的文件拖进qq的聊天对话框,然后就可以传输文件了。这个功能也一样,就是不想老是用OpenFileDialog来打开文件。

手边没有这个相关的书,当然只能上网查。可能是我搜索的关键字不对吧,搜到的全都是其他控件的文本拖动之类的,用那些方法没法实现图像的拖拽。然后就开始蒙着改。

首先要说一下AllowDrop属性,这个属性是允许控件能够接受拖到它上面的数据的。但是不知为何,picturebox属性栏里没有这个属性,所以在代码里一定要加上。话说当时拖拽的代码都实现了,但就是拖拽不上去,给我急坏了,当在网上看到有人有相同的问题时,真是看到阳光的感觉啊,嘿嘿:

public override bool AllowDrop
        {
            get
            {
                return base.AllowDrop;
            }
            set
            {
                base.AllowDrop = value;
            }
        }

然后将AllowDrop属性设为true。

this.pictureBox1.AllowDrop = true;

接下来就用到关键的两个事件(我是用了两个,但是我觉得实现这个功能方法不止一种)。DragEnter事件是当鼠标拖拽文件到控件时的一个触发事件,DragDrop事件是当拖拽完成时候触发的事件。我的理解就是DragEnter将数据保存在一个临时变量里,然后当拖拽完成时就可以把数据存放在目标控件。代码就没什么难的了,注意一下对临时数据的强制转换就好。

        private void pictureBox1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Link;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void pictureBox1_DragDrop(object sender, DragEventArgs e)
        {
            string str =((System.Array) e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
            pictureBox1.Image = Image.FromFile(str);
            curBitmap = (Bitmap)pictureBox1.Image;
        }

其实这段代码我也不是理解的很透彻,但是这个功能我的目的只要实现就好,所以以后也就当做模板来用吧。

你可能感兴趣的:(C#,图片,职场,拖拽,休闲)