📄 formmain.cs
字号:
//修改口令
private void menuItem_ChangePwd_Click(object sender, System.EventArgs e)
{
string ret=Class_Comm.ChangePwd();
if (ret!=null) //如果修改成功口令,则更新本地口令
Class_Comm.PassWD=ret;
}
/// <summary>
/// 显示授权菜单
/// </summary>
/// <param name="menu">菜单对象</param>
/// 对于管理员显示所有菜单
private void ShowAllRightMenu(Menu menu)
{
//根据菜单别名查询菜单的模块号,如果没找到就不显示权限菜单
this.TopModuleNo=Class_Comm.GetServiceSys().GetModuleNOByAlias(TopModuleAlias);
if (this.TopModuleNo=="")
return;
DataSet ds=null;
ds=Class_Comm.GetServiceSys().GetPrgModuleDataSet(this.TopModuleNo);
//将取得的授权菜单集合赋给本地变量
this.menuDS=ds;
AddToMenu(ds,this.TopModuleNo,menu.MenuItems);
}
//显示授权的菜单
private void ShowSubRightMenu(Menu menu)
{
//根据菜单别名查询菜单的模块号,如果没找到就不显示权限菜单
this.TopModuleNo=Class_Comm.GetServiceSys().GetModuleNOByAlias(TopModuleAlias);
if (this.TopModuleNo=="")
return;
DataSet ds=null;
ds=Class_Comm.GetServiceSys().GetPrgModuleByEmpSeq(Class_Comm.EmployeeSeq,this.TopModuleNo);
//将取得的授权菜单集合赋给本地变量
this.menuDS=ds;
AddToMenu(ds,this.TopModuleNo,menu.MenuItems);
}
private void AddToMenu(DataSet ds,string parentid,Menu.MenuItemCollection mnuitems)
{
DataView dv=new DataView();
dv.Table=ds.Tables["t_menu"];
dv.RowFilter="fd_parentno='"+parentid+"'";
string tmpNo = "";
foreach(DataRowView drv in dv)
{
MenuItem item=new MenuItem();
item.Text = drv["fd_name"].ToString();
tmpNo = drv["fd_moduleNo"].ToString();
string url;
url=drv["fd_url"].ToString();
if ( !(url=="" || url==null )) //有窗口
{
item.Click += new System.EventHandler(this.MenuItem_Operation);
}
DataRow[] dr=ds.Tables["t_menu"].Select("substring(fd_moduleno,1,"+tmpNo.Length+")='"+tmpNo+"' and fd_isLeave = '1'");
if (dr.Length!=0)
{
mnuitems.Add(item);
AddToMenu(ds,drv["fd_moduleno"].ToString(),item.MenuItems);
}
}
}
/// <summary>
/// 生成菜单的点击操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MenuItem_Operation(object sender, System.EventArgs e)
{
MenuItem item=(MenuItem)sender;
string title=item.Text.Trim();
DataView dv=new DataView();
dv.Table=this.menuDS.Tables["t_menu"];
dv.RowFilter="fd_name='"+title+"'";
if (dv.Count<=0)
{
Class_Comm.MsgBox("系统尚未对该菜单项设置窗口,请和系统管理员联系!");
return;
}
DataRowView drv=dv[0];
//根据菜单文本从数据库中取得操作窗口
//如果当前窗口在本程序集中,frmurl保存的是窗口类名全称,
//否则保存格式为:程序集名称,窗口类名全称 例如:OtherAssembly.dll,FormSample
string frmurl=drv["fd_url"].ToString();
if (frmurl=="" || frmurl==null)
{
Class_Comm.MsgBox("系统尚未对该菜单项设置窗口,请和系统管理员联系!");
return;
}
//该窗口的模块号
string frmmoduleno=drv["fd_moduleno"].ToString();
//如果该窗口已经打开就把它放到最前面
foreach(Form objfrm in this.MdiChildren)
{
//本程序集内部的窗口
if (objfrm.GetType().FullName.Trim().Equals(appName+"."+frmurl))
{
objfrm.Activate();
return;
}
//其他程序集中的窗口
if (objfrm.GetType().FullName.Trim().Equals(Class_Comm.RightChr(frmurl,',')))
{
objfrm.Activate();
return;
}
}
Object[] args=new object [1];
args[0]=frmmoduleno;
BindingFlags flags = BindingFlags.InvokeMethod|BindingFlags.Instance|
BindingFlags.Public|BindingFlags.Static;
try
{
Form frm=(Form)assembly.CreateInstance(appName+"."+frmurl,true,flags,null,args,null,null);
frm.MdiParent=this;
frm.Show ();
}
catch(Exception errmsg)
{
string msg=errmsg.Message;
LoadOtherAssembly(frmurl,flags,args);
return;
}
}
//调用其他程序集中的窗口
private void LoadOtherAssembly(string frmurl,BindingFlags flags,Object[] args)
{
try
{
string assemblyname,frmname;
assemblyname=Class_Comm.LeftChr(frmurl,',');
frmname=Class_Comm.RightChr(frmurl,',');
if (assemblyname=="" || frmname=="")
{
Class_Comm.ErrMsgBox("程序模块表配置不正确,请和系统管理员联系!");
return;
}
Assembly ass=Assembly.LoadFrom(assemblyname);
Form frm=(Form)ass.CreateInstance(frmname,true,flags,null,args,null,null);
frm.MdiParent=this;
frm.Show ();
}
catch(Exception errmsg)
{
Class_Comm.ErrMsgBox(errmsg.Message );
}
}
/// <summary>
/// 显示通用菜单
/// </summary>
private void ShowCommMenu()
{
MenuItem item=new MenuItem();
item.Text="&H帮助主题";
this.mainMenu.MenuItems.Add(item);
MenuItem itemHelp=new MenuItem();
itemHelp.Text="帮助";
itemHelp.Click+=new EventHandler(this.menuItem_Hlp_Click);
item.MenuItems.Add(itemHelp);
MenuItem itemAbout=new MenuItem();
itemAbout.Text="关于...";
itemAbout.Click+=new EventHandler(this.menuItem_About_Click);
item.MenuItems.Add(itemAbout);
MenuItem itemLine=new MenuItem();
itemLine.Text="-";
item.MenuItems.Add(itemLine);
MenuItem itemChgPwd=new MenuItem();
itemChgPwd.Text="修改口令...";
itemChgPwd.Click+=new EventHandler(this.menuItem_ChangePwd_Click);
item.MenuItems.Add(itemChgPwd);
MenuItem itemSysLog=new MenuItem();
itemSysLog.Text="Windows事件查看器";
itemSysLog.Click+=new EventHandler(this.menuItem_SysLog_Click);
item.MenuItems.Add(itemSysLog);
////////////////////////////////////////////////
MenuItem itemWin=new MenuItem();
itemWin.Text="窗口";
itemWin.MdiList=true;
this.mainMenu.MenuItems.Add(itemWin);
MenuItem itemIcon=new MenuItem();
itemIcon.Text="图标";
itemIcon.Click+=new EventHandler(this.ArrangeWindow);
itemWin.MenuItems.Add(itemIcon);
MenuItem itemCascade=new MenuItem();
itemCascade.Text="级联";
itemCascade.Click+=new EventHandler(this.ArrangeWindow);
itemWin.MenuItems.Add(itemCascade);
MenuItem itemTileH=new MenuItem();
itemTileH.Text="水平";
itemTileH.Click+=new EventHandler(this.ArrangeWindow);
itemWin.MenuItems.Add(itemTileH);
MenuItem itemTileV=new MenuItem();
itemTileV.Text="垂直";
itemTileV.Click+=new EventHandler(this.ArrangeWindow);
itemWin.MenuItems.Add(itemTileV);
MenuItem itemLine1=new MenuItem();
itemLine1.Text="-";
itemWin.MenuItems.Add(itemLine1);
MenuItem itemCloseThis=new MenuItem();
itemCloseThis.Text="关闭";
itemCloseThis.Click+=new EventHandler(this.CloseMDIWin);
itemWin.MenuItems.Add(itemCloseThis);
MenuItem itemCloseAll=new MenuItem();
itemCloseAll.Text="全部关闭";
itemCloseAll.Click+=new EventHandler(this.CloseMDIWin);
itemWin.MenuItems.Add(itemCloseAll);
//////////////////////////////////////////////////////////////
MenuItem itemExit=new MenuItem();
itemExit.Text="&X退出";
this.mainMenu.MenuItems.Add(itemExit);
itemExit.Click+=new EventHandler(this.menuItem_Exit_Click);
}
/// <summary>
/// Windows事件查看器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuItem_SysLog_Click(object sender, System.EventArgs e)
{
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
Info.FileName="eventvwr.msc";
Process p=new Process();
p.StartInfo=Info;
p.Start();
}
/// <summary>
/// 关闭当前或所有子窗口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CloseMDIWin(object sender, System.EventArgs e)
{
MenuItem item=(MenuItem)sender;
string txt=item.Text.Trim();
switch(txt)
{
case "关闭":
Form afrm=this.ActiveMdiChild;
if (afrm!=null)
afrm.Close();
break;
case "全部关闭":
Form[] frm=this.MdiChildren;
for(int i=0;i<frm.Length;++i)
if (frm[i]!=null)
frm[i].Close();
break;
}
}
/// <summary>
/// 排列窗口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ArrangeWindow(object sender, System.EventArgs e)
{
MenuItem item=(MenuItem)sender;
string txt=item.Text.Trim();
switch(txt)
{
case "图标":
Class_Comm.ArrangeWindow(this,"Icon");
break;
case "级联":
Class_Comm.ArrangeWindow(this,"Cascade");
break;
case "水平":
Class_Comm.ArrangeWindow(this,"TileHorizontal");
break;
case "垂直":
Class_Comm.ArrangeWindow(this,"TileVertical");
break;
}
}
/// <summary>
/// 显示主菜单,包括授权菜单和通用菜单
/// </summary>
private void ShowMenu()
{
//如果是管理员则全部显示
if (Class_Comm.IsManager=="1")
this.ShowAllRightMenu(this.mainMenu);
else
this.ShowSubRightMenu(this.mainMenu);
this.ShowCommMenu();
}
//打开窗口的时候
private void FormMain_Load(object sender, System.EventArgs e)
{
this.ShowMenu();
this.Text=User+Title;
this.stbpuserinfo.Text="用户:["+Class_Comm.UserID+"]"+Class_Comm.EmployeeName+" 登录时间:"+Class_Comm.GetNow();
this.stbpIP.Text="IP:"+Class_Comm.GetIP();
SplashWin.Close(); //关闭splash窗体
}
//显示窗口
private void menuItem_ShowWin_Click(object sender, System.EventArgs e)
{
this.Show();
notifyIcon_Main.Visible = false;
this.BringToFront();
}
//隐藏窗口
private void menuItem_HideWin_Click(object sender, System.EventArgs e)
{
this.HideWin();
}
private void HideWin()
{
notifyIcon_Main.Visible = true;
this.Hide();
}
private void toolBar_Main_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
//根据工具条的tooltip文本判断点击哪个button
switch(e.Button.ToolTipText)
{
case "关于":
this.menuItem_About_Click(null,null);
break;
case "帮助":
this.menuItem_Hlp_Click(null,null);
break;
case "退出系统":
this.menuItem_Exit_Click(null,null);
break;
}
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
FormTest fm = new FormTest();
fm.MdiParent = this;
fm.Show();
}
//定时器,保证Session不过期,缺省为15分种一次,所以IIS中会话过期要大于15分钟
private void tmRefresh_Tick(object sender, System.EventArgs e)
{
try
{
Class_Comm.GetServiceSys().RefreshSession();
//GC.Collect();
}
catch(Exception exp)
{
string msg=exp.Message;
this.stbpmsg.Text=Class_Comm.GetNow()+"会话过期,请和系统管理员联系!"+exp.Message;
HandleRefreshError(this.stbpmsg.Text);
}
}
private void HandleRefreshError(string msg)
{
this.tmRefresh.Enabled=false;
//写计算机事件日志
Class_SysLog.WriteSysLog(ModuleTag,ModuleTag,msg);
string errmsg="";
//重新登录
//重新生成cookie
Class_Comm.MyCookie=null;
Class_Comm.MyCookie=new System.Net.CookieContainer();
try
{
DataSet ret=Class_Comm.GetServiceSys().Login(Class_Comm.UserID,Class_Comm.PassWD,ModuleTag );
if (ret==null) //登录不成功
{
Class_SysLog.WriteSysLog(ModuleTag,ModuleTag,Class_Comm.UserID+"因为用户名或密码错误无法重新登录系统,确定是否系统在运行期间修改了密码。");
errmsg=Class_Comm.UserID+"于"+Class_Comm.GetNow()+"因为用户名或密码错误重新登录系统不成功";
}
else
{
Class_SysLog.WriteSysLog(ModuleTag,ModuleTag,Class_Comm.UserID+"重新登录系统成功。");
errmsg=Class_Comm.UserID+"于"+Class_Comm.GetNow()+"重新登录系统成功";
}
}
catch(Exception exp)
{
Class_SysLog.WriteSysLog(ModuleTag,ModuleTag,Class_Comm.UserID+"无法重新登录系统,错误信息:"+exp.Message);
errmsg=Class_Comm.UserID+"于"+Class_Comm.GetNow()+"重新登录系统不成功。错误信息:"+exp.Message;
}
this.stbpmsg.Text=errmsg;
this.tmRefresh.Enabled=true;
}
//显示关闭工具条
private void menuItem_ToolBar_Click(object sender, System.EventArgs e)
{
this.toolBar_Main.Visible=!this.toolBar_Main.Visible;
this.menuItem_ToolBar.Checked=this.toolBar_Main.Visible;
}
//显示关闭状态条
private void menuItem_StatusBar_Click(object sender, System.EventArgs e)
{
this.stbMain.Visible=!this.stbMain.Visible;
this.menuItem_StatusBar.Checked=this.stbMain.Visible;
}
/// <summary>
/// 检测当前进程是否已经启动一次
/// </summary>
/// <returns>null 表示没启动 否则启动了</returns>
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);
//Loop through the running processes in with the same name
foreach (Process process in processes)
{
//Ignore the current process
if (process.Id != current.Id)
{
//Make sure that the process is running from the exe file.
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
{
//Return the other process instance.
return process;
}
}
}
//No other instance was found, return null.
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -