我的目的是创建一个弹出窗口(使用其他表单)并在触发删除文件事件时显示它。在此弹出窗体上,用户应输入正确的密码,然后单击“确定”按钮,此弹出窗口消失,删除操作继续进行。我所做的是设置一个字符串变量"结果"在弹出窗体中(表单2)。单击确定按钮时,如果输入的密码正确,则"结果"例如设置" true"。在我的主要形式中我做了:
if(form2.Result=="true"){ // deletion operation}
然而,这种方法并不起作用。当我输入正确的密码并在form2中单击“确定”时,我的主窗体中没有任何反应。任何人都知道我怎样才能在主窗体中检测到form2中的按钮点击事件?类似于" if(form2.button.click == true)"。 谢谢
答案 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;