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

时间:2012-10-12 16:34:41

标签: c# winforms controls

家伙! 我在应用程序中有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 个答案:

答案 0 :(得分:3)

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();
   }
   //.......    
}

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

答案 1 :(得分: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(); 
            } 
            //  ... 
        } 

答案 2 :(得分:0)

首先列举可能的值:

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

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

public ExitMethod ExitMethod { get; private set; }

在SettingsForm的save / exit方法中,将该属性设置为适当的枚举值,并在主窗体中读取该属性值。

答案 3 :(得分: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