如何使用ShowDialog()关闭打开另一个表单的表单

时间:2017-02-17 11:33:50

标签: c# hide show-hide showdialog

所以我有这个frmUser但要关闭这个我必须打电话给frmPass(我使用ShowDialog()而不是Show()打电话),这将首先确认用户是一个管理员,但问题是我执行下面的代码

frmUser us = new frmUser(lblEID.Text, lblAdmin.Text, lblType.Text);
us.Hide();
this.Hide();

frmPass仅隐藏自身,而不是frmUser。这也是我的代码从frmPass

调用frmUser
frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module");
pass.ShowDialog();

2 个答案:

答案 0 :(得分:1)

在您的密码表单中,您应该设置该表单的en_属性。在例子中;在DialogResult上,当用户点击按钮确定时,您的代码会检查用户名和密码是否有效。如果一切正常,请将对话框结果设置为OK,如下所示:

frmPass

将关闭表格。 在private void btnOk_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Ok; } 中,您可以根据需要检查frmUser形式DialogResult的内容,如下所示:

frmPass

答案 1 :(得分:0)

问题是你试图隐藏frmUser的错误实例。我假设第一个代码段落在类frmPass内。在那里,您创建一个您尝试隐藏的新实例。但是你想要隐藏原始实例。

正如Nino已经建议我也建议使用DialogResult检查管理员是否已确认。但可能你已经有了不同的机制。不过,您需要在调用frmUser后将隐藏代码行放入类pass.ShowDialog();

private void button1_Click(object sender, EventArgs e)
{
    formPass pass = new formPass();
    pass.ShowDialog();

    if(AdminIsConfirmed)
    {
         this.Hide();
    }
}

将另一个this.Hide()留在frmPass中以关闭该内容。

修改

另一种可能性是将frmUser实例传递给frmPass的构造函数,并在frmUser中包含frmPass类型的变量。你只需要重载它:

public partial class formPass : Form
{
    formUser us;
    public formPass(/* all that stuff that you have plus*/, formUser us)
    {
        InitializeComponent();

        this.us = us;
    }
现在就这样打电话给frmPass

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module", this);

现在您可以删除该行:

frmUser us = new frmUser(lblEID.Text, lblAdmin.Text, lblType.Text);

整个过程将正常工作和隐藏。