如何从另一个表单中检测按钮单击

时间:2014-06-12 10:47:13

标签: c# winforms

我的目的是创建一个弹出窗口(使用其他表单)并在触发删除文件事件时显示它。在此弹出窗体上,用户应输入正确的密码,然后单击“确定”按钮,此弹出窗口消失,删除操作继续进行。我所做的是设置一个字符串变量"结果"在弹出窗体中(表单2)。单击确定按钮时,如果输入的密码正确,则"结果"例如设置" true"。在我的主要形式中我做了:

if(form2.Result=="true"){ // deletion operation}

然而,这种方法并不起作用。当我输入正确的密码并在form2中单击“确定”时,我的主窗体中没有任何反应。任何人都知道我怎样才能在主窗体中检测到form2中的按钮点击事件?类似于" if(form2.button.click == true)"。 谢谢

2 个答案:

答案 0 :(得分:2)

您不应该在第二个表单上检测到按钮单击,您应该重新构建流程。

有两种常见的方法可以做到这一点。你最容易实现的不是调用你现在可能正在做的form2.Show(),你应该调用form2.ShowDialog()来停止form1中方法的执行,直到form2关闭

所以在form1中你会有像

这样的东西
private void DeleteSomething() {
  if (form2.ShowDialog() == DialogResult.Ok) {
      if (form2.result == true)
         doDelete();
  }
}

请注意,检查DialogResult是一种常见做法,除非您在Form2上指定属性,指定哪个按钮将充当“确定”按钮,您需要在回复中提到的对象结果中手动设置对话框结果与

this.DialogResult = DialogResult.OK;

在您的情况下,使用对话框结果并不是绝对必要的,但实现对不同对话框结果的支持是常见的做法(确定,取消等)

另一种方法是不将form2视为对话框,但让form1将对其fromlef的引用传递给form2

然后在form2中,您可以调用form1上的方法来“授权”删除

所以form1将有一个私有方法“confirmDelete”,它只显示form2

和另一个公共方法“doDelete”,在需要时由form2调用。

关于您的代码的无关注释:

如果您要使用变量来指示天气认证是succsefull,请不要使用值为“true”的字符串,请使用布尔值。

如果您想要返回3个或更多状态(例如,结果可能是“确定”,“用户取消”,“密码不正确”,“无效特权”等),请使用枚举。

答案 1 :(得分:1)

ShowDialog()方法返回DialogResult,您可以将其设置为指示表单如何退出

using(var form2 = MyFormName())
{
     if(form2.ShowDialog() == DialogResult.OK)
        //success -- You can access form2 properties also.
}

在表单上的button_ok事件中,将DialogResult设置为OK

 this.DialogResult = DialogResult.OK;