using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Reflection; using DCSoft.Writer.Controls; using DCSoft.Writer; using DCSoft.Writer.Dom; using System.Windows.Forms; using System.Runtime.CompilerServices; using System.Xml; using HelperDB; using AxNsoOfficeLib; using System.Drawing; using DocumentManagement.UI; using System.Xml.Linq; namespace DocumentManagement { public class EventCodeCompiler { public CompilerResults cr; public Type type; private ElementEventTemplate eet; //string strMouseClickEvent = string.Empty; //string strContentChangedEvent = string.Empty; public EventCodeCompiler(ref WriterControl myEditControl, string strMouseClickEvent, string strContentChangedEvent) { eet = new ElementEventTemplate(); eet.MouseClick += new ElementMouseEventHandler(eetChk_MouseClick); eet.MouseDblClick += Eet_MouseDblClick; eet.ContentChanged += new ContentChangedEventHandler(eet_ContentChanged); myEditControl.GlobalEventTemplate_Element = eet; var providerOptions = new Dictionary(); providerOptions.Add("CompilerVersion", "v4.0"); CodeDomProvider cdp = new CSharpCodeProvider(providerOptions); CompilerParameters cp = new CompilerParameters(); cp.GenerateExecutable = false; cp.GenerateInMemory = true; cp.ReferencedAssemblies.Add("mscorlib.dll"); cp.ReferencedAssemblies.Add("System.dll"); cp.ReferencedAssemblies.Add("System.Core.dll"); cp.ReferencedAssemblies.Add("DCSoft.Writer.dll"); cp.ReferencedAssemblies.Add("System.Data.Linq.dll"); cp.ReferencedAssemblies.Add("System.Xml.Linq.dll"); cp.ReferencedAssemblies.Add("System.Windows.Forms.dll"); string source = @" namespace DocumentManagement { using System; using System.Collections.Generic; using System.Linq; using DCSoft.Writer; using DCSoft.Writer.Dom; using System.Windows.Forms; using System.Reflection; public class BindEvents { private static XTextDocument doc; private static XTextContainerElement container; public BindEvents(DCSoft.Writer.Controls.WriterControl myEditControl) { doc = myEditControl.Document; container = myEditControl.Document; } public static void MouseClickEvent(XTextElement element){ " + strMouseClickEvent + @" } public static void ContentChangedEvent(XTextElement element) { " + strContentChangedEvent + @" } private static void SetValueById(string Id, string type, object value) { var element = doc.GetElementsById(Id).FirstElement; if (element != null) { var pChecked = element.GetType().GetProperty(type); pChecked.SetValue(element, value, null); element.EditorRefreshView(); } } private static void SetValueByName(string name, string type,object value) { var element = doc.GetElementsByName(name).FirstElement; if (element != null) { var pChecked = element.GetType().GetProperty(type); pChecked.SetValue(element, value, null); element.EditorRefreshView(); } } private static bool GetCheckedValueByName(string name) { bool? result = null; var element = doc.GetElementsByName(name).FirstElement; if (element != null) { var pChecked = element.GetType().GetProperty(""Checked""); result = Convert.ToBoolean(pChecked.GetValue(element, null)); } return result.Value; } } } "; cr = cdp.CompileAssemblyFromSource(cp, source); if (cr.Errors.HasErrors) { MessageBox.Show("加载元素事件失败!"); } else { Assembly a = cr.CompiledAssembly; type = a.GetTypes().Where(x => x.IsClass).FirstOrDefault(); Type[] types = new Type[1]; types[0] = typeof(WriterControl); ConstructorInfo ci = type.GetConstructor(types); if (ci != null) { object obj = ci.Invoke(new object[] { myEditControl }); } } } public CompilerErrorCollection Errors { get { return cr.Errors; } } void eet_ContentChanged(object eventSender, ContentChangedEventArgs args) { if (args.Element is XTextInputFieldElement) { //var element = args.Element as XTextInputFieldElement; try { Object rslt = type.InvokeMember( "ContentChangedEvent", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, null, // for static class new object[] { args.Element }); } catch (Exception exp) { MessageBox.Show(exp.StackTrace + ":" + exp.Message); } } if (eventSender is XTextRadioBoxElement) { var element = args.Element as XTextRadioBoxElement; DocumentExtension.SetCocumentValue(element.WriterControl.Document.FileName, element.WriterControl.Document); } } void eetChk_MouseClick(object eventSender, ElementMouseEventArgs args) { if (args.Element is XTextCheckBoxElement || args.Element is XTextRadioBoxElement) { try { Object rslt = type.InvokeMember( "MouseClickEvent", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, null, // for static class new object[] { args.Element }); } catch (Exception exp) { MessageBox.Show(exp.StackTrace + ":" + exp.Message); } //var doc = myEditControl.Document; //var element = args.Element; } } private void Eet_MouseDblClick(object eventSender, ElementMouseEventArgs args) { if (args.Element is XTextInputFieldElement) { var element = args.Element as XTextInputFieldElement; if (element != null && element.Name == "Pacs") { var patientId = element.WriterControl.Document.Fields.ToArray().Where(x => x is XTextInputFieldElement && (x as XTextInputFieldElement).ID == "KB20180604104209620").FirstOrDefault(); ShowPacsText showPacsText = new ShowPacsText(); showPacsText.element = element; showPacsText.PatientNo = patientId.Text; showPacsText.ShowDialog(); //element.WriterControl.Parent as ucDocument. } } else if (eventSender is XTextImageElement) { if ((eventSender as XTextImageElement).Alt == "双击选择图片") { OpenFileDialog openFileDialogEmpImage = new OpenFileDialog(); openFileDialogEmpImage.Filter = "*.bmp|*.bmp|*.png|*.png|*.jpg|*.jpg|*.tiff|*.tiff";//图片格式 if (openFileDialogEmpImage.ShowDialog() == DialogResult.OK) { try { string empUpLoadPictureRealPos = openFileDialogEmpImage.FileName;//实际的文件路径+文件名 String[] empImageData = empUpLoadPictureRealPos.Split('.'); //empImageData[1]:是上传的图片的后缀名 string empUpLoadPictureFormat = empImageData[1]; //赋值图片 (eventSender as XTextImageElement).Image = new DCSoft.Drawing.XImageValue(Image.FromFile(empUpLoadPictureRealPos)); (eventSender as XTextImageElement).Title = empImageData[0]; (eventSender as XTextImageElement).EditorRefreshView(); } catch { MessageBox.Show("您选择的图片不能被读取或文件类型不对!", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } else { frmSelectPersonDoc personDoc = new frmSelectPersonDoc(); personDoc.PersonType = (eventSender as XTextImageElement).Alt == "" ? "麻醉医生" : (eventSender as XTextImageElement).Alt; personDoc.ShowDialog(); if (personDoc.SelectPersonData > 0) { int PersonId = personDoc.SelectPersonData; string SignatureStr = GetSignatureStr(PersonId); DCSoft.Drawing.XImageValue img = new DCSoft.Drawing.XImageValue(); img.ImageDataBase64String = SignatureStr; (eventSender as XTextImageElement).Image = img; (eventSender as XTextImageElement).Alt = "麻醉医生"; (eventSender as XTextImageElement).Title = PersonId.ToString(); (eventSender as XTextImageElement).EditorRefreshView(); } else { //清空图片 (eventSender as XTextImageElement).Image = null; (eventSender as XTextImageElement).Alt = "麻醉医生"; (eventSender as XTextImageElement).Title = ""; (eventSender as XTextImageElement).EditorRefreshView(); } //属性赋值判断 // (eventSender as XTextImageElement).Image.Value==null 判断是否有图片 是否签名 // (eventSender as XTextImageElement).Alt =="签名" 改为已签名或签名ID // (eventSender as XTextImageElement).Title =="标题" 存储对应ca人员介质 // (eventSender as XTextImageElement).ID =="image3" 标识Id用于定位赋值图片 } } } public string GetSignatureStr(int SelectPersonData) { string SignatureStr = ""; string sql = "select SignatureStr from Person where id=" + SelectPersonData; SignatureStr = DBHelper.ExecuteScalar(sql).ToString(); return SignatureStr; } } }