zoukankan      html  css  js  c++  java
  • 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();
                }
            }    
        }
    }


     

  • 相关阅读:
    135编辑器使用教程
    gitalb的搭建与使用
    关于String类型,转换BigDecimal .并且BigDecimal 的乘法计算
    关于MAP转换成驼峰命名法然后转换成实体
    java时间计算,获取某月第一天和最后一天
    Spring 自带的定时任务
    Hibernate jpa 在实体类中对于时间的注解
    noip2014总结
    sroHOBOorz来自HOBO的高精类
    2014年9月6日
  • 原文地址:https://www.cnblogs.com/51net/p/2454553.html
Copyright © 2011-2022 走看看