2012-10-12 24 views
0

guys! 我有兩種形式的應用程序 - 工作形式(frmMain)和設置形式(frmSettings)。 frmSettings上有兩個按鈕 - 保存和取消。在frmMain我用下面的辦法來顯示frmSettings:WinForms應用程序中的窗體之間的相互作用,c#

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

請給我一個建議,如何實現這種形式之間的交互。不用全局變量來保存按鈕狀態。 預先感謝。

回答

3

ShowDialog返回一個DialogResult對象,允許您知道該對象。你必須:

上的保存按鈕的Click事件,設置this.DialogResultDialogResult.OK

上的取消按鈕的Click事件,設置this.DialogResultDialogResult.Cancel

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

編輯管理的DialogResult爲@ tsiorn的回答:設置窗體的DialgoResult,在每個按鈕上設置該屬性。

0

開始與可能值的枚舉:

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

然後使該類型的SettingsForm屬性:

public ExitMethod ExitMethod { get; private set; } 

在SettingsForm的保存/退出方式設置該屬性爲適當的枚舉值,並在主窗體中可以讀取該屬性值。

+0

我應該在哪裏聲明這個枚舉以及哪個範圍?我如何能夠讀取主窗體中的ExitMethod值? –

+0

@SergeyShafiev只需在名稱空間中的任何類之外創建它作爲公共枚舉;沒有理由不能全球訪問。如果你真的想要,你可以把它放在類的定義裏面,但是沒有必要這樣做。 – Servy

1

你應該使用DialogResult來處理這個問題。在您處理上的按鈕單擊事件frmSettings窗口

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

:在您的形式設置窗口中,可以設置的結果如此。然後設置對話框結果:

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

相關問題