c#Groupbox属性更改

时间:2015-09-08 00:46:21

标签: c# winforms

我在Windows窗体上有一个Groupbox,其enabled属性设置为false。我想在验证用户名和密码后在代码中启用Groupbox。当我调用Groupbox.Enabled = true方法时,Groupbox的状态不会改变。我正在从另一个窗体表单调用,并且在调用之前已经实例化了表单以启用Groupbox。我错过了什么吗?

namespace ShadowKey
{
    public partial class SetKey : Form
    {
        ConfigOptions cOptions = new ConfigOptions();

        public SetKey()
        {
            InitializeComponent();
        }

        private bool CompareStrings(string string1, string string2)
        {
            return string.Compare(string1, string2, true,     System.Globalization.CultureInfo.InvariantCulture) == 0 ? true : false;
    }

    private void btnOk_Click(object sender, EventArgs e)
    {
        try
        {
            Thread.Sleep(2000);
            string connection = @"Data Source=|DataDirectory|\EncrypterDB.sdf";
            SqlCeConnection dataCon = new SqlCeConnection(connection);
            dataCon.Open();
            string userText = tbUser.Text;
            string pwrdText = tbPwrd.Text;
            SqlCeCommand cmd = new SqlCeCommand("Select usr_name, usr_password FROM user_accounts WHERE usr_name='" + tbUser.Text + "' and usr_password='" + tbPwrd.Text + "'", dataCon);
            cmd.Parameters.Add(new SqlCeParameter("username", userText));
            cmd.Parameters.Add(new SqlCeParameter("password", pwrdText));

            SqlCeDataReader rdr = cmd.ExecuteReader();

            try
            {
                rdr.Read();
                if (rdr["usr_name"].ToString().Trim() == userText && rdr["usr_password"].ToString().Trim() == pwrdText)
                {
                    cOptions.gbEncryptionKey.Enabled = true;
                }
            }
            catch
            {
                MessageBox.Show("Invalid Username or Password!", "Login Error!");
            }
            rdr.Close();
            dataCon.Close();
        }

        catch
        {
            MessageBox.Show("You've thrown an exception!", "Error!");
        }

    }
}

}

2 个答案:

答案 0 :(得分:0)

没有很多代码可供使用,但我会猜测。我怀疑你的LinkLabel正在创建一个新的ConfigOptions实例。然后,当Enabled属性设置为true时,将在实例化SetKey时创建的实例上设置它。这意味着您没有更新正在显示的那个,而是另一个被隐藏的更新。在ConfigOptions构造函数中放置一个断点,看看它是否被多次调用。

答案 1 :(得分:0)

我没有看到何时显示ConfigOptions,但我们可以说它显示为要打开的第一个表单,您现在正在查看第二个表单。访问ConfigOptions上的属性的方法是:

(Application.OpenForms[0] as ConfigOptions).ThePropertyToSet = PropertyValueHere;

基本上,您希望通过Application.OpenForms基于打开它们的索引(顺序)来访问表单。执行以下操作无效,因为您实际上并未在打开的ConfigOption表单上设置该属性。

ConfigOptions cOptions = new ConfigOptions();
cOptions.gbEncryptionKey.Enabled = true;