C# 为什么在没有侦听器的情况下,我们可以在OpenFileDialog中按下按钮?

C# 为什么在没有侦听器的情况下,我们可以在OpenFileDialog中按下按钮?,c#,winforms,events,C#,Winforms,Events,在C中,我们可以执行以下操作: OpenFileDialog dlg = new OpenFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { pbxPhoto.Image = new Bitmap(dlg.OpenFile()); } 但是为什么我们能在没有监听的情况下找出按下了什么按钮呢?程序流是否在if子句之前停止,直到打开文件对话框关闭?OpenFileDialog类的ShowDialog方法在内部处理按钮

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

OpenFileDialog dlg = new OpenFileDialog();
  if (dlg.ShowDialog() == DialogResult.OK)
  {
    pbxPhoto.Image = new Bitmap(dlg.OpenFile());
  }
但是为什么我们能在没有监听的情况下找出按下了什么按钮呢?程序流是否在if子句之前停止,直到打开文件对话框关闭?

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

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

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

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

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


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

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

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

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

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

当用户关闭对话框时,ShowDialog方法返回@Hatten。当用户关闭对话框时,ShowDialog方法返回@Hatten。