WinForms 应用程序中表单之间的交互,c#



>伙计们!我在应用程序中有 2 个表单 - 工作表单 (frmMain) 和设置形式 (frmSettings)。frmSettings 上有两个按钮 - 保存和取消。在 frmMain 中,我使用以下方法来显示 frmSettings:

 private void btnSettings_Click(object sender, EventArgs e)
        {
            frmSettings = new SettingsForm();
            frmSettings.ShowDialog();
            // ...
        }

问题是我不知道,如何检测,在frmMain上按下了哪个按钮 - 保存或取消。程序的进一步逻辑取决于这一事实。我需要这样的东西:

private void btnSettings_Click(object sender, EventArgs e)
        {
            frmSettings = new SettingsForm();
            frmSettings.ShowDialog();
            if(/* frmSettings.SaveButton.WasClicked == true */)
            {
                InitializeServices();
            }
            // ...
        }

请给我一个建议,如何实现表单之间的这种交互。最好不要使用全局变量来保存按钮状态。事先谢谢。

ShowDialog 返回一个 DialogResult 对象,该对象允许您知道这一点。您必须:

在"保存"按钮的单击事件中,将this.DialogResult设置为DialogResult.OK

在"取消"按钮的单击事件中,将this.DialogResult设置为DialogResult.Cancel

private void btnSettings_Click(object sender, EventArgs e)
{
   frmSettings = new SettingsForm();
   if(frmSettings.ShowDialog() == DialogResult.OK)
   {
       InitializeServices();
   }
   //.......    
}

编辑以将对话结果作为@tsiorn的答案进行管理:设置表单的拨号结果,而不是在每个按钮上设置该属性。

你选择使用 DialogResult 来处理这个问题。在表单设置窗口中,您可以按如下方式设置结果:

protected void btnSave_Click(object sender, EventArgs e) {
    DialogResult = System.Windows.Forms.DialogResult.OK
    this.close;
}
protected void btnCancel_Click(object sender, EventArgs e) {
    DialogResult = System.Windows.Forms.DialogResult.Cancel;
    this.close;
}

然后。。。

private void btnSettings_Click(object sender, EventArgs e) 
        { 
            frmSettings = new SettingsForm(); 
            frmSettings.ShowDialog(); 
            if(frmSettings.DialogResult == DialogResult.OK) 
            { 
                // save
                InitializeServices(); 
            } 
            //  ... 
        } 

从可能值的枚举开始:

public enum ExitMethod
{
    Other, //this should be first, as a default value
    Save,
    Cancel,
    Error
}

然后在该类型的SettingsForm上创建一个属性:

public ExitMethod ExitMethod { get; private set; }

在SettingsForm的保存/退出方法中,将该属性设置为适当的枚举值,在主窗体中,您可以读取该属性值。

在 frmSettings 窗口中,您可以处理按钮上的单击事件。 然后设置对话框结果:

void frmSettings_Save_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.OK;
}
void frmSettings_Cancel_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.Cancel;
}

在主窗体中,您可以执行以下操作来捕获和评估结果:

DialogResult answer = frmSettings.ShowDialog();
if (answer == DialogResult.OK)
{
  ...
}

可在此处找到其他信息和用法:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult.aspx

最新更新