C#实现外部图片的拖拽拖入图片框

C#实现外部图片的拖拽拖入图片框

pictureBox1的属性里面直接选择是找不到的,只能代码设置

拖入到picturebox上面:

 //这句代码不会抱错,但是需要手动输入,.net编辑器无法自动识别AllowDrop
            this.pictureBox1.AllowDrop = true;
复制代码
private void Form1_Load(object sender, EventArgs e)
        {
            //这句代码不会抱错,但是需要手动输入,.net编辑器无法自动识别AllowDrop
            this.pictureBox1.AllowDrop = true;
        }
         
        private void pictureBox1_DragDrop(object sender, DragEventArgs e)
        {
            string fileName = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
            this.pictureBox1.Image = Image.FromFile(fileName);
        }
        private void pictureBox1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
                e.Effect = DragDropEffects.Link;
            else e.Effect = DragDropEffects.None; 
        }
复制代码

 

Form1才有AllowDrop属性,picturebox没有,是拖入到form窗口

pictureBox_live

 

 

这样

复制代码
  private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            string str = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
            pictureBox1.Image = Image.FromFile(str);
            
        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Link;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }
复制代码

或者这样:

复制代码
  private void Form_Main_WaferSaw_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.pic.ImageLocation = file[i];
                        this.pictureBox_live.ImageLocation = file[i];
                        // 设置按钮状态
                        //this.SetControlState();
                        break;
                    }
                }
            }
        }

        private void Form_Main_WaferSaw_DragOver(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Move;
            }
        }
复制代码

 


 

 

复制代码
//-----------------------------------------------------------
// 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();
            }
        }    
    }
}
复制代码

 

 

posted @   txwtech  阅读(752)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-04-06 C# JArray.Add方法代码示例--json数组添加数据方法
2022-04-06 MySQL一张表最多能存多少数据?
点击右上角即可分享
微信分享提示