static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
//Application.Run(new FormLogin());
}
//主窗体
public FormMain()
{
//FormLogin login = new FormLogin();//2.
//login.ShowDialog();//2.
InitializeComponent();
}
//登陆窗体
public partial class FormLogin : Form
{
public FormLogin()
{
InitializeComponent();
}
//登陆按钮事件
private void button1_Click(object sender, EventArgs e)
{
if (条件)
{
FormCardID fc = new FormCardID();
fc.Show();
this.Dispose();//1.
}
else
{
MessageBox.Show("非法用户,拒绝登录!");
}
}
}
如果我把程序入口设置:Application.Run(new FormLogin());
//1. 处只能是:this.hide(); 而不能this.dispose();----记得JAVA可以!
但这样有一个问题就是当我X掉FormMain(),主程序其实还在内存中运行!我如何让主程序也随FormMain()一起Close()掉?
如果我把程序入口设置:Application.Run(new FormMain());
//2. 处代码当然要启用!
但这样也有一个问题就是当我X掉FormLogin(),FormMain()自动运行了,主程序可以随FormMain()一起Close()掉?
但是没有实现FormLogin()验证的功能!
请教如何解决??
18 个解决方案
#1
Application.Run(new FormMain());
在FormMain窗体的构造函数中添加
FormLogin frm = new FormLogin();
frm.ShowDialog();
登录窗口按下登录按钮后返回用户名密码给主窗体执行验证
在FormMain窗体的构造函数中添加
FormLogin frm = new FormLogin();
frm.ShowDialog();
登录窗口按下登录按钮后返回用户名密码给主窗体执行验证
#2
进行判断 如果2个窗体都close 了 就 application.exit()
我是小菜鸟! 说的不好清见谅, 希望能够帮到你!
我是小菜鸟! 说的不好清见谅, 希望能够帮到你!
#3
frm.ShowDialog();就行了。主窗体启东也没有关系,模态的窗体会把焦点获取过来的。只有模态窗体关闭的时候主窗体才能用的
#4
我//2.处的代码就是写在FormMain窗体的构造函数中,我也想过你说的这个‘返回用户名密码给主窗体执行验证’,
但验证条件不好写~~比喻说验证不通过,该执行什么语句?我执行return;没有用啊,还会弹出一个空窗体,给人不友好的界面!
#5
//FormLogin login = new FormLogin();//2.
//login.ShowDialog();//2.
我是showDialog();的~~~看我的代码!
#6
我也这样想过,主入点设置FormLogin(),关闭FormMain()同时关闭整个个程序,但不知道在哪儿怎么写!
#7
在窗体closed的事件里写,application.exit() 就可以关闭整个程序了
#8
做窗体登陆最好用ApplicationContext
http://blog.csdn.net/LeoMaya/archive/2007/07/26/1708214.aspx
http://blog.csdn.net/LeoMaya/archive/2007/07/26/1708214.aspx
#9
我前几天也处理同样的问题,在主窗口打开的时候,我隐藏主窗口
然后在登陆窗口写一个判断,当用户名密码正确时,关闭登陆窗口,进入主窗口,否则在继续在登陆窗口。
this.Opacity = 0; //设为透明
this.ShowInTaskbar = false;
Login newLogin = new Login(); //实例登陆窗口
newLogin.newmain = this;
newLogin.Show(); //打开登陆窗口
然后在登陆窗口写一个判断,当用户名密码正确时,关闭登陆窗口,进入主窗口,否则在继续在登陆窗口。
DataOperation mydo = new DataOperation();
string sql = "select * from Xt_admin where Username='" + textBox1.Text.Trim() + "'and Psw='" + GetMd5Str(textBox2.Text.Trim()) + "'";
string isOk = mydo.GetOledbString(sql);
if (isOk != null)
{
newmain.Opacity = 100;
newmain.ShowInTaskbar = true;
newmain.Focus();
isLoign = true;
sql = "update Xt_admin set loginCount = loginCount+1 where username = '" + textBox1.Text.Trim() + "'";
mydo.GetOledbBool(sql);
this.Close();
}
else
{
MessageBox.Show("用户名或密码错误!");
textBox2.Text = "";
isLoign = false;
}
#10
Application在窗体里不存在!同理我想通过this.点出隐藏的主窗体,再CLOSE();但找不出来!
#11
太复杂!看了半天看不明白~~~~~555
#12
你的问题好像也没有解决~~看的晕晕的!!
#13
用创建公共类的方法,登录窗体将登录信息传给公共类,然后启动主窗体在构造函数中验证登录信息,
如果错误则抛出异常,整个程序退出,这样应该可以了吧
如下代码:
public class MainClass
{
public MainClass()
{
}
static void Main()
{
//显示登录框
FrmLogin login = new FrmLogin();
login.ShowDialog();
try
{
//启动主窗体并执行身份验证
Application.Run(new FrmMain());
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
System.Environment.Exit(0);
}
}
//公共类,存放用户登录信息
public class Common
{
public static string _loginName;
public static string _password;
public Common()
{
}
}
public class FrmLogin
{
public FrmLogin()
{
}
//把用户输入的用户名和密码保存到公共类的静态变量中
private void SetPersonInfo()
{
Common._loginName = 用户名文本框的值;
Common._password = 密码文本框的值;
}
}
//主窗体
public class FrmMain
{
private string loginName;
private string password;
public FrmMain()
{
//从公共类中取出元素
loginName = Common._loginName;
password = Common._password;
//CheckAuth是验证登录的方法,通不过返回false
if (!CheckAuth(loginName, password))
{
throw new Exception("用户名或密码错误!");
}
}
}
如果错误则抛出异常,整个程序退出,这样应该可以了吧
如下代码:
public class MainClass
{
public MainClass()
{
}
static void Main()
{
//显示登录框
FrmLogin login = new FrmLogin();
login.ShowDialog();
try
{
//启动主窗体并执行身份验证
Application.Run(new FrmMain());
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
System.Environment.Exit(0);
}
}
//公共类,存放用户登录信息
public class Common
{
public static string _loginName;
public static string _password;
public Common()
{
}
}
public class FrmLogin
{
public FrmLogin()
{
}
//把用户输入的用户名和密码保存到公共类的静态变量中
private void SetPersonInfo()
{
Common._loginName = 用户名文本框的值;
Common._password = 密码文本框的值;
}
}
//主窗体
public class FrmMain
{
private string loginName;
private string password;
public FrmMain()
{
//从公共类中取出元素
loginName = Common._loginName;
password = Common._password;
//CheckAuth是验证登录的方法,通不过返回false
if (!CheckAuth(loginName, password))
{
throw new Exception("用户名或密码错误!");
}
}
}
#14
这么多人回答,我都不想说什么了,不过我看很少有人说到点子上。
建议楼主应用程序主入口写为:
application.run(new frmMain)
在需要登陆的情况下,先用hide方法隐藏主窗体,然后用showdialog方法显示登陆窗体。
最后退出程序的时候,如果程序是单线程的话,可以用application.exit()方法。
如果程序是多线程请先用线程的abort方法终止线程后再用application.exit()方法。
退出的时候最好写成:
try
{
}
catch
{
envirment.exit(envirment.exitcode);//强制结束程序运行
}
这才是一个标准的程序登陆和退出方法。抛砖引玉,仅供参考。
建议楼主应用程序主入口写为:
application.run(new frmMain)
在需要登陆的情况下,先用hide方法隐藏主窗体,然后用showdialog方法显示登陆窗体。
最后退出程序的时候,如果程序是单线程的话,可以用application.exit()方法。
如果程序是多线程请先用线程的abort方法终止线程后再用application.exit()方法。
退出的时候最好写成:
try
{
}
catch
{
envirment.exit(envirment.exitcode);//强制结束程序运行
}
这才是一个标准的程序登陆和退出方法。抛砖引玉,仅供参考。
#15
问题已解决,但不知道是不是最合适的方法!我把我的思路及代码发出来给大家看下:
//1.应用程序的主入口点 加了下面的Try....Catch.... (处理直接关闭登录窗体出现的异常)
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new FormCardID());
}
catch (Exception)
{
MessageBox.Show("程序已关闭");
}
//Application.Run(new FormLogin());
}
//2.FormLogin()传递一个值TAG给FormMain()
private void button1_Click(object sender, EventArgs e)
{
if (条件)
{
this.Tag = "SHOW";
this.Dispose();
}
else
{
MessageBox.Show("非法用户,拒绝登录!");
}
}
//3.如果FormLogin()直接关闭则TAG为NULL,则直接Close()掉FormMain();
public partial class FormCardID : Form
public FormCardID()
{
FormLogin login = new FormLogin();
login.ShowDialog();
if (login.Tag == null)
{
this.Dispose();
}
InitializeComponent();
}
//1.应用程序的主入口点 加了下面的Try....Catch.... (处理直接关闭登录窗体出现的异常)
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new FormCardID());
}
catch (Exception)
{
MessageBox.Show("程序已关闭");
}
//Application.Run(new FormLogin());
}
//2.FormLogin()传递一个值TAG给FormMain()
private void button1_Click(object sender, EventArgs e)
{
if (条件)
{
this.Tag = "SHOW";
this.Dispose();
}
else
{
MessageBox.Show("非法用户,拒绝登录!");
}
}
//3.如果FormLogin()直接关闭则TAG为NULL,则直接Close()掉FormMain();
public partial class FormCardID : Form
public FormCardID()
{
FormLogin login = new FormLogin();
login.ShowDialog();
if (login.Tag == null)
{
this.Dispose();
}
InitializeComponent();
}
#16
补充点上面的问题,
try
{
Application.Run(new FormCardID());
}
catch (Exception)
{
MessageBox.Show("程序已关闭");
}
只要new FormCardID()运行中出现异常,都会MessageBox.Show("程序已关闭");
这个异常处理不完善!!!期望大家有更好的解决方法!
try
{
Application.Run(new FormCardID());
}
catch (Exception)
{
MessageBox.Show("程序已关闭");
}
只要new FormCardID()运行中出现异常,都会MessageBox.Show("程序已关闭");
这个异常处理不完善!!!期望大家有更好的解决方法!
#17
思路是可以,但具体实现呢??
#18
我不是说的很清楚了吗,难道要我把全部代码都写出来。
#1
Application.Run(new FormMain());
在FormMain窗体的构造函数中添加
FormLogin frm = new FormLogin();
frm.ShowDialog();
登录窗口按下登录按钮后返回用户名密码给主窗体执行验证
在FormMain窗体的构造函数中添加
FormLogin frm = new FormLogin();
frm.ShowDialog();
登录窗口按下登录按钮后返回用户名密码给主窗体执行验证
#2
进行判断 如果2个窗体都close 了 就 application.exit()
我是小菜鸟! 说的不好清见谅, 希望能够帮到你!
我是小菜鸟! 说的不好清见谅, 希望能够帮到你!
#3
frm.ShowDialog();就行了。主窗体启东也没有关系,模态的窗体会把焦点获取过来的。只有模态窗体关闭的时候主窗体才能用的
#4
我//2.处的代码就是写在FormMain窗体的构造函数中,我也想过你说的这个‘返回用户名密码给主窗体执行验证’,
但验证条件不好写~~比喻说验证不通过,该执行什么语句?我执行return;没有用啊,还会弹出一个空窗体,给人不友好的界面!
#5
//FormLogin login = new FormLogin();//2.
//login.ShowDialog();//2.
我是showDialog();的~~~看我的代码!
#6
我也这样想过,主入点设置FormLogin(),关闭FormMain()同时关闭整个个程序,但不知道在哪儿怎么写!
#7
在窗体closed的事件里写,application.exit() 就可以关闭整个程序了
#8
做窗体登陆最好用ApplicationContext
http://blog.csdn.net/LeoMaya/archive/2007/07/26/1708214.aspx
http://blog.csdn.net/LeoMaya/archive/2007/07/26/1708214.aspx
#9
我前几天也处理同样的问题,在主窗口打开的时候,我隐藏主窗口
然后在登陆窗口写一个判断,当用户名密码正确时,关闭登陆窗口,进入主窗口,否则在继续在登陆窗口。
this.Opacity = 0; //设为透明
this.ShowInTaskbar = false;
Login newLogin = new Login(); //实例登陆窗口
newLogin.newmain = this;
newLogin.Show(); //打开登陆窗口
然后在登陆窗口写一个判断,当用户名密码正确时,关闭登陆窗口,进入主窗口,否则在继续在登陆窗口。
DataOperation mydo = new DataOperation();
string sql = "select * from Xt_admin where Username='" + textBox1.Text.Trim() + "'and Psw='" + GetMd5Str(textBox2.Text.Trim()) + "'";
string isOk = mydo.GetOledbString(sql);
if (isOk != null)
{
newmain.Opacity = 100;
newmain.ShowInTaskbar = true;
newmain.Focus();
isLoign = true;
sql = "update Xt_admin set loginCount = loginCount+1 where username = '" + textBox1.Text.Trim() + "'";
mydo.GetOledbBool(sql);
this.Close();
}
else
{
MessageBox.Show("用户名或密码错误!");
textBox2.Text = "";
isLoign = false;
}
#10
Application在窗体里不存在!同理我想通过this.点出隐藏的主窗体,再CLOSE();但找不出来!
#11
太复杂!看了半天看不明白~~~~~555
#12
你的问题好像也没有解决~~看的晕晕的!!
#13
用创建公共类的方法,登录窗体将登录信息传给公共类,然后启动主窗体在构造函数中验证登录信息,
如果错误则抛出异常,整个程序退出,这样应该可以了吧
如下代码:
public class MainClass
{
public MainClass()
{
}
static void Main()
{
//显示登录框
FrmLogin login = new FrmLogin();
login.ShowDialog();
try
{
//启动主窗体并执行身份验证
Application.Run(new FrmMain());
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
System.Environment.Exit(0);
}
}
//公共类,存放用户登录信息
public class Common
{
public static string _loginName;
public static string _password;
public Common()
{
}
}
public class FrmLogin
{
public FrmLogin()
{
}
//把用户输入的用户名和密码保存到公共类的静态变量中
private void SetPersonInfo()
{
Common._loginName = 用户名文本框的值;
Common._password = 密码文本框的值;
}
}
//主窗体
public class FrmMain
{
private string loginName;
private string password;
public FrmMain()
{
//从公共类中取出元素
loginName = Common._loginName;
password = Common._password;
//CheckAuth是验证登录的方法,通不过返回false
if (!CheckAuth(loginName, password))
{
throw new Exception("用户名或密码错误!");
}
}
}
如果错误则抛出异常,整个程序退出,这样应该可以了吧
如下代码:
public class MainClass
{
public MainClass()
{
}
static void Main()
{
//显示登录框
FrmLogin login = new FrmLogin();
login.ShowDialog();
try
{
//启动主窗体并执行身份验证
Application.Run(new FrmMain());
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
System.Environment.Exit(0);
}
}
//公共类,存放用户登录信息
public class Common
{
public static string _loginName;
public static string _password;
public Common()
{
}
}
public class FrmLogin
{
public FrmLogin()
{
}
//把用户输入的用户名和密码保存到公共类的静态变量中
private void SetPersonInfo()
{
Common._loginName = 用户名文本框的值;
Common._password = 密码文本框的值;
}
}
//主窗体
public class FrmMain
{
private string loginName;
private string password;
public FrmMain()
{
//从公共类中取出元素
loginName = Common._loginName;
password = Common._password;
//CheckAuth是验证登录的方法,通不过返回false
if (!CheckAuth(loginName, password))
{
throw new Exception("用户名或密码错误!");
}
}
}
#14
这么多人回答,我都不想说什么了,不过我看很少有人说到点子上。
建议楼主应用程序主入口写为:
application.run(new frmMain)
在需要登陆的情况下,先用hide方法隐藏主窗体,然后用showdialog方法显示登陆窗体。
最后退出程序的时候,如果程序是单线程的话,可以用application.exit()方法。
如果程序是多线程请先用线程的abort方法终止线程后再用application.exit()方法。
退出的时候最好写成:
try
{
}
catch
{
envirment.exit(envirment.exitcode);//强制结束程序运行
}
这才是一个标准的程序登陆和退出方法。抛砖引玉,仅供参考。
建议楼主应用程序主入口写为:
application.run(new frmMain)
在需要登陆的情况下,先用hide方法隐藏主窗体,然后用showdialog方法显示登陆窗体。
最后退出程序的时候,如果程序是单线程的话,可以用application.exit()方法。
如果程序是多线程请先用线程的abort方法终止线程后再用application.exit()方法。
退出的时候最好写成:
try
{
}
catch
{
envirment.exit(envirment.exitcode);//强制结束程序运行
}
这才是一个标准的程序登陆和退出方法。抛砖引玉,仅供参考。
#15
问题已解决,但不知道是不是最合适的方法!我把我的思路及代码发出来给大家看下:
//1.应用程序的主入口点 加了下面的Try....Catch.... (处理直接关闭登录窗体出现的异常)
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new FormCardID());
}
catch (Exception)
{
MessageBox.Show("程序已关闭");
}
//Application.Run(new FormLogin());
}
//2.FormLogin()传递一个值TAG给FormMain()
private void button1_Click(object sender, EventArgs e)
{
if (条件)
{
this.Tag = "SHOW";
this.Dispose();
}
else
{
MessageBox.Show("非法用户,拒绝登录!");
}
}
//3.如果FormLogin()直接关闭则TAG为NULL,则直接Close()掉FormMain();
public partial class FormCardID : Form
public FormCardID()
{
FormLogin login = new FormLogin();
login.ShowDialog();
if (login.Tag == null)
{
this.Dispose();
}
InitializeComponent();
}
//1.应用程序的主入口点 加了下面的Try....Catch.... (处理直接关闭登录窗体出现的异常)
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new FormCardID());
}
catch (Exception)
{
MessageBox.Show("程序已关闭");
}
//Application.Run(new FormLogin());
}
//2.FormLogin()传递一个值TAG给FormMain()
private void button1_Click(object sender, EventArgs e)
{
if (条件)
{
this.Tag = "SHOW";
this.Dispose();
}
else
{
MessageBox.Show("非法用户,拒绝登录!");
}
}
//3.如果FormLogin()直接关闭则TAG为NULL,则直接Close()掉FormMain();
public partial class FormCardID : Form
public FormCardID()
{
FormLogin login = new FormLogin();
login.ShowDialog();
if (login.Tag == null)
{
this.Dispose();
}
InitializeComponent();
}
#16
补充点上面的问题,
try
{
Application.Run(new FormCardID());
}
catch (Exception)
{
MessageBox.Show("程序已关闭");
}
只要new FormCardID()运行中出现异常,都会MessageBox.Show("程序已关闭");
这个异常处理不完善!!!期望大家有更好的解决方法!
try
{
Application.Run(new FormCardID());
}
catch (Exception)
{
MessageBox.Show("程序已关闭");
}
只要new FormCardID()运行中出现异常,都会MessageBox.Show("程序已关闭");
这个异常处理不完善!!!期望大家有更好的解决方法!
#17
思路是可以,但具体实现呢??
#18
我不是说的很清楚了吗,难道要我把全部代码都写出来。