0

伙计们!我在应用程序中有 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();
            }
            // ...
        }

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

4

4 回答 4

3

ShowDialog 返回一个 DialogResult 对象,让您知道这一点。你必须:

在保存按钮的点击事件上,设置this.DialogResultDialogResult.OK

在取消按钮的点击事件上,设置this.DialogResultDialogResult.Cancel

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

编辑以管理 DialogResult 作为@tsiorn 的答案:设置表单的 DialgoResult 设置为在每个按钮上设置该属性。

于 2012-10-12T16:40:43.397 回答
1

您应该使用 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(); 
            } 
            //  ... 
        } 
于 2012-10-12T16:41:30.230 回答
0

从可能值的枚举开始:

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

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

public ExitMethod ExitMethod { get; private set; }

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

于 2012-10-12T16:40:24.567 回答
0

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

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

于 2012-10-12T16:43:45.050 回答