为什么我们可以在没有监听器的情况下在OpenFileDialog中获得按下的按钮?

时间:2012-08-15 10:16:29

标签: c# winforms events

在C#中我们可以做类似的事情:

OpenFileDialog dlg = new OpenFileDialog();
  if (dlg.ShowDialog() == DialogResult.OK)
  {
    pbxPhoto.Image = new Bitmap(dlg.OpenFile());
  }

但是为什么我们可以找出没有听众的按钮?程序流是否在“if”子句之前停止,直到打开文件对话框关闭?

3 个答案:

答案 0 :(得分:2)

ShowDialog()类的OpenFileDialog方法在内部处理按钮单击事件,然后返回DialogResult返回类型,指示按下了哪些按钮。 (所以是的,该方法是同步调用的,因此在调用对象返回之前,调用方法的流程会停止。)。

如果您编写自己的模式对话框类(或用户控件),可以在对话框类中内部处理按钮单击事件,然后提供枚举作为结果来封装内部工作方式,则可以模仿此行为。对话框。

作为替代方案,您可以将自己的处理程序添加到FileOk事件中,但根据Justin的回答,使用非模态Show()可能更有意义。

答案 1 :(得分:1)

我认为答案是肯定的。 ShoweDialog调用将阻塞,直到模态对话框关闭。如果您想要不同的(即非模态)行为,则需要调用Show()。

答案 2 :(得分:1)

ShowDialog是一种模态形式,这意味着在应用程序返回其正常状态之前必须将其解除。调用ShowDialog方法时,它会在按下对话框上的一个按钮后返回包含状态的枚举。例如,如果用户按下OK,则DialogResult设置为OK并返回给调用者。然后调用者确定从返回的结果(Enum)中做什么。