• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

 

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

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap