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();
            }
        }    
    }
}

 

 

 

 

将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值