0

我有 Form1 和 Form2

Form1 我有一个禁用的按钮,但如果我单击 Form1 上的菜单条,我会转到 Form2。在 Form2 上,我登录到数据库。成功登录后,我希望 Form2 关闭,并且我希望 Form1 上的按钮启用。

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection connection = new SqlConnection(@"...");
    SqlCommand command = new SqlCommand("SELECT * FROM UserT WHERE UserName ='" + 
        textBox1.Text + "' AND password ='" + 
        textBox2.Text + "'", 
        connection);

    connection.Open();
    SqlDataReader reader = null;
    reader = command.ExecuteReader();
    if (reader.Read())
    {
        MessageBox.Show("Welcome " + reader["UserName"].ToString());
        Form1 lfm = new Form1();
        lfm.button1.Enabled = true;
        Form2 fm = new Form2();
        fm.Close();
    }
    else
    {
        MessageBox.Show("Username and password " + 
            textBox1.Text + "does not exist");
    }
}
4

3 回答 3

0

使用 ShowDialog 打开您的第二个表单,然后使用 ShowDialog 函数返回的 DialogResult 在您关闭第二个表单时启用第一个表单中的按钮

于 2012-07-31T11:37:03.717 回答
0

您正在创建 Form1 的新实例。不要那样做,而是需要将 Form2 显示为对话框并将对话框结果设置为 OK。

像这样

表格1 -

Button1_Click()
{
Form2 frm2 = new Form2();
if(frm2.ShowDialog() == DialogResult.OK)
{
button1.Enabled = true;
}
}

或者

button1.Enabled = form2.ShowDialog() == DialogResult.OK;

在 Form2 中,成功登录后将 DialogResult 设置为 OK。

if(reader.Read())
{
DialogResult = DialogResult.OK;
Close(); //It may not required.
}
于 2012-07-31T11:38:13.133 回答
0

您不应创建 Form1 和 Form2 的另一个实例。相反,您应该拥有 Form1 的公共属性,以便您可以启用您的按钮。如下面的代码所示:

//Form 2
public Form1 MyMainForm {get; set;}

private void button1_Click(object sender, EventArgs e)
{
    //Your code ...

    if (reader.Read())
    {
        MessageBox.Show("Welcome " + reader["UserName"].ToString());

        MyMainForm.button1.Enabled = true;

        //If you are already id Form2
        this.Close();
    }
    else
    {
        MessageBox.Show("Username and password " + 
            textBox1.Text + "does not exist");
    }
}

当从 Form1 调用 Form2 时,您设置了这个 MyMainForm。像这样 :

Form2 f = new Form2() {MyMainForm = this};

PS:你按钮的访问修饰符应该是公开的。

于 2012-07-31T11:39:52.790 回答