using DevExpress.XtraBars;
using DevExpress.XtraBars.FluentDesignSystem;
using DevExpress.XtraBars.Navigation;
using DevExpress.XtraTab;
using DevExpress.XtraTab.ViewInfo;
using Gs.DevApp.DevFrm.User;
using Gs.DevApp.Entity;
using Gs.DevApp.ToolBox;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
namespace Gs.DevApp.DevFrm
{
public partial class FrmMain : FluentDesignForm
{
///
/// tab临时选项卡
///
private static readonly Dictionary TabPageDic = new Dictionary();
public FrmMain()
{
InitializeComponent();
Text = ConfigurationSettings.AppSettings.Get("ProductName");
tab.CloseButtonClick += Tab_CloseButtonClick;
tooLoading.Click += TooLoading_Click;
barPwd.ItemClick += BarPwd_ItemClick;
barExit.ItemClick += BarExit_ItemClick;
FormClosing += FrmMain_FormClosing;
getTree();
tab.MouseDown += Tab_MouseDown;
tabCloseCurrent.Click += (s, e) =>
{
string name = tab.SelectedTabPage.Tooltip;
RemoveTabPage(tab, name);
};
tabCloseAll.Click += (s, e) =>
{
string _name = tab.SelectedTabPage.Tooltip;
int _tabCount = tab.TabPages.Count;
for (int i = _tabCount; i >= 0; i--)
{
try
{
string name = tab.TabPages[i].Tooltip;
if (name != _name)
{
RemoveTabPage(tab, name);
}
}
catch (Exception)
{
}
}
};
}
///
/// 显示右键菜单
///
///
///
private void Tab_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
cms1.Show(tab, e.Location);
}
}
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (MsgHelper.AskQuestion("确定要退出系统吗?"))
{
var i = _userOut();
if (i > 0)
{
FormClosing -= FrmMain_FormClosing;
Application.Exit();
}
else
{
e.Cancel = true; //取消。返回窗体
}
}
else
{
e.Cancel = true; //取消。返回窗体
}
}
///
/// 退出
///
///
///
private void BarExit_ItemClick(object sender, ItemClickEventArgs e)
{
if (MsgHelper.AskQuestion("确定要退出系统吗?"))
{
var i = _userOut();
if (i > 0)
{
FormClosing -= FrmMain_FormClosing;
Application.Exit();
}
}
}
///
/// 设置用户密码
///
///
///
private void BarPwd_ItemClick(object sender, ItemClickEventArgs e)
{
var frm = new UserSetPwd(LoginInfoModel.CurrentUser.LoginUserGuid);
frm.ShowDialog();
}
///
/// 重新加载系统
///
///
///
private void TooLoading_Click(object sender, EventArgs e)
{
getTree();
}
///
/// 读取左则模块菜单
///
private void getTree()
{
toolTime.Text = "登录时间" + LoginInfoModel.CurrentUser.LoginTime;
var _obj = new
{
userGuid = LoginInfoModel.CurrentUser.LoginUserGuid,
};
try
{
var strJson = UtilityHelper.HttpPost("",
"User/GetUserLoginInfo", JsonConvert.SerializeObject(_obj));
Size _size; string _caption; Color _color; Padding _pad;
(_size, _caption, _color, _pad) = Gs.DevApp.ToolBox.UtilityHelper.getLoading();
DevExpress.Utils.WaitDialogForm wdf = new DevExpress.Utils.WaitDialogForm("加载进度:", _caption, _size);
wdf.BackColor = _color;
wdf.Padding = _pad;
var _job = JObject.Parse(strJson);
var rtnCode = _job["rtnCode"].ToString();
if (int.Parse(rtnCode) > 0)
{
acrd.Clear();
barMsg.Caption = _job["rtnData"]["loginMsg"].ToString();
var array = new JArray();
var d = _job["rtnData"]["list"];
foreach (var a in d) array.Add(a);
var resources =
new ComponentResourceManager(typeof(FrmMain));
var dt =
JsonConvert.DeserializeObject(
array.ToString());
var drGrp = dt.Select("upGuid is null");
int gdx = 0, idx = 0;
foreach (var _dy in drGrp)
{
wdf.SetCaption("加载进度:" + _dy["name"].ToString());
var _grp = acrd.AddGroup();
_grp.ImageOptions.Image =
UtilityHelper.GetImgFromResource(
_dy["icon"].ToString(), 1);
_grp.Name = _dy["guid"].ToString();
_grp.Style = ElementStyle.Group;
_grp.Text = _dy["name"].ToString();
_grp.Tag = _dy["formPath"].ToString(); //存路径,类名
_grp.Click += _grp_Click;
if (gdx == 0)
_grp.Expanded = true;
var drItem = dt.Select("upGuid='" + _dy["guid"] + "'");
foreach (var _dy2 in drItem)
{
var _itm = acrd.AddItem();
_itm.Appearance.Hovered.Options.UseFont = true;
_itm.Appearance.Normal.Options.UseFont = true;
_itm.ImageOptions.Image =
UtilityHelper.GetImgFromResource(
_dy2["icon"].ToString(), 2);
_itm.Name = _dy2["guid"].ToString();
_itm.Style = ElementStyle.Item;
_itm.Text = _dy2["name"].ToString();
wdf.SetCaption("加载进度:" + _dy2["name"].ToString());
_itm.Tag = _dy2["formPath"].ToString(); //存路径,类名
_itm.Click += _grp_Click;
_grp.Elements.Add(_itm);
if (idx == 0 && tab.TabPages.Count <= 0)
{
var tabPageName = _itm.Name + "_page";
var tabText = _itm.Text; //当前选项卡页Text标题
var newFormName = _itm.Tag.ToString(); //存路径,类名
var imgIcon = _itm.Image;
AddTabpage(tab, tabPageName, tabText,
newFormName, imgIcon);
}
idx++;
}
;
gdx++;
}
}
else
{
MsgHelper.ShowError("提示:初始化失败,请联系管理员!");
}
wdf.SetCaption("加载进度(90/100)");
wdf.Close();
}
catch (Exception ex)
{
MsgHelper.ShowError("提示:" + ex.Message);
}
}
///
/// 左侧菜单点击
///
///
///
private void _grp_Click(object sender, EventArgs e)
{
var _acd = (AccordionControlElement)sender;
if (_acd.Elements.Count > 0) return;
var tabPageName = _acd.Name + "_page";
var tabText = _acd.Text;
var newFormName = _acd.Tag.ToString();
var imgIcon = _acd.Image;
AddTabpage(tab, tabPageName, tabText, newFormName, imgIcon);
}
///
/// 关闭选项卡
///
///
///
private void Tab_CloseButtonClick(object sender, EventArgs e)
{
var args = (ClosePageButtonEventArgs)e;
var name = args.Page.Tooltip;
RemoveTabPage(tab, name);
}
///
/// 新增选项卡页
///
/// 选项卡控件
/// 当期选项卡页name名称
/// 当前选项卡页Text标题
///
/// 当前选项卡中的新窗体路径,类名
/// 初始值,用于子窗体中调用父窗体的值
public void AddTabpage(XtraTabControl tabControl, string tabPageName,
string tabText, string newFormName, Image imgIcon, string InitializeVal = "")
{
if (IsTabpageExsit(tabControl, tabPageName)) return;
var newPage = new XtraTabPage();
newPage.Name = tabPageName;
newPage.Text = tabText;
newPage.Tooltip = newPage.Name;
newPage.Appearance.Header.Font = tab.Appearance.Font;
newPage.ImageOptions.Image = imgIcon;
var fm = AddNewForm(newFormName, InitializeVal);
if (fm != null)
{
newPage.Controls.Add(fm);
tabControl.TabPages.Add(newPage);
TabPageDic.Add(tabPageName, newPage);
tabControl.SelectedTabPage = newPage;
}
}
///
/// 移除选项卡页
///
///
///
///
public void RemoveTabPage(XtraTabControl tabControl, string name)
{
if (TabPageDic.Count <= 1)
{
MsgHelper.Warning("请至少保留一个功能!");
return;
}
foreach (XtraTabPage item in tabControl.TabPages)
{
if (item.Name == name)
{
//后来加上,为了释放窗体资源beg
//foreach (Control control in item.Controls)
//{
// if (control is Form)
// {
// Form myForm = control as Form;
// myForm.Invoke((MethodInvoker)delegate { myForm.Dispose(); }); // 确保 UI 线程安全地释放资源
// }
//}
//后来加上,为了释放窗体资源end
tabControl.TabPages.Remove(item);
item.Dispose();
TabPageDic.Remove(name);
return;
}
}
}
///
/// 判断选项卡是否已经存在
///
/// 选项卡控件
/// 选项卡名称
///
private bool IsTabpageExsit(XtraTabControl tabControl,
string tabPageName)
{
foreach (var item in TabPageDic)
if (item.Key == tabPageName)
{
tabControl.SelectedTabPage = item.Value;
return true;
}
return false;
}
///
/// 在选项卡中生成窗体
///
/// 窗体名称
private Form AddNewForm(string formName, string InitializeVal)
{
try
{
var newForm = (Form)Assembly.GetExecutingAssembly()
.CreateInstance(formName);
if (newForm == null)
{
MsgHelper.ShowError("请检查是否开通了该模块!");
return null;
}
newForm.FormBorderStyle = FormBorderStyle.None;
newForm.TopLevel = false;
newForm.ControlBox = false;
newForm.Dock = DockStyle.Fill;
newForm.Visible = true;
shiXian(newForm, formName, InitializeVal);
return newForm;
}
catch (Exception)
{
MsgHelper.ShowError("请检查是否开通了该模块!");
}
return null;
}
///
/// 用户退出
///
///
private int _userOut()
{
var _obj = new
{
userGuid = LoginInfoModel.CurrentUser.LoginUserGuid
};
try
{
var strJson = UtilityHelper.HttpPost("", "User/UserOut",
JsonConvert.SerializeObject(_obj));
var _rtn = UtilityHelper.ReturnToDynamic(strJson);
if (_rtn.rtnCode > 0)
return _rtn.rtnCode;
MsgHelper.Warning("提示:" + _rtn.rtnData.outMsg);
return _rtn.rtnCode;
}
catch (Exception ex)
{
DialogResult = DialogResult.Cancel;
MsgHelper.Warning("提示:" + ex.Message);
return 1;
}
}
#region 实现子窗体的委托,主要用于子页面中访问父页面方法
private void UpdateParent_OnChange(object sender, UpdateParentEventArgs e)
{
List _val = e.StringList;
string _formName = _val[0];//类名
string _parm1 = _val[1];
var _obj = new
{
guid = _formName //主建
};
try
{
var strJson = UtilityHelper.HttpPost("", "MenuAction/GetModelByNameSpace",
JsonConvert.SerializeObject(_obj));
var _rtn = UtilityHelper.ReturnToDynamic(strJson);
if (_rtn.rtnCode > 0)
{
var dy = _rtn.rtnData;
string tabPageName = dy.guid.ToString() + "_page";
string tabText = dy.name.ToString(); //当前选项卡页Text标题
string newFormName = dy.formPath.ToString(); //存路径,类名
Image imgIcon = UtilityHelper.GetImgFromResource(dy.icon.ToString(), 2);
//先关闭
RemoveTabPage(tab, tabPageName);
AddTabpage(tab, tabPageName, tabText, newFormName, imgIcon, _parm1);
}
}
catch (Exception ex)
{
MsgHelper.ShowError("提示:" + ex.Message);
}
}
private void shiXian(Form newForm, string formName, string InitializeVal)
{
EventInfo evt = newForm.GetType().GetEvent("ToUpdateParent",
BindingFlags.NonPublic | BindingFlags.Instance
| BindingFlags.Public
);
if (evt != null)
evt.AddEventHandler(newForm, new EventHandler(UpdateParent_OnChange));
if (!string.IsNullOrEmpty(InitializeVal))
{
Assembly assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType(formName);
MethodInfo method = type.GetMethod("Initialize"); // 获取Initialize方法的信息
if (method != null)
method.Invoke(newForm, new object[] { InitializeVal }); // 调用Initialize方法并传递参数
}
}
#endregion
}
}