C#.图片拖动处理(摘抄)

本文摘自博客园牛人吉日嘎啦。

通用权限管理系统组件源码里,有职员管理的功能,实现了直接可以把照片拖拽过来的功能,用起来会很方便。

想要控件支持拖拽,需要设置 AllowDrop 属性。

还需要写下面的2个事件。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考代码如下,有需要的可以参考一下,把有需要的代码参考一下就可以了。

//-----------------------------------------------------------
// All Rights Reserved , Copyright (C) 2010 ,Jirisoft , Ltd .
//-----------------------------------------------------------

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace DotNet.WinForm.File
{
    using DotNet.Model;
    using DotNet.Utilities;
    using DotNet.Service;

    /// <summary>
    
/// UCPicture
    
/// 照片显示控件
    
/// 
    
/// 修改纪录
    
///
    
///        2010.12.08 版本:2.0 JiRiGaLa 更新员工更新照片的错误。
    
///        2008.04.29 版本:1.0 JiRiGaLa 创建。
    
///        
    
/// 版本:2.0
    
///
    
/// <author>
    
///        <name>JiRiGaLa</name>
    
///        <date>2010.12.08</date>
    
/// </author> 
    
/// </summary>
    public partial class UCPicture : UserControl
    {
        public UCPicture()
        {
            InitializeComponent();
        }

        private BaseUserInfo userInfo = new BaseUserInfo();
        /// <summary>
        
/// 当前操作员信息
        
/// </summary>
        public BaseUserInfo UserInfo
        {
            get
            {
                userInfo = new BaseUserInfo();
                userInfo.GetUserInfo();
                return userInfo;
            }
            set
            {
                userInfo = value;
            }
        }

        /// <summary>
        
/// 保存到数据库
        
/// </summary>
        public bool FromDatabase = true;

        private string fileId = string.Empty;
        public string FileId
        {
            get
            {
                return this.fileId;
            }
            set
            {
                this.fileId = value;
                this.ShowPicture();
            }
        }

        private string folderId = string.Empty;
        public string FolderID
        {
            get
            {
                return this.folderId;
            }
            set
            {
                this.folderId = value;
            }
        }
        
        private void UCPicture_Load(object sender, EventArgs e)
        {
            // 设置按钮状态
            
// this.SetControlState();
        }

        private void UCPicture_DragOver(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Move;
            }
        }

        private void UCPicture_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);
                for (int i = 0; i <= file.Length - 1; i++)
                {
                    if (System.IO.File.Exists(file[i]))
                    {
                        this.fileId = string.Empty;
                        // 设置显示的图片
                        this.pic.ImageLocation = file[i];
                        // 设置按钮状态
                        this.SetControlState();
                        break;
                    }
                }
            }
        }

        /// <summary>
        
/// 显示图片
        
/// </summary>
        public void ShowPicture()
        {
            if (!String.IsNullOrEmpty(this.FileId))
            {
                // 显示图片
                this.ShowPicture(this.FileId);
            }
            else
            {
                // 清除图片
                this.ClearPicture();
            }
        }

        /// <summary>
        
/// 显示图片
        
/// </summary>
        
/// <param name="id">主键</param>
        private void ShowPicture(string id)
        {
            if (!this.FromDatabase)
            {
                this.pic.ImageLocation = BaseSystemInfo.StartupPath + id;
            }
            else
            {
                byte[] fileContent = null;
                fileContent = this.Download(id);
                if (fileContent != null)
                {
                    // this.pic.Image = this.ByteToImage(fileContent);
                    MemoryStream memoryStream = new MemoryStream(fileContent);
                    Bitmap bitmap = new Bitmap(memoryStream);
                    this.pic.Image = bitmap;
                }
                else
                {
                    this.FileId = string.Empty;
                    this.ClearPicture();
                }
            }
            // 设置按钮状态
            this.SetControlState();
        }

        /// <summary>
        
/// 从数据库中读取文件
        
/// </summary>
        
/// <param name="id">文件主键</param>
        
/// <returns>文件</returns>
        public byte[] Download(string id)
        {
            return ServiceManager.Instance.FileService.Download(UserInfo, id);
            // OleDbHelper dbHelper = new SqlHelper();
            
// dbHelper.Open();
            
// byte[] fileContent = null;
            
// string sqlQuery = " SELECT " + BaseFileTable.FieldFileContent
            
//                + "   FROM " + BaseFileTable.TableName
            
//                + "  WHERE " + BaseFileTable.FieldId + " = '" + Id + "'";
            
// OleDbDataReader dataReader = (OleDbDataReader)dbHelper.ExecuteReader(sqlQuery);
            
// if (dataReader.Read())
            
// {
            
//    fileContent = (byte[])dataReader[BaseFileTable.FieldFileContent];
            
// }
            
// dbHelper.Close();
            
// return fileContent;
        }

        public string Upload(string folderId, string categoryId)
        {
            this.FolderID = folderId;
            string returnValue = string.Empty;
            if (!String.IsNullOrEmpty(this.pic.ImageLocation))
            {
                // 保存到数据库
                if (this.FromDatabase)
                {
                    if (String.IsNullOrEmpty(this.FileId))
                    {
                        returnValue = ServiceManager.Instance.FileService.Upload(UserInfo, folderId, Path.GetFileName(this.pic.ImageLocation), FileUtil.GetFile(this.pic.ImageLocation), true);
                    }
                    else
                    {
                        string statusCode = string.Empty;
                        string statusMessage = string.Empty;
                        ServiceManager.Instance.FileService.UpdateFile(UserInfo, this.FileId, Path.GetFileName(this.pic.ImageLocation), FileUtil.GetFile(this.pic.ImageLocation), out statusCode, out statusMessage);
                        returnValue = this.FileId;
                    }
                }
                else
                {
                    // 复制文件到指定的目录里
                    if (!this.pic.ImageLocation.Equals(BaseSystemInfo.StartupPath + this.FileId))
                    {
                        string destDirectory = BaseSystemInfo.StartupPath + "\\UploadFiles" + "\\" + folderId + "\\" + categoryId;
                        System.IO.Directory.CreateDirectory(destDirectory);
                        string destFileName = destDirectory + "\\" + Path.GetFileName(this.pic.ImageLocation);
                        System.IO.File.Copy(this.pic.ImageLocation, destFileName);
                        returnValue = "\\UploadFiles" + "\\" + folderId + "\\" + categoryId + "\\" + Path.GetFileName(this.pic.ImageLocation);
                    }
                }
                // OleDbHelper dbHelper = new SqlHelper();
                
// dbHelper.Open();
                
// string sequence = BaseSequenceManager.Instance.GetSequence(DbHelper, BaseFileTable.TableName);
                
// OleDbSQLBuilder sqlBuilder = new OleDbSQLBuilder();
                
// sqlBuilder.BeginInsert(DbHelper, BaseFileTable.TableName);
                
// sqlBuilder.SetValue(BaseFileTable.FieldId, sequence);
                
// sqlBuilder.SetValue(BaseFileTable.FieldFolderId, folderId);
                
// sqlBuilder.SetValue(BaseFileTable.FieldFileName, Path.GetFileName(this.pic.ImageLocation));
                
// // byte[] File = this.ImageToByte(this.pic.Image);
                
// byte[] File = this.GetFile(this.pic.ImageLocation);
                
// sqlBuilder.SetValue(BaseFileTable.FieldFileContent, File);
                
// sqlBuilder.SetValue(BaseFileTable.FieldFileSize, File.Length);
                
// sqlBuilder.SetValue(BaseFileTable.FieldCreateUserId, UserInfo.Id);
                
// sqlBuilder.SetDBNow(BaseFileTable.FieldCreateDate);
                
// sqlBuilder.EndInsert();
                
// dbHelper.Close();
                
// returnValue = sequence;
            }
            return returnValue;
        }

        private void SetControlState(bool enabled)
        {
            this.btnSelect.Enabled  = enabled;
            this.btnClear.Enabled   = enabled;
            this.btnDelete.Enabled  = enabled;
        }

        #region private void SetControlState() 设置按钮状态
        /// <summary>
        
/// 设置按钮状态
        
/// </summary>
        private void SetControlState()
        {
            this.btnSelect.Enabled = true;
            // 是从数据库里面读取出来的
            if (!String.IsNullOrEmpty(this.FileId) && (String.IsNullOrEmpty(this.pic.ImageLocation) || !this.FromDatabase))
            {
                this.btnDelete.Enabled = true;
            }
            else
            {
                this.btnDelete.Enabled = false;
            }
            // 清除按钮
            this.btnClear.Enabled = false;
            if (!String.IsNullOrEmpty(this.pic.ImageLocation))
            {
                if (this.FromDatabase)
                {
                    this.btnClear.Enabled = true;
                    this.btnDelete.Enabled = false;
                }
                else
                {
                    if (!this.pic.ImageLocation.Equals(BaseSystemInfo.StartupPath + this.FileId))
                    {
                        this.btnClear.Enabled = true;
                        this.btnDelete.Enabled = false;
                    }
                }
            }
        }
        #endregion

        private void pic_DoubleClick(object sender, EventArgs e)
        {
            if (this.pic.Image != null)
            {
                FrmPicture frmPicture = new FrmPicture(this.FileId);
                frmPicture.SetImage(this.pic.Image);
                frmPicture.Show();
            }
        }        

        private void btnSelect_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            // OpenFileDialog.InitialDirectory = Application.StartupPath;
            openFileDialog.Filter = "位图文件(*.bmp)|*.bmp|JPEG(*.JPG;*.JPEG;*.JPE;*.JFIF)|*.JPG;*.JPEG;*.JPE;*.JFIF|GIF(*.GIF)|*.GIF|TIFF(*.TIF;*.TIIF)|*.TIF;*.TIIF|PNG(*.PNG)|*.PNG|ICO(*.ICO)|*.ICO|所有图片文件|(*.bmp;*.JPG;*.JPEG;*.JPE;*.JFIF;*.GIF;*.TIF;*.TIIF;*.PNG;*.ICO)|所有文件|*.*";
            openFileDialog.FilterIndex = 7;
            openFileDialog.RestoreDirectory = true;
            openFileDialog.Title = "打开图片文件";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                this.fileId = string.Empty;
                this.SetControlState(false);
                this.pic.ImageLocation = openFileDialog.FileName;
                // 设置按钮状态
                this.SetControlState();
            }
        }

        /// <summary>
        
/// 清除图片
        
/// </summary>
        private void ClearPicture()
        {
            this.pic.ImageLocation = string.Empty;
            this.pic.Image = null;
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            this.ClearPicture();
            this.ShowPicture();
            // 设置按钮状态
            this.SetControlState();
        }

        /// <summary>
        
/// 删除文件
        
/// </summary>
        
/// <param name="id">主键</param>
        
/// <returns>影响的行数</returns>
        public int DeleteFile(string id)
        {
            int returnValue = 0;
            if (this.FromDatabase)
            {
                // 从数据库服务器删除文件
                returnValue = ServiceManager.Instance.FileService.Delete(UserInfo, id);
            }
            else
            {
                // 清除图片
                this.ClearPicture();
                // 删除文件
                System.IO.File.Delete(BaseSystemInfo.StartupPath + this.FileId);
            }
            return returnValue;
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show(AppMessage.MSG0207, AppMessage.MSG0000, MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
            {
                this.SetControlState(false);
                this.DeleteFile(this.FileId);
                this.FileId = string.Empty;
                this.ShowPicture();
                // 设置按钮状态
                this.SetControlState();
            }
        }    
    }
}


 

posted @ 2012-04-17 22:41  跟着阿笨一起玩.NET  阅读(4565)  评论(0编辑  收藏  举报