1

在 C# 中,我们可以执行以下操作:

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

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

4

3 回答 3

2

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

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

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

于 2012-08-15T10:17:44.863 回答
1

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

于 2012-08-15T10:21:24.050 回答
1

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

于 2012-08-15T10:28:39.570 回答