C#实现外部图片的拖拽到应用程序的简单功能,附全部源码,供有需要的参考...

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

管理软件能支持拖拽功能,会好用很多,用户体验也会改善很多。想做好一个组件需要把放放面面都彻底做好才可以。

 

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

 

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

 

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

 

ExpandedBlockStart.gif 代码
// -----------------------------------------------------------
//  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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值