C# winform 广告机 网络多媒体发布系统桌面版之二
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;
using Dare.DN.Services.EntityServices;
using Dare.DN.Components.Entities.Media;
using Dare.Utilities.Model;
using Dare.Utilities.Microsoft;
using Microsoft.Win32;
using Dare.Utilities;
namespace DareMediaTray
{
public partial class MediaUC : UserControl
{
MediaFolderInfoService folderService = Dare.DN.Services.Application.Instance.GetDbService<MediaFolderInfoService>();
MediaInfoService mediaService = Dare.DN.Services.Application.Instance.GetDbService<MediaInfoService>();
int folderId = 0;
int folderParentId = -1;
TreeNode mcNode;
public MediaUC()
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
InitializeComponent();
ToolTip toolTip = new ToolTip();
toolTip.SetToolTip(this.btnAddFolder, "添加目录");
toolTip.SetToolTip(this.btnEditFolder, "编辑目录");
toolTip.SetToolTip(this.btnDelFolder, "删除目录");
toolTip.SetToolTip(this.btnFreshFolder, "刷新目录");
toolTip.SetToolTip(this.btnImport, "导入媒体");
toolTip.SetToolTip(this.btnEdit, "编辑媒体");
toolTip.SetToolTip(this.btnDelete, "删除媒体");
toolTip.SetToolTip(this.btnRefresh, "刷新媒体");
toolTip.SetToolTip(this.btnConvert, "转换文档");
toolTip.SetToolTip(this.txtSearch, "输入媒体名称");
mdLView.View = View.Details;
mdLView.GridLines = true;
mdLView.FullRowSelect = true;
mdLView.ShowItemToolTips = true;
mdLView.HideSelection = false;
//mdLView.CheckBoxes = true;
//mdLView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
ImageList imgList = new ImageList();
imgList.TransparentColor = System.Drawing.Color.Transparent;
imgList.Images.Add("audio", (System.Drawing.Image)(Properties.Resources.audioico));
imgList.Images.Add("video", (System.Drawing.Image)(Properties.Resources.videoico));
imgList.Images.Add("image", (System.Drawing.Image)(Properties.Resources.imageico));
imgList.Images.Add("text", (System.Drawing.Image)(Properties.Resources.textico));
imgList.Images.Add("doc", (System.Drawing.Image)(Properties.Resources.pptico));
mdLView.SmallImageList = imgList;
FolderTrviewBind();
LoadInt();
}
private void LoadInt()
{
this.pageControl1.PageIndex = 1;
this.pageControl1.PageSize = 42;
this.pageControl1.Refresh();
MediaLViewBind(folderId);
}
/// <summary>
/// 媒体目录树绑定
/// </summary>
public void FolderTrviewBind()
{
folderTrview.Nodes.Clear();
folderTrview.ImageList = imageList1;
folderTrview.ImageIndex = 0;
folderTrview.SelectedImageIndex = 1;
folderTrview.ShowLines = true;
folderTrview.ShowNodeToolTips = true;
folderTrview.ShowRootLines = true;
folderTrview.Select();
TreeNode rtNode = new TreeNode("素材目录");
folderTrview.Nodes.Add(rtNode);
List<MediaFolderInfo> folders;
folders = folderService.GetMediaRootFolder(-1000);
if (folders != null)
{
//FolderTrviewBind(folderTrview.Nodes, 0, folders);
FolderTrviewBind(rtNode.Nodes, 0, folders);
}
//展开父节点
this.folderTrview.Nodes[0].Expand();
this.folderTrview.Nodes[0].BackColor = Color.SkyBlue;
this.folderTrview.Select();
}
/// <summary>
/// 目录树深度绑定
/// </summary>
/// <param name="nodes"></param>
/// <param name="folders"></param>
private void FolderTrviewBind(TreeNodeCollection nodes, int parentId, List<MediaFolderInfo> folders)
{
foreach (MediaFolderInfo folder in folders)
{
if (folder.ParentId == parentId)
{
TreeNode tn = new TreeNode();
tn.Text = folder.Name;
tn.Tag = folder.Id;
switch (folder.Name)
{
case "video":
tn.ToolTipText = "视频目录";
break;
case "background":
tn.ToolTipText = "背景目录";
break;
case "image":
tn.ToolTipText = "图片目录";
break;
case "audio":
tn.ToolTipText = "音频目录";
break;
case "text":
tn.ToolTipText = "文本目录";
break;
case "document":
tn.ToolTipText = "文档目录";
break;
default:
break;
}
tn.ContextMenuStrip = contextMenuStrip2;
nodes.Add(tn);
if (folder.HasChildren != false)
{
FolderTrviewBind(tn.Nodes, folder.Id, folders);
}
}
}
}
private void btnEdit_Click(object sender, EventArgs e)
{
if (this.mdLView.SelectedItems.Count == 0)
{
MessageBox.Show(this, "请选择要编辑的媒体文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else if (this.mdLView.SelectedItems.Count > 1)
{
MessageBox.Show(this, "请选择单个媒体编辑文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
int mediaId=DataConvert.ToInt32(this.mdLView.SelectedItems[0].Tag);
MediaInfo md=mediaService.GetByMediaId(mediaId);
if (md.RefCount > 0)
{
MessageBox.Show(this, "媒体已被使用,禁止修改属性!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
MediaEditFrm frm = new MediaEditFrm(mediaId, folderId, this);
frm.ShowDialog();
}
}
}
/// <summary>
/// 初始化树节点背景色
/// </summary>
private void ClearBackColor()
{
TreeNodeCollection nodes = folderTrview.Nodes;
foreach (TreeNode n in nodes)
{
n.BackColor = Color.Transparent;
ClearRecursive(n);
}
}
private void ClearRecursive(TreeNode treeNode)
{
foreach (TreeNode tn in treeNode.Nodes)
{
tn.BackColor = Color.Transparent;
ClearRecursive(tn);
}
}
private void folderTrview_AfterSelect(object sender, TreeViewEventArgs e)
{
ClearBackColor();
if (e.Node.Tag != null)
{
folderId = DataConvert.ToInt32(e.Node.Tag.ToString());
MediaFolderInfo folder = folderService.Get(folderId);
if (folder != null) folderParentId = folder.ParentId;
}
else
{
folderId = 0;
folderParentId = -1;
}
mcNode = e.Node;
e.Node.BackColor = Color.SkyBlue;
this.pageControl1.PageIndex = 1;
this.pageControl1.PageSize = 42;
this.pageControl1.Refresh();
this.txtSearch.Text = string.Empty;
MediaLViewBind(folderId);
}
/// <summary>
/// 媒体文件列表绑定
/// </summary>
/// <param name="folderId"></param>
public void MediaLViewBind(int folderId)
{
try
{
mdLView.Items.Clear();
List<MediaInfo> mediaList = null;
int totalCount = 0;
if (folderId != 0)
{
mediaList = mediaService.SearchByType(folderId > 0 ? new int[] { folderId } : null, txtSearch.Text, "create_date desc", pageControl1.PageIndex, pageControl1.PageSize, out totalCount, new MediaType[] { MediaType.Audio, MediaType.Image, MediaType.Text, MediaType.Video });
}
else
{
mediaList = mediaService.SearchByType(null, txtSearch.Text, "create_date desc", pageControl1.PageIndex, pageControl1.PageSize, out totalCount, new MediaType[] { MediaType.Audio, MediaType.Image, MediaType.Text, MediaType.Video });
}
mdLView.BeginUpdate();
foreach (MediaInfo md in mediaList)
{
ListViewItem li = new ListViewItem();
li.Tag = md.Id;
li.SubItems[0].Text = md.Name;
switch ((int)md.Type)
{
case 1:
li.ImageKey = "video";
li.SubItems.Add("视频");
break;
case 2:
string extName = Path.GetExtension(md.Name).ToLower();
if (extName == ".ppt" || extName == ".pptx")
{
li.ImageKey = "doc";
li.SubItems.Add("文档");
}
else
{
li.ImageKey = "image";
li.SubItems.Add("图片");
}
break;
case 3:
li.ImageKey = "audio";
li.SubItems.Add("音频");
break;
case 4:
li.ImageKey = "text";
li.SubItems.Add("文本");
break;
default:
break;
}
li.SubItems.Add(Dare.Utilities.EnumDisplayNameAttribute.GetDisplayName(md.State));
li.SubItems.Add(md.RefCount.ToString());
li.SubItems.Add(new FileSizeData(md.FileLength).ToString());
li.SubItems.Add(md.Width == null ? "0" : md.Width.Value.ToString());
li.SubItems.Add(md.Height == null ? "0" : md.Height.Value.ToString());
li.SubItems.Add(md.CreateDate.Value == null ? "0" : md.CreateDate.Value.ToString("yyyy-MM-dd HH:mm"));
mdLView.Items.Add(li);
}
mdLView.EndUpdate();
//初始化列表排序
this.mdLView.ListViewItemSorter = new ListViewSort();
//初始化分页
this.pageControl1.RecordCount = totalCount;
this.pageControl1.Refresh();
}
catch(Exception ex)
{
Dare.DN.Services.Application.Instance.Logger.ErrorFormat("MediaUC-MediaLViewBind-错误原因:{0}", ex.Message);
}
}
private void btnImport_Click(object sender, EventArgs e)
{
if (folderId == 0)
{
MessageBox.Show(this, "请选择要导入的媒体目录!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
MediaImportCheck(folderId);
}
private void MediaImportCheck(int folderId)
{
string rootPath = Path.GetPathRoot(Application.StartupPath);
DriveInfo drive = new DriveInfo(rootPath);
if (drive.AvailableFreeSpace < 1024 * 1024)
{
MessageBox.Show(this, "对不起,当前磁盘[" + rootPath + "]剩余空间[" + new FileSizeData(drive.AvailableFreeSpace).ToString() + "],请清理磁盘空间!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
using (OpenFileDialog ofd = new OpenFileDialog())
{
string[] files = null;
int rootFolderId=0;
rootFolderId = folderService.GetMediaFolderRootParentId(folderId);
switch (rootFolderId)
{
case 1:
ofd.Title = "导入audio文件";//resource\audio
ofd.Filter = "音频文件(*.wav,*.mp3,*.aac,*.wma)|*.wav;*.mp3;*.aac;*.wma";
break;
case 2:
ofd.Title = "导入background文件";//resource\background
ofd.Filter = "背景文件(*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.tif,*.tiff)|*.bmp;*.jpg;*.jpeg;*.png;*.gif;*.tif;*.tiff";
break;
case 3:
ofd.Title = "导入image文件";//resource\image
ofd.Filter = "图片文件(*.bmp,*.jpg,*.jpeg,*.png,*.gif,*.tif,*.tiff)|*.bmp;*.jpg;*.jpeg;*.png;*.gif;*.tif;*.tiff";
break;
case 7:
ofd.Title = "导入text文件";//resource\text
ofd.Filter = "文本文件(*.txt)|*.txt";
break;
case 8:
ofd.Title = "导入video文件";//resource\video
ofd.Filter = "视频文件(*.mpg,*.mpeg,*.vob,*.avi,*.mkv,*.mov,*.mp4,*.flv,*.wmv,*.ts,*.trp)|*.mpg;*.mpeg;*.vob;*.avi;*.mkv;*.mov;*.mp4;*.flv;*.wmv;*.ts;*.trp";
break;
case 9:
ofd.Title = "导入document文件";//resource\text
ofd.Filter = "文档文件(*.ppt,*.pptx)|*.ppt;*.pptx";
break;
default://resource\unknow
break;
}
ofd.Multiselect = true;
if (ofd.ShowDialog() == DialogResult.OK)
{
int maxCount = Dare.DN.Services.Application.Instance.AppSettings.MediaMaxCount;
files = ofd.FileNames;
if (files.Length > maxCount)
{
MessageBox.Show(this, string.Format("对不起,一次最多只能导入{0}个媒体文件!", maxCount.ToString()), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
bool isResult = false;
foreach (string file in files)
{
string extName = Path.GetExtension(file).ToLower();
if (extName == ".ppt" || extName == ".pptx")
{
if (!PowerPointHelper.IsPowerPointInstalled())
{
isResult = true;
break;
}
}
}
if (isResult)
{
MessageBox.Show(this, "未发现Microsoft PowerPoint 2000及以上版本安装于本机!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//同名文件集合
List<string> listFiles = new List<string>();
//无同名文件集合
List<string> listNoFiles = new List<string>();
foreach (string file in files)
{
string name = Path.GetFileName(file);
//if (mediaService.IsMediaExsit(folderId, RemoveSpecialChar(name)))
if (mediaService.IsMediaExsit(folderId, name))
{
listFiles.Add(name);
}
else
{
listNoFiles.Add(file);
}
}
if (listFiles.Count > 0)
{
string filesShow = string.Empty;
filesShow = String.Join("\r\n", listFiles.ToArray());
#region
//if (MessageBox.Show(this, string.Format("系统已存在下列同名文件:\r\n\r\n{0}\r\n\r\n按【是】全部覆盖,按【否】跳过重复.", filesShow.Length > 200 ? filesShow.Substring(0, 200) + "\r\n............................." : filesShow), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
//{
// MediaImportFrm frm = new MediaImportFrm(folderId, files, this);
// frm.ShowDialog();
//}
//else
//{
// if (listNoFiles.Count > 0)
// {
// MediaImportFrm frm = new MediaImportFrm(folderId, listNoFiles.ToArray(), this);
// frm.ShowDialog();
// }
// else
// {
// //MessageBox.Show(this, "文件全部重复,没有可跳过项!", "提示", MessageBoxButtons.OK,MessageBoxIcon.Information);
// return;
// }
//}
#endregion
MessageBox.Show(this, string.Format("系统已存在下列同名文件:\r\n\r\n{0}\r\n\r\n请更换名称后,再导入.", filesShow.Length > 200 ? filesShow.Substring(0, 200) + "\r\n............................." : filesShow), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
MediaImportFrm frm = new MediaImportFrm(folderId, files, this);
frm.ShowDialog();
}
}
}
}
/// <summary>
/// 媒体文件名非法字符过滤
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private string RemoveSpecialChar(string input)
{
string[] aryChar = { "\"\"", "/", ":", "*", "?", "|", "<", ">", """, "&", " ", "+", "=", ",", "'", "%", "#", };
for (int i = 0; i < aryChar.Length; i++)
{
input = input.Replace(aryChar[i], string.Empty);
}
return input;
}
private void MediaLView_ColumnClick(object sender, ColumnClickEventArgs e)
{
ListView lv = sender as ListView;
ListViewSort ls = lv.ListViewItemSorter as ListViewSort;
// 检查点击的列是不是现在的排序列.
if (e.Column == ls.SortColumn)
{
// 重新设置此列的排序方法.
if (ls.Order == SortOrder.Ascending)
{
ls.Order = SortOrder.Descending;
}
else
{
ls.Order = SortOrder.Ascending;
}
}
else
{
// 设置排序列,默认为正向排序
ls.SortColumn = e.Column;
ls.Order = SortOrder.Ascending;
}
// 用新的排序方法对ListView排序
lv.Sort();
}
private void pageControl1_PageIndexChanged(object sender, EventArgs e)
{
if (folderId != 0)
{
MediaLViewBind(folderId);
}
else
{
MediaLViewBind(0);
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (this.mdLView.SelectedItems.Count == 0)
{
MessageBox.Show(this, "请选择要删除的媒体文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
if (MessageBox.Show("确定要删除选择的媒体文件吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK)
{
StringBuilder sb = new StringBuilder();
foreach (ListViewItem lv in this.mdLView.SelectedItems)
{
if (!mediaService.Delete(DataConvert.ToInt32(lv.Tag))) sb.AppendFormat("删除资源文件失败!原因:{0}\r\n", mediaService.LastException.Message);
}
if (sb.ToString().Length != 0) MessageBox.Show(this, sb.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
btnRefresh_Click(sender, e);
}
}
}
private void btnRefresh_Click(object sender, EventArgs e)
{
if (folderId != 0)
{
MediaLViewBind(folderId);
}
else
{
MediaLViewBind(0);
}
}
private void importMenuItem_Click(object sender, EventArgs e)
{
btnImport_Click(sender, e);
}
private void deleteMenuItem_Click(object sender, EventArgs e)
{
btnDelete_Click(sender, e);
}
private void refreshMenuItem_Click(object sender, EventArgs e)
{
btnRefresh_Click(sender, e);
}
private void importFdMenuItem_Click(object sender, EventArgs e)
{
MediaImportCheck(folderId);
}
private void editerMenuItem_Click(object sender, EventArgs e)
{
btnEdit_Click(sender, e);
}
private void folderTrview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
TreeNode tn = folderTrview.GetNodeAt(e.X, e.Y);
if (tn.Tag != null)
{
folderId = DataConvert.ToInt32(tn.Tag.ToString());
MediaFolderInfo folder = folderService.Get(folderId);
if (folder != null) folderParentId = folder.ParentId;
}
else
{
folderId = 0;
folderParentId = -1;
}
this.folderTrview.SelectedNode = tn;
}
}
private void btnSearch_Click(object sender, EventArgs e)
{
LoadInt();
}
private void btnConvert_Click(object sender, EventArgs e)
{
if (this.mdLView.SelectedItems.Count == 0)
{
MessageBox.Show(this, "请选择要转换的文档文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
bool isConvert = false;
List<MediaInfo> mdList = new List<MediaInfo>();
foreach (ListViewItem lv in this.mdLView.SelectedItems)
{
if (lv.SubItems[2].Text == "等待转换")
{
ImageMediaInfo md = new ImageMediaInfo();
md.Id = (int)lv.Tag;
md.Name = lv.Text;
//md.FolderId = 9;
md.Comment = lv.SubItems[4].Text;
mdList.Add(md);
&nb%2
邮箱:steven9801@163.com
QQ: 48039387
浙公网安备 33010602011771号