using AIMSExtension; using DevComponents.DotNetBar.Controls; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Windows.Forms; namespace DrawGraph { [Serializable, JsonObject(MemberSerialization.OptOut)] public class BaseInfoTopManage : AreaManageBase { private OperationRecord myOpeRecord = null; public BaseInfoTopManage() { //自己要用的手术对象 myOpeRecord = null; } public BaseInfoTopManage(object _operationRecor, ZedGraphControl _zedControl, TemplateManage _template, string _name) : base(_operationRecor, _zedControl, _template, _name) { init(); } public void init() { //自己要用的手术对象 myOpeRecord = OpeRecord as OperationRecord; } #region 重写的事件 /// /// 鼠标点击画板 /// /// /// public override void MouseDown(ZedGraphControl sender, MouseEventArgs e) { } public override void MouseMove(ZedGraphControl sender, MouseEventArgs e) { } public override void MouseUp(ZedGraphControl sender, MouseEventArgs e) { } public override void MouseDoubleClick(ZedGraphControl sender, MouseEventArgs e) { } public override void KeyUp(ZedGraphControl sender, KeyEventArgs e) { } public SelectDictValue aSyncSelectDict = null; public override void Bind() { init(); aSyncSelectDict = SelectDictValue.CreateInstance(); myOpeRecord.clearAddObj(ZedControl); setPageTime(myOpeRecord.InRoomTime.Value); setXAxisTime(ZedControl.GraphPane, myOpeRecord.PageBegin, EVERY_PAGE_TIME_SPAN); GetcurrentPage(); #region 单独赋值绑定 if (myOpeRecord.InRoomTime != null) { template.SetObjValue(myOpeRecord, "OperationRecord.InRoomTime", myOpeRecord.InRoomTime.Value.ToString("yyyy-MM-dd"), myOpeRecord.InRoomTime.ToString()); } if (myOpeRecord.currentPage != 0) { template.SetObjValue(myOpeRecord, "OperationRecord.currentPage", myOpeRecord.currentPage.ToString(), myOpeRecord.currentPage.ToString()); } if (myOpeRecord.pageCount != 0) { template.SetObjValue(myOpeRecord, "OperationRecord.pageCount", myOpeRecord.pageCount.ToString(), myOpeRecord.pageCount.ToString()); } SetBMI(); #endregion List ables = PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack in ables) { AbleEditPackObj ableEdit = pack as AbleEditPackObj; if (ableEdit != null) { if (ableEdit.ControlType == EControlType.RadioButtonList) { ableEdit.IsVisible = true; Panel pan = ableEdit.CControl as Panel; if (pan != null) { foreach (Control conl in pan.Controls) { CheckBox chBox = conl as CheckBox; if (chBox != null) { chBox.CheckedChanged -= new EventHandler(txt_Leave); chBox.CheckedChanged += new EventHandler(txt_Leave); } } } } SetAbleEditView(ableEdit); } } } public void SetBMI(bool IsUpdate = false) { if (myOpeRecord.Height != null && myOpeRecord.Height != "" && myOpeRecord.Weight != null && myOpeRecord.Weight != "" && myOpeRecord.Height != "卧床" && myOpeRecord.Weight != "卧床") { double Weight = 0; bool isNum = double.TryParse(myOpeRecord.Weight, out Weight); double Height = 0; bool isNum2 = double.TryParse(myOpeRecord.Height, out Height); if (isNum == true && isNum2 == true && Height != 0 && Weight != 0) { double hei = Height / 100; double wei = Weight; double BMI = wei / hei / hei; myOpeRecord.BMI = Math.Floor(BMI).ToString(); template.SetObjValue(myOpeRecord, "OperationRecord.BMI", myOpeRecord.BMI.ToString(), myOpeRecord.BMI.ToString(), IsUpdate); } else { myOpeRecord.BMI = ""; template.SetObjValue(myOpeRecord, "OperationRecord.BMI", myOpeRecord.BMI.ToString(), myOpeRecord.BMI.ToString(), IsUpdate); } } } /// /// 设置可编辑组件的显示样式 /// /// private void SetAbleEditView(AbleEditPackObj ableEdit) { string span = ""; double spanSum = Math.Round((float)(ableEdit.OneUnitCount / 12)); for (int i = 0; i < spanSum; i++) { span += ""; } string text = "", value = ""; if (ableEdit != null) { switch (ableEdit.ControlType) { case EControlType.RadioButtonList: ableEdit.IsVisible = true; foreach (Control conl in ableEdit.CControl.Controls) { string spanT = span.Clone().ToString(); if (ableEdit.DfArrangement == EIsBool.True) { if (spanT.Length - conl.Text.Length >= conl.Text.Length) { spanT = spanT.Remove(spanT.Length - conl.Text.Length, conl.Text.Length); } } CheckBox radio = conl as CheckBox; if (radio.Checked) { text += "☑" + conl.Text + spanT; value = conl.Text; } else { text += "□" + conl.Text + spanT; } } template.SetObjValue(OpeRecord, ableEdit.ClassDataSourceName, text, value); break; case EControlType.Directory: value = ableEdit.PackValue; text = DBManage.GetDictionaryValuesById(ableEdit.PackValue, ableEdit.ControlTitleText); //设置属性的值 template.SetObjValue(OpeRecord, ableEdit.ClassDataSourceName, text, value); break; case EControlType.Directorys: value = ableEdit.PackValue; text = DBManage.GetDictionaryValuesById(ableEdit.PackValue, ableEdit.ControlTitleText); //设置属性的值 template.SetObjValue(OpeRecord, ableEdit.ClassDataSourceName, text, value); break; default: text = ableEdit.CControl.Text; value = ableEdit.CControl.Text; break; } } } /// /// 初始画的后置方法 /// public override void FollowUpMethod() { init(); } #endregion 重写的事件结束 #region 初始化时间轴 /// /// 设置页面的开始时间和结束时间 /// /// 手术信息对象 private void setPageTime(DateTime begin) { if (myOpeRecord.pageCount == 0) { myOpeRecord.pageCount = 1; myOpeRecord.sharpBegin = getSharpTime(begin); myOpeRecord.PageBegin = getPageBegin(begin, collectInterval, ref EVERY_PAGE_TIME_SPAN); myOpeRecord.lastPageBegin = myOpeRecord.PageBegin.AddHours(EVERY_PAGE_TIME_SPAN / 60); if (myOpeRecord.phListPack != null) { Panel pan3 = myOpeRecord.phListPack.CControl as Panel; if (pan3 != null) { pan3.Controls.Clear(); } } } } /// /// 根据采集间隔,确定页面时间跨度和页面开始时间 /// /// 给定时间(文本) /// 采集间隔(分钟) /// 页面时间跨度 /// 页面显示的开始时间 private DateTime getPageBegin(DateTime dt, double collectInterval, ref double timeSpan) { try { DateTime pageBegin = dt.Date.AddHours(dt.Hour); int ci = (int)(collectInterval * 60); if (ci <= 30) { if (dt.Minute >= 30) { pageBegin = pageBegin.AddMinutes(30); } timeSpan = 30; } else if (ci <= 60) { timeSpan = 60; } else { timeSpan = 240; TimeSpan ts = pageBegin - myOpeRecord.sharpBegin; int h = ts.Hours; h /= 4; pageBegin = myOpeRecord.sharpBegin.AddHours(h * 4); } return pageBegin; } catch (Exception exp) { throw exp; } } /// /// 获取系统的整点时刻 /// /// private DateTime getSharpTime(DateTime dt) { int ci = (int)dt.Minute; if (ci >= 50) { dt = DateTime.Parse(dt.ToString("yyyy-MM-dd HH:50:00")); } else if (ci >= 40) { dt = DateTime.Parse(dt.ToString("yyyy-MM-dd HH:40:00")); } else if (ci >= 30) { dt = DateTime.Parse(dt.ToString("yyyy-MM-dd HH:30:00")); } else if (ci >= 20) { dt = DateTime.Parse(dt.ToString("yyyy-MM-dd HH:20:00")); } else if (ci >= 10) { dt = DateTime.Parse(dt.ToString("yyyy-MM-dd HH:10:00")); } else if (ci < 10) { dt = DateTime.Parse(dt.ToString("yyyy-MM-dd HH:00:00")); } //if (ci >= 30) //{ // dt = DateTime.Parse(dt.ToString("yyyy-MM-dd HH:30:00")); //} //else if (ci < 30) //{ // dt = DateTime.Parse(dt.ToString("yyyy-MM-dd HH:00:00")); //} return dt; } private void setXAxisTime(GraphPane myPane, DateTime begin, double pageSpan) { myPane.XAxis.Scale.Min = new XDate(begin); myPane.X2Axis.Scale.Min = myPane.XAxis.Scale.Min; myPane.XAxis.Scale.Max = new XDate(begin.AddMinutes(pageSpan)); myPane.X2Axis.Scale.Max = myPane.XAxis.Scale.Max; } #endregion /// /// 响应可编辑区域的点击事件 /// /// /// public override void editAr_Click(object sender, EventArgs e) { try { //传过来的数据是不是可编辑的 AbleEditPackObj aEdit1S = sender as AbleEditPackObj; if (aEdit1S == null) return; //先把所有WINFORM组件隐藏 foreach (PackObjBase pack in PackManage.ListPob) { AbleEditPackObj aEdit = pack as AbleEditPackObj; if (aEdit != null) { if (aEdit.ControlType == EControlType.RadioButtonList) aEdit.IsVisible = true; else aEdit.IsVisible = false; } } SelectDictValue.Hidden(); //这句话很重要,只操作自己管理器里的组件 AbleEditPackObj aEdit1 = PackManage.ListPob.FirstOrDefault(s => s.PackTag == aEdit1S.PackTag) as AbleEditPackObj; //指定的组件显示 if (aEdit1 != null) { aEdit1.IsVisible = !aEdit1.IsVisible; Control conl = aEdit1.CControl; conl.Leave -= new EventHandler(txt_Leave); conl.DoubleClick -= Conl_DoubleClick; aEdit1S.CControl.MouseDown -= new MouseEventHandler(CControl_MouseDown); aEdit1S.CControl.KeyUp -= new KeyEventHandler(CControl_KeyUp); aEdit1S.CControl.TextChanged -= new EventHandler(CControl_TextChanged); aEdit1S.CControl.KeyPress -= new KeyPressEventHandler(CControl_KeyPress); ; //根据数据源名称进行不同的事件处理 switch (aEdit1.ClassDataSourceName) { case "OperationRecord.Height": ((TextBox)conl).BorderStyle = BorderStyle.Fixed3D; ((TextBox)conl).Focus(); ((TextBox)conl).Select(((TextBox)conl).Text.Length, 1); conl.Leave += new EventHandler(txt_Leave); break; case "OperationRecord.Weight": //体重 ((TextBox)conl).BorderStyle = BorderStyle.Fixed3D; ((TextBox)conl).Focus(); ((TextBox)conl).Select(((TextBox)conl).Text.Length, 1); conl.Leave += new EventHandler(txt_Leave); break; //case "OperationRecord.AnaesthesiaMethodId": // Anaes_Click(aEdit1, e); // break; case "OperationRecord.ASALevel": //ASA分级 TYZD_Click(aEdit1, e, true); break; case "OperationRecord.OperationSiteId": //手术体位 TYZD_Click(aEdit1, e); break; //case "OperationRecord.Fasting": //术前禁食 // conl.Leave += new EventHandler(txt_Leave); // break; case "OperationRecord.OperationPositionId": //手术体位 TYZD_Click(aEdit1, e); break; case "OperationRecord.SpecialCase": //特殊情况 ((TextBox)conl).BorderStyle = BorderStyle.Fixed3D; ((TextBox)conl).Focus(); ((TextBox)conl).Select(((TextBox)conl).Text.Length, 1); conl.Leave += new EventHandler(txt_Leave); conl.DoubleClick += Conl_DoubleClick; break; case "OperationRecord.BloodType": //血型 TYZD_Click(aEdit1, e, true); break; case "OperationRecord.RHBloodType": //血型 TYZD_Click(aEdit1, e, true); break; case "OperationRecord.Applydiagnose": //手术诊断 opeDisease_Click(aEdit1, e); break; case "OperationRecord.Applyoperation": //手术诊断 ope_Click(aEdit1, e); break; case "OperationRecord.Operation": //手术诊断 ope_Click(aEdit1, e); break; //default: // //在此处写日志 // aEdit1.IsVisible = !aEdit1.IsVisible; // MessageBox.Show("没找到-" + aEdit1.ClassDataSourceName + "-属性的事件"); // break; } } } catch (Exception exp) { MessageBox.Show(exp.Message); } finally { } } private void Conl_DoubleClick(object sender, EventArgs e) { //frmSelectDictionary fsd = new frmSelectDictionary(); //fsd._control = sender as TextBox; //fsd._dictionaryName = "特殊情况"; //fsd.isRadio = false; //fsd.isShowText = true; //fsd.ShowDialog(); } #region 可编辑区域响应事件 //通用字典分组窗体打开 private void TYZD_Click(AbleEditPackObj sender, EventArgs e, bool isRadio = false) { try { AbleEditPackObj ableEdit = sender; if (ableEdit == null) return; if (myOpeRecord == null) return; if (ableEdit.ControlType == EControlType.Directorys) { SetDirectorysMethod(ableEdit); } else { SelDict(sender, e, ableEdit.ControlTitleText, isRadio); } } catch (Exception ex) { AIMSExtension.PublicMethod.WriteLog(ex); } } private void SelDict(AbleEditPackObj sender, EventArgs e, string _DictType, bool isRadio = false) { AbleEditPackObj ableEdit = sender; if (ableEdit == null) return; ableEdit.CControl.MouseDown -= new MouseEventHandler(CControl_MouseDown); ableEdit.CControl.MouseDown += new MouseEventHandler(CControl_MouseDown); ableEdit.CControl.KeyUp -= new KeyEventHandler(CControl_KeyUp); ableEdit.CControl.KeyUp += new KeyEventHandler(CControl_KeyUp); ableEdit.CControl.KeyPress -= new KeyPressEventHandler(CControl_KeyPress); ableEdit.CControl.KeyPress += new KeyPressEventHandler(CControl_KeyPress); SelectDictValue.ChageText = ""; if (myOpeRecord != null) { Control conl = sender.CControl; if (conl is TextBox) { ((TextBox)conl).BorderStyle = BorderStyle.Fixed3D; ((TextBox)conl).Focus(); if (sender.PackValue != null && sender.PackValue.Trim() != "" && isRadio == false) { if (((TextBox)conl).Text.LastIndexOf(',') != sender.PackText.Length) ((TextBox)conl).Text = ((TextBox)conl).Text + ","; } ((TextBox)conl).Select(((TextBox)conl).Text.Length, 1); } ableEdit.CControl.TextChanged -= new EventHandler(CControl_TextChanged); ableEdit.CControl.TextChanged += new EventHandler(CControl_TextChanged); aSyncSelectDict.Show(template, OpeRecord, sender, _DictType, isRadio); } } private void CControl_TextChanged(object sender, EventArgs e) { if (myOpeRecord != null) { Control conl = sender as Control; aSyncSelectDict.ShowSel(conl, OpeRecord); } } private void CControl_KeyUp(object sender, KeyEventArgs e) { if (myOpeRecord != null) { Control conl = sender as Control; if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) { if (conl.Text != SelectDictValue.Value && SelectDictValue.ChageText == "") { aSyncSelectDict.DelSel(conl, OpeRecord); SelectDictValue.ChageText = ""; } } else if (e.KeyCode == Keys.Down) { if (SelectDictValue.dgvZd.CurrentRow.Index + 1 != SelectDictValue.dgvZd.Rows.Count - 1) { SelectDictValue.dgvZd.CurrentCell = SelectDictValue.dgvZd.Rows[SelectDictValue.dgvZd.CurrentRow.Index + 1].Cells[1]; } } else if (e.KeyCode == Keys.Up) { if (SelectDictValue.dgvZd.CurrentRow.Index != 0) { SelectDictValue.dgvZd.CurrentCell = SelectDictValue.dgvZd.Rows[SelectDictValue.dgvZd.CurrentRow.Index - 1].Cells[1]; } } } } private void CControl_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar.ToString() == "\r") { if (SelectDictValue.dgvZd.SelectedRows.Count > 0) { SelectDictValue.SetContent(SelectDictValue.dgvZd.SelectedRows[0].Index); } } } private void CControl_MouseDown(object sender, MouseEventArgs e) { if (myOpeRecord != null) { TextBox conl = sender as TextBox; string leftStr = conl.Text.Substring(0, conl.SelectionStart); string rightStr = conl.Text.Substring(conl.SelectionStart, conl.Text.Length - conl.SelectionStart); int startIndex = 0; int endLength = conl.Text.Length; if (leftStr.Contains(",")) { int beginindex = leftStr.LastIndexOf(','); startIndex = beginindex + 1; if (rightStr.Contains(",")) { endLength = rightStr.IndexOf(",") + (leftStr.Length - beginindex); } } else { if (rightStr.Contains(",")) { endLength = rightStr.IndexOf(",") + leftStr.Length + 1; } } conl.Select(startIndex, endLength); } } private void ope_Click(AbleEditPackObj sender, EventArgs e) { try { AbleEditPackObj ableEdit = sender; if (ableEdit == null) return; if (myOpeRecord == null) return; if (ableEdit.ControlType == EControlType.Directory) { SelDict(sender, e, ableEdit.ControlTitleText); } else if (ableEdit.ControlType == EControlType.Directorys) { SetDirectorysMethod(ableEdit); } } catch (Exception ex) { AIMSExtension.PublicMethod.WriteLog(ex); } } private void SetDirectorysMethod(AbleEditPackObj ableEdit) { DevComponents.DotNetBar.Controls.TokenEditor tokenEditor = ableEdit.CControl as DevComponents.DotNetBar.Controls.TokenEditor; tokenEditor.EditTextBox.DoubleClick -= EditTextBox_DoubleClick; tokenEditor.EditTextBox.DoubleClick += EditTextBox_DoubleClick; tokenEditor.EditTextBox.TextChanged -= EditTextBox_TextChanged; tokenEditor.EditTextBox.TextChanged += EditTextBox_TextChanged; tokenEditor.Leave -= TokenEditor_Leave; tokenEditor.Leave += TokenEditor_Leave; if ((PublicMethod.RoleName.Contains("增加诊断") && ableEdit.ControlTitleText == "诊断") || (AIMSExtension.PublicMethod.RoleName.Contains("增加手术") && ableEdit.ControlTitleText == "手术")) { tokenEditor.ValidateToken -= new DevComponents.DotNetBar.Controls.ValidateTokenEventHandler(this.tokenEditor_ValidateToken); tokenEditor.ValidateToken += new DevComponents.DotNetBar.Controls.ValidateTokenEventHandler(this.tokenEditor_ValidateToken); } EditTextBox_DoubleClick(tokenEditor.EditTextBox, null); tokenEditor.EditTextBox.Select(); } private void opeDisease_Click(AbleEditPackObj sender, EventArgs e) { try { AbleEditPackObj ableEdit = sender; if (ableEdit == null) return; if (myOpeRecord == null) return; if (ableEdit.ControlType == EControlType.Directory) { SelDict(sender, e, ableEdit.ControlTitleText); } else if (ableEdit.ControlType == EControlType.Directorys) { SetDirectorysMethod(ableEdit); } } catch (Exception ex) { AIMSExtension.PublicMethod.WriteLog(ex); } } private void Anaes_Click(AbleEditPackObj sender, EventArgs e) { AbleEditPackObj ableEdit = sender; if (ableEdit == null) return; try { if (myOpeRecord != null) { SelDict(sender, e, ableEdit.ControlTitleText); } } catch (Exception ex) { AIMSExtension.PublicMethod.WriteLog(ex); } } private void txt_Leave(object sender, EventArgs e) { Control control = (Control)sender; if (control == null) return; AbleEditPackObj ableEdit = control.Tag as AbleEditPackObj; if (ableEdit == null) return; try { string DataSourceName = ableEdit.ClassDataSourceName; //Console.WriteLine(DataSourceName); //拿到数据源(格式:OperationRecord.PatientRef.Bed) if (ableEdit.ControlType == EControlType.RadioButtonList) { ableEdit.IsVisible = true; //SetAbleEditView(ableEdit,true); if (sender is CheckBox) if ((sender as CheckBox).Checked == true) { foreach (CheckBox chk in (sender as CheckBox).Parent.Controls) { chk.CheckedChanged -= new EventHandler(txt_Leave); if (chk != sender) { chk.Checked = false; } chk.CheckedChanged += new EventHandler(txt_Leave); } } } bool updateOk = true; string text = ""; string value = ""; if (!updateOk) { if (ableEdit.ControlType == EControlType.RadioButtonList) ableEdit.IsVisible = true; else ableEdit.IsVisible = !ableEdit.IsVisible; } else { if (ableEdit.ControlType == EControlType.RadioButtonList) { //设置属性的值 ableEdit.IsVisible = true; foreach (Control conl in ableEdit.CControl.Controls) { string spanT = ""; if (ableEdit.DfArrangement == EIsBool.True) { if (spanT.Length - conl.Text.Length >= conl.Text.Length) { spanT = spanT.Remove(spanT.Length - conl.Text.Length, conl.Text.Length); } } CheckBox radio = conl as CheckBox; if (radio.Checked) { text += "☑" + conl.Text + spanT; value = conl.Text; } else { text += "□" + conl.Text + spanT; } } template.SetObjValue(OpeRecord, ableEdit.ClassDataSourceName, text, value, true); } else { text = control.Text.Trim(); value = control.Text.Trim(); //设置属性的值 ableEdit.IsVisible = !ableEdit.IsVisible; template.SetObjValue(OpeRecord, DataSourceName, text, value, true); ((TextBox)control).BorderStyle = BorderStyle.None; if (DataSourceName == "OperationRecord.Height" || DataSourceName == "OperationRecord.Weight") { SetBMI(true); } } ////设置属性的值 //ableEdit.IsVisible = !ableEdit.IsVisible; //template.SetObjValue(OpeRecord, DataSourceName, text, value, true); //((TextBox)control).BorderStyle = BorderStyle.None; //if (DataSourceName == "OperationRecord.Height" || DataSourceName == "OperationRecord.Weight") //{ // SetBMI(true); //} } } catch (Exception ex) { //写日志 PublicMethod.WriteLog(ex); } finally { } } #endregion //得到当前页数 private void GetcurrentPage() { DateTime EndTime = OperationRecord.getOpeMaxTime(myOpeRecord); EndTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd HH:mm")); TimeSpan tsp = (TimeSpan)(EndTime - myOpeRecord.sharpBegin); double db = tsp.TotalHours / 4; if (db == ((int)tsp.TotalHours / 4)) myOpeRecord.currentPage = (int)db; else myOpeRecord.currentPage = (int)db + 1; if (myOpeRecord.currentPage == 0) myOpeRecord.currentPage = 1; } //设置打印模式,组件不显示 public override void setPrint(bool isVisible) { //预览状态时所可编辑组件的组件隐藏 List ables = PackManage.ListPob.Where(s => s is AbleEditPackObj).ToList(); foreach (PackObjBase pack1 in ables) { AbleEditPackObj ableEdit = pack1 as AbleEditPackObj; if (ableEdit.ControlType == EControlType.RadioButtonList) if (ableEdit != null) { ableEdit.IsVisible = isVisible; if (isVisible == true) { ableEdit.IsViewBoard = EIsBool.True; } else { ableEdit.IsViewBoard = EIsBool.False; ableEdit.Draw(); } } } } private void EditTextBox_DoubleClick(object sender, EventArgs e) { TextBox txt = sender as TextBox; TokenEditorManage.SelectDictList(OpeRecord as OperationRecord, txt); } private void EditTextBox_TextChanged(object sender, EventArgs e) { TextBox txt = sender as TextBox; TokenEditorManage.SelectDictList(OpeRecord as OperationRecord, txt); } private void tokenEditor_ValidateToken(object sender, DevComponents.DotNetBar.Controls.ValidateTokenEventArgs ea) { DevComponents.DotNetBar.Controls.TokenEditor tokenEditor = sender as DevComponents.DotNetBar.Controls.TokenEditor; AbleEditPackObj aEdit = tokenEditor.Tag as AbleEditPackObj; if (ea.IsNewToken) { tokenEditor.EditTextBox.TextChanged -= EditTextBox_TextChanged; string id = TokenEditorManage.GetOperationItemId(ea.Token.Value, aEdit); tokenEditor.SelectedTokens.Add(new EditToken(id, ea.Token.Value)); ea.Token = null; tokenEditor.EditTextBox.Text = ""; tokenEditor.IsPopupOpen = false; tokenEditor.EditTextBox.TextChanged += EditTextBox_TextChanged; } } private void TokenEditor_Leave(object sender, EventArgs e) { DevComponents.DotNetBar.Controls.TokenEditor tokenEditor = sender as DevComponents.DotNetBar.Controls.TokenEditor; AbleEditPackObj aEdit = tokenEditor.Tag as AbleEditPackObj; TokenEditorManage.SaveDictItem(template, OpeRecord as OperationRecord, tokenEditor, aEdit, true); } } }