2017-01-19 3 views
1

아래와 같이 반환 값을 프로그래밍 방식으로 설정하는 양식에 단추를 만들었습니다. 첫째, 이벤트 처리기 psudocode 다음에 대화 결과가 반환됩니다.대화 상자 결과 반환 값 설정

사용자 인터페이스에서 단추의 반환 동작, 즉 대화 결과 동작을 설정할 수있는 기본 속성이 있습니다. 전체 코드에서이 버튼의 반환이 설정되거나 수정 된 곳을 볼 수 없습니다.

코드 실행 중에 buttonSaveSet_Click 이벤트 처리기를 처음 사용할 때 디버그 모드로 테스트하면 "Set"단추를 클릭 했음에도 불구하고 반환 된 대화 상자 결과 값이 "취소"됩니다. 그러나 두 번째로 동일한 버튼을 눌러 함수를 실행하면 대화 상자 결과가 "예"로 반환됩니다.

대화 상자 결과가 수정되는 다른 곳이 있는데 잘못된 값으로 설정하려고합니다.

psudo code 
    private void buttonSaveSet_Click(object sender , EventArgs e) 
    { 
     setChars = new setChars(); 
     //set the dr to yes. 
     buttonSaveSet.DialogResult = DialogResult.Yes; 

     // set the charCount 
     // set the rowCount 

     if (conditional statement is true) 
     { 
      //return values; 
     } 

     else 
     { 
      //return nothing; 
     } 
     Close(); 
    } 

반환 위치 : 당신이 decribing하는 동작을 바탕으로

   try 
     { 
      DialogResult dResult = setValPopup.ShowDialog(); 
      SetChars sc = setValPopup.setChars; 
      int max; 

      if (dResult == DialogResult.Yes) 
      { 
       if (sc.set == true) 
       { 
        //do other work 
       } 
      } 
     } 
+0

DialogResult 버튼은 onClick이 실행되기 전에 form.DialogResult에 복사됩니다. 양식을 닫기 전에 이벤트에서 변경하면 늦어집니다. button.DialogResult가 아닌 form.DialogResult를 설정하십시오. – Ralf

답변

0

양식의 DialogResult 속성을 종료하도록 설정해야합니다. 값하지만 DialogResult.None은 아마 양식 엔진 사실로 인해 (안 버튼, 양식에)

private void buttonSaveSet_Click(object sender , EventArgs e) 
{ 
    setChars = new setChars(); 
    this.DialogResult = DialogResult.Yes; 
    .... 
    // No need to call Close here 
    // Close(); 
} 

당신이 관찰 동작은을 닫고 DialogResult를로 설정대로 돌아갑니다 양식을 강제로 click 이벤트를 입력하기 전에 버튼의 DialogResult 속성을 검사하므로 이벤트 종료시 다시 평가할 필요가 없습니다. 따라서 첫 번째 클릭은 버튼의 속성을 설정하고, 두 번째 클릭은 버튼의 속성이 양식 엔진에 표시되고 모든 것이 닫힙니다.

+0

스티브, 그랬어. 도와 주셔서 감사합니다. close() 메서드를 제거하고 결과가 "예"라고 예상 했었습니다. 그것은 제가 의심했던 한 가지입니다. 가치 변화가 끝나기 전에 닫히는 양식이 기록되었지만, 그것에 크게 신경 쓰지는 않았습니다. – WholeMilk32

0

. 디자이너에서 DialogResult 속성을 설정 했으므로 처음 실행될 때 디자이너에서 설정 한 값이 실행되고 다음 실행시 예상대로 실행됩니다.

디자이너를보고 문제를 찾을 수 있습니다.

+0

그것은 내가 처음에 생각한 것입니다. 나는 디자이너를보고 결과를 수정할만한 것을 찾지 못했습니다. 사용자 인터페이스를 사용하여 반환 값을 설정하면 "this.buttonSaveSet.DialogResult = System.Windows.Forms.DialogResult.Yes;"라는 코드 행이 추가됩니다. 대화 상자 결과가 수정되었습니다. 어쩌면 그것이 당신이 의미 한 것일까요? 답변을 주셔서 감사합니다! 도움에 감사드립니다. – WholeMilk32