我有两种形式,login和main,主窗体最初被禁用(groupBox
被禁用)这是当用户尝试登录时运行的代码:
private async void btnLogin_Click(object sender, System.EventArgs e)
{
if (await VerifyUserNamePassword(txtUsername.Text, txtPassword.Text))
{
Frm_Main main = new Frm_Main();
main.Auth = true;
Close();
}
else
MessageBox.Show("Wrong username or password.");
}
这是主窗体中的Auth
属性:
public bool Auth
{
set
{
if (value == true)
{
groupBox1.Enabled = true;
logOffToolStripMenuItem.Enabled = true;
loginToolStripMenuItem.Enabled = false;
listBoxUsers.DataSource = ctx.Users.ToList();
listBoxUsers.DisplayMember = "UserName";
listBoxUsers.ValueMember = "Id";
}
}
}
我运行调试器,它遍历所有这些行,它应该更改属性,但它不会。登录表单关闭后,主表单仍然保持原样,已禁用? 我错过了什么?
答案 0 :(得分:1)
我认为在您的登录表单中设置main.Auth是不好的设计。
我认为更合适的方式如下:
在loginForm中有私有布尔值isLoginValid。为IsLoginValid创建一个属性。在if语句中,将属性IsLoginValid设置为true。删除行至Frm_Main main = new Frm_Main();
在主窗体中,您可能会按照login.ShowDialog()的方式执行某些操作,因此在处理登录表单后,您可以在主窗体中分配main.Auth = Login.IsLoginValid
首选的原因是它将您的登录和主窗体逻辑分开。请阅读有关封装和松散耦合应用程序的信息