所以我有这个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();
答案 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);
整个过程将正常工作和隐藏。