小弟一直都是做 B/S开发
这几天心血来潮 想写一写 C/S程序
一入门就遇到这个问题 我在 登陆窗体体 NEW了 一个新窗体吧新窗体Show了 之后 原来得窗体cLOSE。新NEW得窗体也关闭了 不知道为什么 请指点另求 C/S程序得 设计方法。
比如如何处理 公共得变量 等应该注意得事情 希望大家不吝赐教
这几天心血来潮 想写一写 C/S程序
一入门就遇到这个问题 我在 登陆窗体体 NEW了 一个新窗体吧新窗体Show了 之后 原来得窗体cLOSE。新NEW得窗体也关闭了 不知道为什么 请指点另求 C/S程序得 设计方法。
比如如何处理 公共得变量 等应该注意得事情 希望大家不吝赐教
如果是登陆窗体,在主窗体的Main入口处
FormLogin frm = new FormLogin();
frm.ShowDialog();
if 登陆失败
关闭窗体
return
2、和B/S基本类似,只不过对于状态信息比较容易控制。
建议把loginform作为子窗体,通过主窗体了掉子窗体进行判断
如果你不想hide
那你就在main里面先new这个登陆窗体
如果登陆成功在run主窗体
否则关闭
其他的我就不会了
public ModMain()
{
} [STAThreadAttribute]
static void Main()
{
//异常处理
Application.ThreadException += new ThreadExceptionEventHandler(MainUIThreadExceptionHandler); Common.Database.ConnectionString = Get_Info();
frmLogon frm = new frmLogon();
frm.txtUser.Text = loginUser;
if (frm.ShowDialog()==System.Windows.Forms.DialogResult.Cancel)
{
return;
}
System.Windows.Forms.Application.Run(new myMenu());
}
#endregion
|
|
消息循环(入口Form)
|
|
结束
|
| False
消息循环(登陆Form)---------
| |
| True |
| |
消息循环(主Form) |
| |
|--------------------------
退出
/////////////////////////////////////////////////////////////////
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Text;namespace WinFromDemo
{
public class StartApp
{
private static bool LoginResult = false; [STAThread]
static void Main()
{
//First Message Loop
LoginContext loginContext = new StartApp.LoginContext();
Application.Run(loginContext); if (LoginResult)
{
//Second Message Loop
StartApp.MainContext mainContext = new StartApp.MainContext();
Application.Run(mainContext);
}
} public class LoginContext : ApplicationContext
{
private LoginDialog loginDialog; public LoginContext()
{
loginDialog = new LoginDialog();
loginDialog.StartPosition = FormStartPosition.CenterScreen;
loginDialog.Closed += new EventHandler(OnFormClosed);
loginDialog.Show();
} private void OnFormClosed(object sender, EventArgs e)
{
LoginResult = !(this.loginDialog.DialogResult == DialogResult.Cancel); ExitThread();
}
} public class MainContext : ApplicationContext
{
private Form mainForm; public MainContext()
{
mainForm = new Form();
mainForm.StartPosition = FormStartPosition.CenterScreen;
mainForm.Closed += new EventHandler(OnFormClosed);
mainForm.Show();
} private void OnFormClosed(object sender, EventArgs e)
{
ExitThread();
}
}
}
}
开启---登陆画面/显示主窗体默认界面---用showdialog显示登陆---判断返回值初始权限
这样比较好
把应用程序加载放到启动画面去
这种更适合比较大的系统,不同的模块不同的用户权限
{xxxForm frm = new xxxForm();
frm.ShowDialog();}
public ModMain()
{
}[STAThreadAttribute]
static void Main()
{
//异常处理
Application.ThreadException += new ThreadExceptionEventHandler(MainUIThreadExceptionHandler); Common.Database.ConnectionString = Get_Info();
frmLogon frm = new frmLogon();
frm.txtUser.Text = loginUser;
if (frm.ShowDialog()==System.Windows.Forms.DialogResult.Cancel)
{
return;
}
System.Windows.Forms.Application.Run(new myMenu());
}
#endregion
main()
{
loginform lf = new loginform();
if(lf.Showdialog() == DialogResult.OK)
{
mainform mf = new mainform();
mf.show();
}
}
这样根据不存在谁打开谁
正解
{
this.ActiveMdiChild.Close(); //关闭已经打开的子窗体
} InSchool child_InSchool=new InSchool();
child_InSchool.MdiParent=this;//this表示本窗体为其父窗体
child_InSchool.Show();
你在原来的窗体设置一个public bool bNew=false;的变量,在你要new新窗体的地方改成如下代码:
bNew=true;
this.Close();
//原来窗体消失了,但它的类作用域并没有消失
然后在你原来定义、使用原窗体变量的地方,即frmOld.ShowDialog();之后:
if(frmOld.bNew)
{
NewForm frmNew=new NewForm ();
frmNew.ShowDialog();
}
问题就搞定了