Esempio n. 1
0
        /// <summary>
        ///  动态产生通知窗口
        /// </summary>
        /// <param name="module">模块名称</param>
        /// <param name="function">窗口名称</param>
        /// <param name="parameter">参数</param>
        /// <returns></returns>
        private FrmNoticeBase CreateNotice(string module, string function, string parameter)
        {
            FrmNoticeBase newform = null;

            try
            {
                Assembly theDll = Assembly.Load(module);
                LogHelper.Info(this, "开始创建通知窗口" + module + "." + function);
                newform = theDll.CreateInstance(module + "." + function) as FrmNoticeBase;
                if (newform == null)
                {
                    string error = "调用运行库不成功!\r\n无法创建" + module + "模块的" + function + "通知窗体!";
                    LogHelper.Error(this, error);
                }
                else
                {
                    LogHelper.Info(this, "通知窗体" + module + "." + function + "|" + parameter + "创建完成");
                    newform.Init(parameter);
                    LogHelper.Info(this, "通知窗体" + module + "." + function + "|" + parameter + "初始化完成");
                }
            }
            catch (Exception ex)
            {
                string msg = "调用模块:" + module + "\r\n对象:" + function + "\r\n参数:" + parameter ?? string.Empty +
                             "\r\n错误消息:" + ex.Message + "\r\n异常跟踪:" + ex.StackTrace;
                if (ex.InnerException != null)
                {
                    msg += "\r\n异常消息:" + ex.InnerException.Message + "\r\n异常错误:" + ex.InnerException.StackTrace;
                }
                LogHelper.Error(this, msg);
            }
            return(newform);
        }
Esempio n. 2
0
        /// <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;
            }
        }
Esempio n. 3
0
        /// <summary>
        ///  产生状态栏的通知项
        /// </summary>
        /// <param name="frm">通知窗口</param>
        private void CreateNoticeIco(FrmNoticeBase frm)
        {
            BarButtonItem bbi = new BarButtonItem();

            //  TODO:
            bbi.Alignment = DevExpress.XtraBars.BarItemLinkAlignment.Right;
            bbi.Caption   = frm.NoticeCount.ToString();
            bbi.Glyph     = frm.IcoImage;
            bbi.Hint      = frm.IcoHint;

            bbi.Id = this.ribbon.Items.Count;
            bbi.ItemAppearance.Normal.Font                 = new Font("Tahoma", 12F, FontStyle.Bold, GraphicsUnit.Point, ((byte)(0)));
            bbi.ItemAppearance.Normal.ForeColor            = frm.IcoColor;
            bbi.ItemAppearance.Normal.Options.UseFont      = true;
            bbi.ItemAppearance.Normal.Options.UseForeColor = true;
            bbi.Name       = "barItemNotice" + bbi.Id.ToString();
            bbi.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;

            this.ribbon.Items.Add(bbi);
            this.ribbonStatusBar.ItemLinks.Add(bbi);
            frm.Tag = bbi;
            bbi.Tag = frm;

            //  通知数量改变时调整图标数量
            frm.OnNoticeCountChanged += (Sender, e) =>
            {
                bbi.Caption = frm.NoticeCount.ToString();
                //  有通知时自动打开的通知窗口处理
                if (frm.AutoOpen && !frm.Visible)
                {
                    frm.ShowDialog();
                }
            };

            //  通知图标双击时弹出窗口
            bbi.ItemDoubleClick += (sender, e) =>
            {
                FrmNoticeBase frm_notice = (FrmNoticeBase)e.Item.Tag;
                frm_notice.ShowDialog();
            };
        }