2012-10-12 4 views
0

남자! 저는 응용 프로그램 작업 양식 (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(); 
      } 
      // ... 
     } 

양식 사이에 이러한 종류의 상호 작용을 구현하는 방법을 알려주십시오. 버튼 상태를 저장하기 위해 전역 변수를 사용하지 않아도됩니다. 미리 감사드립니다.

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

그런 다음 해당 유형의 SettingsForm에 속성을합니다 : 가능한 값의리스트와

답변

3

ShowDialog는이를 알 수있는 DialogResult 개체를 반환합니다. 저장 버튼의 클릭 이벤트에

는, 버튼의 클릭 이벤트 취소에 DialogResult.OK

this.DialogResult를 설정 @ tsiorn의 대답으로 DialogResult를 관리하는 DialogResult.Cancel

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

편집에 this.DialogResult를 설정 : 당신은에 있습니다 : 폼의 DialgoResult는 각 버튼의 속성을 설정합니다.

0

시작/종료 방법을 저장 SettingsForm의에서

public ExitMethod ExitMethod { get; private set; } 

적절한 열거에 그 속성을 설정 값을 입력하고 기본 폼에서 해당 속성 값을 읽을 수 있습니다.

+0

을 다음 대화 결과를 설정 어디에서이 열거 형을 선언해야하며 어떤 범위로 선언해야합니까? 기본 폼에서 ExitMethod 값을 어떻게 읽을 수 있습니까? –

+0

@SergeyShafiev 네임 스페이스의 모든 클래스 외부에서 공용 열거 형으로 만들면됩니다. 전 세계적으로 접근 할 수없는 이유가 없습니다. 당신이 정말로 원한다면 클래스의 정의 안에 넣을 수도 있지만, 그럴 필요는 없습니다. – Servy

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

당신이 버튼에 클릭 이벤트를 처리하는 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