1

我的申请中有三个表格。

Form1 是主窗体。Form2 是具有两个输入字段的表单。Form3 是一个密码验证表单,由 Form1 触发,认证成功后显示 Form2。

表格 1 -> 表格 3 -> 表格 2

private void button1_Click(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(this.textBox_entry_password.Text))
    {
        MessageBox.Show("Please enter a password", "Error", MessageBoxButtons.OK,
                        MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
        this.textBox_entry_password.Focus();
    }

    else
    {
        // Authentication not Implemented so far
        Form Form2 = new Form2();
        Form2.StartPosition = FormStartPosition.CenterScreen;

        // Code for hiding Form3 -- Needed ????
        Form2.ShowDialog();
    }

我希望 Form1 保持原样并隐藏 Form3 并显示 Form2。

this.hide()

隐藏 Form1。

如果我尝试

Form Form3 = new Form3();
Form3.Hide();

它什么也不做。Form3 就在那里。

如何隐藏 Form3?

4

3 回答 3

1

试试这个 :

  Form2 a = new Form2 ();
     a.Show();
     this.Close();

在按钮点击事件里面Form3

于 2013-10-25T19:00:49.560 回答
0

创建Form3()构造函数的重载并将Form1实例传递给它。

private Form form;
public Form3(Form frm)
{
  form = frm;
} 

现在无论您想隐藏/显示 form1,只需使用form.Hide(), form.Show();

在你的情况下使用

if (string.IsNullOrEmpty(this.textBox_entry_password.Text))
        {
            MessageBox.Show("Please enter a password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            this.textBox_entry_password.Focus();
        }

        else
        {

            // Authentication not Implemented so far

            Form Form2 = new Form2();
            Form2.StartPosition = FormStartPosition.CenterScreen;

            // Code for hiding Form3 -- Needed ????
            Form2.ShowDialog();
            this.Hide();
            form.ShowDialog();

        }
于 2013-10-25T19:00:52.133 回答
0

有很多方法可以做到这一点。下面是我喜欢的一种方法,因为密码表单只关心获取和验证密码,而对 Form1 和 Form2 一无所知。

Form3中的代码:

private void button1_Click(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(this.textBox_entry_password.Text))
    {
        MessageBox.Show("Please enter a password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
        this.textBox_entry_password.Focus();
    }
    else
    {
        // Authentication code here
        // if (isAuthenticated)
        // {
        //     DialogResult = DialogResult.OK;
        //     Close(); // hides and closes the form
        // }
     }
}

Form1 中的代码,使用 Form 3 和 Form2:

var dialogResult = DialogResult.Cancel;

// Always explicitly dispose a form shown modally; using clause will do this.
using (var form3 = new Form3())
{
    dialogResult = form3.ShowDialog(this);
}

if (dialogResult == DialogResult.OK) // password authenticated
{
    // Always explicitly dispose a form shown modally; using clause will do this.
    using (var form2 = new Form2())
    {
        dialogResult = form2.ShowDialog(this);
    }
}
于 2013-10-26T00:42:21.403 回答