/// <summary> /// 调用运行窗体 /// <param name="menu">菜单对象</param> /// </summary> public void Execute(DataFunction df) { bool exists = false; //判断是否存在已经打开的窗口(0:弹窗 1:新开 不需要判断) if (df.OpenFlag > 1) { // 检查是否已打开窗口 foreach (Form child in this.MdiChildren) { if (child.ProductName == df.ModuleName && child.GetType().Name == df.ObjectName) { FrmBase tempChild = child as FrmBase; if (tempChild != null) { // 3: 不判断参数 或 2:判断参数但参数值相同时激活窗口 if (df.OpenFlag == 3 || tempChild.ControlParameter == df.Parameter) { child.Focus(); exists = true; break; } } } } } if (!exists) { Execute(df.Title, df.ModuleName, df.ObjectName, df.Parameter, df.OpenFlag == 0); } return; }
/// <summary> /// 点击菜单事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dynamic_bbi_ItemClick(object sender, ItemClickEventArgs e) { DataFunction df = e.Item.Tag as DataFunction; if (df != null) { this.Execute(df); } }
/// <summary> /// 信息回调函数,实现接收信息后的相关处理。 /// </summary> /// <param name="infoBody">信息内容</param> private void CallbackInfo(string infoCode, string infoBody) { switch (infoCode) { case LocalInfoHelper.OpenForm: // 打开窗口 DataFunction df = infoBody.DeserializeObject <DataFunction>(); Execute(df); break; case LocalInfoHelper.AddNotice: // 增加通知窗口 if (!this.dictNotice.ContainsKey(infoBody)) { int idx = infoBody.IndexOf(";"); string module = infoBody.Substring(0, idx); int idx1 = infoBody.IndexOf(";", idx + 1); string form = infoBody.Substring(idx + 1, idx1 - idx - 1); string parameter = infoBody.Substring(idx1 + 1); // 产生通知窗口 FrmNoticeBase frmAddNotice = this.CreateNotice(module, form, parameter); this.dictNotice.Add(infoBody, frmAddNotice); // 产生通知栏 this.CreateNoticeIco(frmAddNotice); } break; case LocalInfoHelper.DelNotice: // 撤销通知窗口 if (this.dictNotice.ContainsKey(infoBody)) { FrmNoticeBase frmDelNotice = this.dictNotice[infoBody]; frmDelNotice.Stop(); BarButtonItem bbi = (BarButtonItem)frmDelNotice.Tag; if (bbi != null) { this.ribbon.Items.Remove((BarButtonItem)frmDelNotice.Tag); // 已验证:this.ribbonStatusBar.ItemLinks下也同时移除 bbi = null; } frmDelNotice = null; this.dictNotice.Remove(infoBody); } break; } }