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

 

 

 本文转自jirigala_bao 51CTO博客,原文链接:http://blog.51cto.com/jirigala/809334

相关文章
|
21天前
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
37 3
|
25天前
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
34 3
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
46 1
|
26天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
2月前
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
56 8
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
15 0
|
2月前
|
消息中间件 网络协议 安全
C# 一分钟浅谈:WebSocket 协议应用
【10月更文挑战第6天】在过去的一年中,我参与了一个基于 WebSocket 的实时通信系统项目,该项目不仅提升了工作效率,还改善了用户体验。本文将分享在 C# 中应用 WebSocket 协议的经验和心得,包括基础概念、C# 实现示例、常见问题及解决方案等内容,希望能为广大开发者提供参考。
136 0
|
2月前
|
物联网 C#
【C#】简单的蓝牙通讯功能实现
【C#】简单的蓝牙通讯功能实现
49 0
|
2月前
|
Web App开发 网络协议 API
基于C#编写一个远程桌面应用
基于C#编写一个远程桌面应用
61 0