2017-02-17 60 views
-2

,所以我有这个frmUser但要关闭此我要打电话frmPass(我使用ShowDialog()代替Show()调用),将首先确认一个形式,如果用户是管理员但问题是,当我执行以下如何关闭打开使用的ShowDialog()另一种形式

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

frmPass代码只隐藏本身,而不是与frmUser一起。而且,这里是我的代码调用frmPassfrmUser

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

代码的位置并不清楚。第一部分在哪里? –

回答

1

在您的密码形式,就应该设置形式的DialogResult财产。在例子中;在您的frmPass上,当用户点击Ok按钮时,您的代码会检查用户名和密码是否有效。如果一切正常,请将对话结果设置为OK,如下所示:

private void btnOk_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.Ok; 
} 

即将关闭窗体。 在frmUser,你可以,如果需要的话,检查什么是frmPass形式DialogResult,像这样:

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

if (dr == DialogResult.Ok) 
{ 
    //do code if form is closed with OK dialog result 
} 
else 
{ 
    // some warning to user... 
} 
0

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

由于Nino已经建议我也会建议使用DialogResult来检查管理员是否被确认。但可能你已经有了不同的机制。不过,你需要隐藏的代码行放入类frmUserpass.ShowDialog();

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

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

电话后离开其他this.Hide()frmPass来关闭。

EDIT

另一种可能性是将frmUser实例进入的frmPass构造和在frmPass具有frmUser类型的变量。你只需要重载它:

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); 

整个事情将工作和隐藏正常。

相关问题