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