在C#中我们可以做类似的事情:
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
pbxPhoto.Image = new Bitmap(dlg.OpenFile());
}
但是为什么我们可以找出没有听众的按钮?程序流是否在“if”子句之前停止,直到打开文件对话框关闭?
答案 0 :(得分:2)
ShowDialog()
类的OpenFileDialog
方法在内部处理按钮单击事件,然后返回DialogResult
返回类型,指示按下了哪些按钮。 (所以是的,该方法是同步调用的,因此在调用对象返回之前,调用方法的流程会停止。)。
如果您编写自己的模式对话框类(或用户控件),可以在对话框类中内部处理按钮单击事件,然后提供枚举作为结果来封装内部工作方式,则可以模仿此行为。对话框。
作为替代方案,您可以将自己的处理程序添加到FileOk事件中,但根据Justin的回答,使用非模态Show()
可能更有意义。
答案 1 :(得分:1)
我认为答案是肯定的。 ShoweDialog调用将阻塞,直到模态对话框关闭。如果您想要不同的(即非模态)行为,则需要调用Show()。
答案 2 :(得分:1)
ShowDialog是一种模态形式,这意味着在应用程序返回其正常状态之前必须将其解除。调用ShowDialog方法时,它会在按下对话框上的一个按钮后返回包含状态的枚举。例如,如果用户按下OK,则DialogResult设置为OK并返回给调用者。然后调用者确定从返回的结果(Enum)中做什么。