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();
}
}
}
}
吉日嘎拉(蒙古语为吉祥如意),2000年毕业于黑龙江大学计算机系软件专业,目前定居杭州,典型的IT软件土鳖一个,外号“软件包工头”。
通用权限管理系统组件(GPM - General Permissions Manager)自2003年开始发布,目前是国内注册用户和免费盗版用户最多的权限管理系统,是各种信息管理系统开发中彻底的权限解决方案。本组件支持多种主流数据库(Oracle、sqlsever、db2、mysql),功能强大,使用方便,代码简洁,思路严谨,被广大支持者称为权限管理系统中的“走火入魔级权限管理系统”。
精心维护通用权限管理系统组件(GPM - General Permissions Manager)有8年多,3年的不断推广,20万行经典的业务逻辑积累,经过上万次的调试修正,经历了四百个付费客户,上百软件公司的实战开发。
11年以上开发经验,外企工作5年,上市公司3年,独立经营软件公司2年,主持研发部门管理工作4年以上。
将权限管理、工作流做到我能力的极致,一个人只能做好那么很少的几件事情。
QQ:252056973,Mail:jirigala_bao@hotmail.com
访问者分布
通用权限管理模块的严谨设计定位、精心编码实现、不断维护推广、持续优化改进,主要是为了实现一个可以高度重复利用劳动成果的工具软件并×××给所需的人们,另想成为国人值得骄傲的知名软件功能模块。
可供国内管理类开发人员在日常工作中进行灵活二次开发利用的模块,开发管理类软件的必备工具之一,我们的目标就是让程序员早点儿回家休息。
淘宝店地址:http://jirigala.taobao.com
转载于:https://blog.51cto.com/jirigala/809334
C#实现外部图片的拖拽到应用程序的简单功能,附全部源码,供有需要的参考...相关推荐
- 手把手教你从0到1通过 Express 完成图片上传并保存至阿里云OSS功能(附详细源码)
- 微信小程序-如何实现图片授权保存本地?【亲测有效,附完整源码】
- android 选择相册拍照图片 仿gridview九宫格 recycleview九宫格图片(可拖拽)
九宫格图片(可拖拽) 自己项目用到的一个功能 实现九宫格显示图片 支持拍照和图库,可以拖拽排序.基本可以直接在项目使用 上图: [下载地址(CSDN竟然不能选择下载0资源积分)] 下载地址(githu ...
- 拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素
介绍 HTML5 提供了专门的拖拽与拖放的 API,目前各浏览器都已支持,包括 IE.HTML 拖放(Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能.例如,用户可使用鼠标选择可拖 ...
- 关于PyQt5在Label标签插入图片并且实现图片的拖拽和缩放
作为菜鸟为了实现这两个功能,肯定是要借鉴一下大佬的文章的,下面的链接就是我思路的源头: https://blog.csdn.net/qq_36780295/article/details/108844 ...
- vue+element-ui实现富文本(含有图片粘贴拖拽上传)
vue+element-ui实现富文本(含有图片粘贴拖拽上传) Just For Share | 仅仅分享 首先需要安装 cnpm i vue-quill-editor -D 富文本编辑器 cnpm ...
- 可视化拖拽生成小程序,傻瓜式免开发实现一款属于自己的小程序,云开发低码入坑指北
前两天无意间知道了一种可以免开发,傻瓜式的拖拽生成小程序的一种方式.瞬间感觉作为程序员的石头哥离失业不远了.... 好在石头哥是一个爱学习的石头.所以今天就来看看这种靠拖拽生成小程序的平台是何方神圣. ...
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53939176 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...
- android 静态图片自动切换,Android静态图片人脸识别的完整demo(附完整源码)
Android静态图片人脸识别的完整demo(附完整源码) 来源:互联网 作者:佚名 时间:2015-03-24 20:07 本文介绍了android静态识别人脸并进行标记人眼位置及人脸框的完整dem ...
最新文章
- 基于 MATLAB 的 PCM 编码解码实现
- Asp.Net MVC中的RenderPartial 和 RenderAction 【转】
- windows消息机制和Linux,Windows消息机制初谈 (转)
- opencv +数字识别
- 如何拼局域网所有ip_求助 家庭网络如何布线让所有网口在同一个局域网内
- Linux环境下的LD_PRELOAD:库预加载
- sql server序列_SQL Server中的Microsoft时间序列
- 鸿蒙第三代手机,华为第三代折叠屏手机面市 余承东披露今年4月旗舰机启用鸿蒙系统...
- Android 吉字节问题
- 怎么用HTML表格中加上线条,如何在html的表格中加入边框线
- python scapy 抓包_python+scapy 抓包与解析
- 12.面向对象(继承/super/接口/抽象类)
- java se 试题_JavaSE基础试题附答案
- Java 形参和实参
- matlab画三维曲面有范围,matlab画三维曲面
- python html 中文 编码,如何用Python将HTML非ASCII数据编码为UTF-8
- 汇编 标志寄存器 和寻址方式
- C语言 兔子繁衍问题
- 汽车+大数据=变形金刚?解读汽车大数据价值
- Android流畅启动动画,简单设置你的安卓 绝对流畅到爆
热门文章
- 大学python挂科补考_大一就挂科了,怎么办。感觉没了信心?
- 软引用和弱引用的应用场景
- linux嵌入式工作室,【课程培训】嵌入式linux驱动开发系列教程 | linux2web工作室...
- 我的世界服务器显示outofmemory,游戏中out of memory解决办法分享
- 非标自动化企业前十名_自动化输送+旋盖,竟如此简单!机械设计教程精选!...
- mesh gradient的求法
- 利用EfficientNet-B5从眼底摄影检测糖尿病视网膜病变的严重程度
- ResNeX论文概述
- android查看应用权限管理,通过adb列出Android应用程序的权限
- 推荐系统思维导图——第一章