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

简介: 本文摘自博客园牛人吉日嘎啦。通用权限管理系统组件源码里,有职员管理的功能,实现了直接可以把照片拖拽过来的功能,用起来会很方便。想要控件支持拖拽,需要设置 AllowDrop 属性。还需要写下面的2个事件。

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

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

想要控件支持拖拽,需要设置 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();
            }
        }    
    }
}


 

目录
相关文章
|
4天前
|
存储 算法 C#
C# 生成指定图片的缩略图
C# 生成指定图片的缩略图
|
4天前
|
C# 开发工具 数据安全/隐私保护
C# 给图片添加文字水印
C# 给图片添加文字水印
|
4天前
|
开发框架 .NET C#
C# 自动填充文字内容到指定图片
C# 自动填充文字内容到指定图片
|
2月前
|
API C# 数据安全/隐私保护
C# 实现网页内容保存为图片并生成压缩包
C# 实现网页内容保存为图片并生成压缩包
|
7月前
C#WPF 图片在显示时没有问题,但在运行时图片显示不出来的解决
选中项目,点击右上角的显示全部文件按钮,会将默认隐藏的文件显示出来,选中所需图片,右键,添加到项目,然后选择图片查看属性,生成操作选择resource。完毕。本人目前的解决方案。
267 41
C#WPF 图片在显示时没有问题,但在运行时图片显示不出来的解决
|
5月前
|
API C#
C# 调用系统“API“设置图片为“桌面壁纸“
C# 调用系统“API“设置图片为“桌面壁纸“
|
7月前
|
C#
C# 图片RGB处理判断
C# 图片RGB处理判断 需要:根据一张原始图的RGB平均值和新的图片的RGB平均值的差距,来判断图中是否出现除原图中物体外的其他物体 前提:.Net framework 4.8 及以上 示例代码: 程序集:using System;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imagin...
24 0
|
10月前
|
人工智能 文字识别 API
C# 10分钟完成百度图片提取文字(文字识别)——入门篇
C# 10分钟完成百度图片提取文字(文字识别)——入门篇
|
算法 定位技术 C#
C#开发:不规则裁切图片
C#开发:不规则裁切图片
121 0