/****************************** * 说明:自定义图片控件(数据库存放图片地址) * 创建人:龚宇超 * 创建日期:2017-08-07 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.0 ******************************/ 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.IO; using System.Reflection; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors; using Lskj.Util; using Lskj.Business.Impl; using Lskj.Control.Model; using System.Threading; using Lskj.Business; using System.Net; using Lskj.Model; namespace Lskj.Control { /// /// 自定义图片控件 /// public partial class LabelImageEdit : BaseUserControl { private bool _isInit = true; /// /// 当前图片路径 /// public string CurrentImagePath = string.Empty; /// /// 图片控件 /// public PictureEdit TextEdit { get { return imgFile; } } //public event UnionEventHander UnionEvent; public event UploadEventHander UploadEvent; public event DeleteEventHander DeleteEvent; /// /// 关联回调事件 /// /// The sender. public delegate void UnionEventHander(object sender); /// /// 上传回调事件 /// /// The sender. public delegate void UploadEventHander(object sender); /// /// 删除回调事件 /// /// The sender. public delegate void DeleteEventHander(object sender); /// /// 配置的文件地址 /// public string DownloadUrl; public LabelImageEdit() { InitializeComponent(); } /// /// 说明:设置控件显示文本 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// 显示Lebel文本 public override string LabelText { get { return this.lblText.Text; } set { this.lblText.Text = value; if (FontSize > 0) { this.plLeft.Dock = DockStyle.Left; this.plLeft.AutoSize = false; this.lblText.AutoSize = false; this.lblText.Dock = System.Windows.Forms.DockStyle.Fill; this.lblText.Location = new System.Drawing.Point(0, 0); this.lblText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.plLeft.Width = value.Length * GetCharWidth(); GetCharWidthMultilingual(this.lblText, this.lblText.Text, this.plLeft); } else { this.plLeft.Width = this.lblText.Width + PaddingLeft; } } } /// /// 字体大小 /// /// The size of the control. public override float FontSize { get { return base.FontSize; } set { base.FontSize = value; if (value > 0) { this.lblText.Font = new Font(this.lblText.Font.FontFamily, value); this.TextEdit.Font = new Font(this.TextEdit.Font.FontFamily, value); } } } /// /// 说明:是否为空 /// 创建人:龚宇超 /// 创建日期:2017-11-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if this instance is empty; otherwise, false. /// The is empty. public override bool IsEmpty() { return base.Model != null && base.Model.IsEmpty && this.imgFile.Image != null; } /// /// 说明:图片是否改变 /// 创建人:龚宇超 /// 创建日期:2017-11-08 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if this instance is update; otherwise, false. public override bool IsUpdate() { return false; } /// /// 只读文本颜色 /// /// The color of the read only label. public override bool ReadOnly { get { return base.ReadOnly; } set { base.ReadOnly = value; this.imgFile.Properties.ReadOnly = value; this.lblText.ForeColor = value ? base.ReadOnlyLabelForceColor : Required ? base.RequiredLabelForceColor : base.DefaultLabelForceColor; } } /// /// 必填文本颜色 /// /// The color of the required label. public override bool Required { get { return base.Required; } set { base.Required = value; if (value) { this.lblText.ForeColor = base.RequiredLabelForceColor; } } } /// /// 说明:加载图片(先检测本地,不存在则从服务器下载) /// 创建人:龚宇超 /// 创建日期:2018-02-27 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The file value. public void LoadImage(string fileId, bool isInit = true) { try { // fieldValue:对应附件表fileId if (!string.IsNullOrEmpty(fileId)) { this._isInit = isInit; string relativePath = BaseModuleImpl.GetFileServerPath(fileId); string tempPath = Path.Combine(new string[] { PubUtil.FileDownLoadTempPath, relativePath }); string localPath = tempPath.Replace(Path.GetFileName(tempPath), ""); // 检查目录是否存在 if (!Directory.Exists(localPath)) Directory.CreateDirectory(localPath); if (File.Exists(tempPath)) { // 本地加载 this.TextEdit.Image = new Bitmap(File.OpenRead(tempPath)); } else { // 服务器下载 string filePath = Path.Combine(SystemInfo.Instance.ServerAttachPath, relativePath); AttachHelper.DownLoadFile(this.Handle, filePath); } this.CurrentImagePath = tempPath; } } catch (Exception ex) { try { if (!string.IsNullOrEmpty(fileId)) { this._isInit = isInit; string downUrl = fileId; if (!downUrl.StartsWith("http")) { string OAUrl = !string.IsNullOrEmpty(SystemInfo.Instance.OAUrl) && SystemInfo.Instance.OAUrl.EndsWith("/") ? SystemInfo.Instance.OAUrl : SystemInfo.Instance.OAUrl + "/"; downUrl = OAUrl + downUrl; string tempPath = Path.Combine(new string[] { PubUtil.FileDownLoadTempPath, "LabelImageEditFileLoad.jpg" }); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(downUrl); request.Method = "GET"; WebResponse response = request.GetResponse(); Stream stream = new FileStream(tempPath, FileMode.Create, FileAccess.ReadWrite); byte[] bArr = new byte[1024]; int size = response.GetResponseStream().Read(bArr, 0, (int)bArr.Length); while (size > 0) { stream.Write(bArr, 0, size); size = response.GetResponseStream().Read(bArr, 0, (int)bArr.Length); } stream.Close(); response.GetResponseStream().Close(); response.Close(); Image image = null; bool isImage = true; try { image = Image.FromFile(tempPath); } catch (Exception) { isImage = false; } if (image != null && isImage) { this.TextEdit.Image = image; //this.TextEdit.Image.Dispose(); } else { this.TextEdit.Image = global::Lskj.Control.Properties.Resources.file; } this.CurrentImagePath = tempPath; DownloadUrl = downUrl; } } } catch (Exception e) { } } } /// /// 说明:保存图片到本地 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// 图片前缀 /// 返回存放的地址 public string SaveImageToLocal(string prefix) { try { Image img = this.imgFile.Image; if (img != null) { string fileName = prefix + "_" + Guid.NewGuid().ToString().Replace("-", "") + ".jpg"; string tempPath = Path.Combine(new string[] { PubUtil.FileDownLoadTempPath, fileName }); this.CurrentImagePath = tempPath; // 不存在创建目录 if (!Directory.Exists(Path.Combine(new string[] { PubUtil.FileDownLoadTempPath }))) { Directory.CreateDirectory(Path.Combine(PubUtil.FileDownLoadTempPath)); } if (!File.Exists(tempPath)) { Bitmap bitmap = new Bitmap(img); bitmap.Save(tempPath); } return (File.Exists(tempPath)) ? tempPath : string.Empty; } } catch (Exception) { } return string.Empty; } #region 右键菜单事件 /// /// 预览图片 /// /// /// private void tsmi_Preview_Click(object sender, EventArgs e) { try { string url = string.Format(this.DownloadUrl, ERPInfo.Instance.UserName, ERPInfo.Instance.Password, "", "0"); // 固定传入参数(窗口标题、操作员ID、操作员名称、权限、模版编号) string[] defaultArgs = string.Format(ModuleArgs.DefaultArgs, "预览", ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, "2", "").Split('~'); string[] menuArgs = new string[] { "", "", url } ; string[] args = defaultArgs.Concat(menuArgs).ToArray(); IForm form = FormHelper.LoadDllForm("Lskj.PubBrower.dll", args); DialogResult result = form.SubForm.ShowDialog(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:剪切图片 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void tsmi_cut_Click(object sender, EventArgs e) { try { this.CurrentImagePath = string.Empty; InvokeMenuMethod(getMenu(imgFile), "OnClickedCut"); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:拷贝图片 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void tsmi_copy_Click(object sender, EventArgs e) { try { InvokeMenuMethod(getMenu(imgFile), "OnClickedCopy"); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:粘贴图片 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void tsmi_paste_Click(object sender, EventArgs e) { try { this.CurrentImagePath = string.Empty; InvokeMenuMethod(getMenu(imgFile), "OnClickedPaste"); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:删除图片 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void tsmi_delete_Click(object sender, EventArgs e) { try { this.CurrentImagePath = string.Empty; InvokeMenuMethod(getMenu(imgFile), "OnClickedDelete"); if (DeleteEvent != null) { DeleteEvent(this); } } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:加载图片 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void tsmi_load_Click(object sender, EventArgs e) { try { if (UploadEvent != null) { UploadEvent(this); } //InvokeMenuMethod(getMenu(imgFile), "OnClickedLoad"); //OpenFileDialog openFileDialog = new OpenFileDialog(); //if (openFileDialog.ShowDialog() == DialogResult.OK) //{ // if (!string.IsNullOrEmpty(openFileDialog.FileName)) // { // Image image = null; // bool isImage = true; // try // { // image = Image.FromFile(openFileDialog.FileName); // } // catch (Exception) // { // isImage = false; // } // if (image != null && isImage) // { // this.imgFile.Image = image; // } // else // { // this.imgFile.Image = global::Lskj.Control.Properties.Resources.file; // } // this.CurrentImagePath = openFileDialog.FileName; // } // else // { // this.CurrentImagePath = string.Empty; // } //} } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:保存图片 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void tsmi_save_Click(object sender, EventArgs e) { try { InvokeMenuMethod(getMenu(imgFile), "OnClickedSave"); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:关联其他图片 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. //private void tsmi_union_Click(object sender, EventArgs e) //{ // try // { // if (UnionEvent != null) // { // UnionEvent(this); // } // } // catch (Exception ex) // { // string Message = ErrorMessage.PromptErrorMessage(ex); // MessageUtil.Show(Message, ex.Message); // } //} /// /// 说明:上传图片 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. //private void tsmi_upload_Click(object sender, EventArgs e) //{ // try // { // if (UploadEvent != null) // { // UploadEvent(this); // } // } // catch (Exception ex) // { // string Message = ErrorMessage.PromptErrorMessage(ex); // MessageUtil.Show(Message, ex.Message); // } //} #endregion #region 其它事件 /// /// 说明:打开右键菜单之前 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void cmsMenu_Opening(object sender, CancelEventArgs e) { try { bool isImage = imgFile.Image == null; tsmi_cut.Enabled = !isImage; tsmi_copy.Enabled = !isImage; tsmi_delete.Enabled = !isImage; //tsmi_save.Enabled = !isImage; tsmi_load.Enabled = true; //tsmi_union.Enabled = true; //tsmi_upload.Enabled = !isImage; //tsmi_paste.Enabled = ClipboardHelper.ContainsImage(); } catch (Exception ex) { string Message = ErrorMessage.PromptErrorMessage(ex); MessageUtil.Show(Message, ex.Message); } } /// /// 说明:打开大图查看 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. protected void imgFile_MouseDoubleClick(object sender, MouseEventArgs e) { //FrmImageDialog imageDialog = new FrmImageDialog(); //imageDialog.ImageSource = this.ImgFile.Image; //imageDialog.ShowDialog(); } #endregion #region 扩展PictureEdit /// /// 说明:执行右键菜单方法 /// 创建人:龚宇超 /// 创建日期:2017-08-07 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The menu. /// The name. private void InvokeMenuMethod(PictureMenu menu, string name) { MethodInfo mi = typeof(PictureM