我无法在属性设置器中更改控件属性?

时间:2016-11-30 14:45:01

标签: c# winforms

我有两种形式,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";
            }
        }
    }

我运行调试器,它遍历所有这些行,它应该更改属性,但它不会。登录表单关闭后,主表单仍然保持原样,已禁用? 我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为在您的登录表单中设置main.Auth是不好的设计。

我认为更合适的方式如下:

  1. 在loginForm中有私有布尔值isLoginValid。为IsLoginValid创建一个属性。在if语句中,将属性IsLoginValid设置为true。删除行至Frm_Main main = new Frm_Main();

  2. 在主窗体中,您可能会按照login.ShowDialog()的方式执行某些操作,因此在处理登录表单后,您可以在主窗体中分配main.Auth = Login.IsLoginValid

  3. 首选的原因是它将您的登录和主窗体逻辑分开。请阅读有关封装和松散耦合应用程序的信息