Files
ClientServerProject/ClientsLibrary/FileSupport/FileItemShow.cs

202 lines
6.7 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using HslCommunication;
using HslCommunication.Enthernet;
namespace ClientsLibrary.FileSupport
{
/// <summary>
/// 文件显示的子控件类
/// </summary>
public partial class FileItemShow : UserControl
{
#region Constructor
/// <summary>
/// 生成一个文件对象的显示控件
/// </summary>
/// <param name="client">客户端类</param>
/// <param name="factory">第一大类</param>
/// <param name="group">第二大类</param>
/// <param name="id">第三大类</param>
/// <param name="deleteCheck">用户自定义的删除确认委托,可用于验证权限及密码</param>
public FileItemShow(IntegrationFileClient client, string factory, string group, string id, Func<GroupFileItem,bool> deleteCheck)
{
InitializeComponent();
DeleteCheck = deleteCheck;
m_Factory = factory;
m_Group = group;
m_Id = id;
fileClient = client;
}
#endregion
#region Control Load
private void FileItemShow_Load(object sender, EventArgs e)
{
}
#endregion
#region Render File Information
/// <summary>
/// 设置文件数据
/// </summary>
/// <param name="file">文件的信息对象</param>
/// <param name="deleteEnable">删除控件的使能委托</param>
/// <exception cref="ArgumentNullException">file参数不能为空</exception>
public void SetFile(GroupFileItem file, Func<bool> deleteEnable)
{
fileItem = file;
// 设置文件的图标
pictureBox_file.Image = FileSupport.GetFileIcon(file.FileName);
label_file_name.Text = "文件名称:" + file.FileName;
label_file_size.Text = "大小:" + file.GetTextFromFileSize();
label_file_date.Text = "日期:" + file.UploadTime.ToString("yyyy-MM-dd");
label_file_mark.Text = "文件备注:" + file.Description;
label_upload_name.Text = "上传人:" + file.Owner;
label_download_times.Text = "下载数:" + file.DownloadTimes;
linkLabel_delete.Enabled = deleteEnable.Invoke();
linkLabel_download.Enabled = true; // 一般都是允许下载,如果不允许下载,在此处设置
}
#endregion
#region Delete Support
private void linkLabel_delete_Click(object sender, EventArgs e)
{
// 删除文件
if (DeleteCheck != null)
{
// 删除的权限检查
if(!DeleteCheck.Invoke(fileItem))
{
// 没有通过
return;
}
}
linkLabel_delete.Enabled = false;
Thread thread_delete_file = new Thread(new ThreadStart(ThreadDeleteFile));
thread_delete_file.IsBackground = true;
thread_delete_file.Start();
}
private void ThreadDeleteFile()
{
OperateResult result = fileClient.DeleteFile(fileItem.FileName, m_Factory, m_Group, m_Id);
if(IsHandleCreated) Invoke(new Action(() =>
{
if(result.IsSuccess)
{
MessageBox.Show("删除成功!,请刷新界面。");
}
else
{
MessageBox.Show("删除失败!错误:" + result.Message);
}
linkLabel_delete.Enabled = true;
}));
}
#endregion
#region Download Support
private void linkLabel_download_Click(object sender, EventArgs e)
{
//下载文件
linkLabel_download.Enabled = false;
Thread thread_down_file = new Thread(new ThreadStart(ThreadDownloadFile));
thread_down_file.IsBackground = true;
thread_down_file.Start();
}
private void ThreadDownloadFile()
{
string save_file_name = Application.StartupPath + "\\download\\files";
if (!Directory.Exists(save_file_name))
{
Directory.CreateDirectory(save_file_name);
}
save_file_name += "\\" + fileItem.FileName;
OperateResult result = fileClient.DownloadFile(
fileItem.FileName,
m_Factory,
m_Group,
m_Id,
DownloadProgressReport,
save_file_name
);
Invoke(new Action(() =>
{
if(result.IsSuccess)
{
if (MessageBox.Show("下载完成,路径为:" + save_file_name + Environment.NewLine +
"是否打开文件路径?", "打开确认", MessageBoxButtons.YesNo,
MessageBoxIcon.Information) == DialogResult.Yes)
{
System.Diagnostics.Process.Start("explorer.exe", @"/select," + save_file_name);
}
}
else
{
MessageBox.Show("下载失败,错误原因:" + result.Message);
}
if (IsHandleCreated) linkLabel_download.Enabled = true;
}));
}
private void DownloadProgressReport(long download, long totle)
{
if(IsHandleCreated)
{
if(InvokeRequired)
{
BeginInvoke(new Action(() =>
{
DownloadProgressReport(download, totle);
}));
return;
}
progressBar1.Value = (int)(download * 100 / totle);
}
}
#endregion
#region Private Members
private IntegrationFileClient fileClient; // 进行文件操作的客户端
private Func<GroupFileItem, bool> DeleteCheck; // 删除操作时的检查方法
private GroupFileItem fileItem; // 本控件关联显示的文件
private string m_Factory; // 文件的第一大类
private string m_Group; // 文件的第二大类
private string m_Id; // 文件的第三大类
#endregion
}
}