我在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!");
}
}
}
}
答案 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;