仅当用户从第二个表单成功登录时,如何才能显示主表单?
How do I make the main form show only if the user login is successful from a second form?
我正在尝试制作一个验证用户登录的表单。我希望先显示该表单,如果用户登录成功,则应显示主表单。
这是我试过的(第二种形式):
private void button1_Click(object sender, EventArgs e)
{
string funame = "thename";
string dep = "thedep";
string unm = "theusername";
string ups = "thepassword";
User cs = new User(funame, dep, unm, ups);
if (cs.validateLogin(unm, ups));
{
MessageBox.Show("Welcome " + funame + " of " + dep);
frmPurchaseDiscountedItem fpd = new frmPurchaseDiscountedItem();
fpd.Show();
}
}
问题是主窗体总是先弹出。
应该是这样的:
*然后弹出第二个表单,如果用户通过验证,则弹出主表单
这是一个解决方法。
您不需要在 Program.cs
中更改“开始表格”。可以把开头的mainwindow打开,隐藏起来。然后创建一个登录实例并显示它。
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
Login login = new Login(this);
// hide MainForm
this.Hide();
// show Login
login.ShowDialog();
}
}
如果点击 Login form
中的登录按钮,显示 MainForm
并关闭 Login form
。
public partial class Login : Form
{
private MainForm mainform = null;
public Login(MainForm main)
{
InitializeComponent();
// get MainForm instance
this.mainform = main;
}
// if success
bool success = true;
private void btnLogin_Click(object sender, EventArgs e)
{
if(success) // check login here
{
// show main form
mainform.Visible = true;
// close login form
this.Close();
}
}
}
此外,如果点击Login form
右上角的X button
,也会显示隐藏的MainForm
(如果用户不想登录, 关闭应用程序)。我们可以通过覆盖 WndProc
.
来避免它
protected override void WndProc(ref Message msg)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (msg.Msg == WM_SYSCOMMAND && ((int)msg.WParam == SC_CLOSE))
{
// click the 'X' button to close the application
Application.Exit();
return;
}
base.WndProc(ref msg);
}
我正在尝试制作一个验证用户登录的表单。我希望先显示该表单,如果用户登录成功,则应显示主表单。
这是我试过的(第二种形式):
private void button1_Click(object sender, EventArgs e)
{
string funame = "thename";
string dep = "thedep";
string unm = "theusername";
string ups = "thepassword";
User cs = new User(funame, dep, unm, ups);
if (cs.validateLogin(unm, ups));
{
MessageBox.Show("Welcome " + funame + " of " + dep);
frmPurchaseDiscountedItem fpd = new frmPurchaseDiscountedItem();
fpd.Show();
}
}
问题是主窗体总是先弹出。
应该是这样的:
*然后弹出第二个表单,如果用户通过验证,则弹出主表单
这是一个解决方法。
您不需要在 Program.cs
中更改“开始表格”。可以把开头的mainwindow打开,隐藏起来。然后创建一个登录实例并显示它。
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
Login login = new Login(this);
// hide MainForm
this.Hide();
// show Login
login.ShowDialog();
}
}
如果点击 Login form
中的登录按钮,显示 MainForm
并关闭 Login form
。
public partial class Login : Form
{
private MainForm mainform = null;
public Login(MainForm main)
{
InitializeComponent();
// get MainForm instance
this.mainform = main;
}
// if success
bool success = true;
private void btnLogin_Click(object sender, EventArgs e)
{
if(success) // check login here
{
// show main form
mainform.Visible = true;
// close login form
this.Close();
}
}
}
此外,如果点击Login form
右上角的X button
,也会显示隐藏的MainForm
(如果用户不想登录, 关闭应用程序)。我们可以通过覆盖 WndProc
.
protected override void WndProc(ref Message msg)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (msg.Msg == WM_SYSCOMMAND && ((int)msg.WParam == SC_CLOSE))
{
// click the 'X' button to close the application
Application.Exit();
return;
}
base.WndProc(ref msg);
}