2017-01-19 8 views
1

以下のように、プログラムで戻り値を設定するフォームにボタンを作成しました。まず、イベントハンドラpsudocodeが続き、ダイアログの結果が返されます。ダイアログ結果戻り値を設定する

ユーザーインターフェイスでボタンのリターン動作、つまりダイアログ結果の動作を設定できるデフォルトのプロパティがあります。私のフルコードでは、このボタンのリターンが設定または変更されている場所はわかりません。

コードの実行中にbuttonSaveSet_Clickイベントハンドラが初めて使用されたときにテスト(デバッグモードで実行)すると、「設定」ボタンをクリックしたにもかかわらず返されるダイアログ結果値が「キャンセル」になります。しかし、2回目に同じボタンを押して関数を実行すると、ダイアログの結果は「はい」として返されます。

ダイアログの結果が変更されている場所があり、その場所を誤った場所に設定しているようです。

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にコピーされます。フォームを閉じる前にイベントでそれを変更するのは遅いです。 form.DialogResultをbutton.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プロパティを調べます。イベントの終了時に再度評価する必要はありません。したがって、最初のクリックでボタンのプロパティが設定され、2回目のクリックでボタンのプロパティがフォームエンジンによって認識され、すべてが閉じられます。

+0

スティーブ、それはそれをしました。お手伝いありがとう。私はclose()メソッドを削除してしまい、返された結果は "Yes"になりました。それは私が疑った一つの事です。値の変更が終わる前にフォームが終了しましたが、私はあまりそれを書いていませんでした。 – WholeMilk32

0

。デザイナーにDialogResultプロパティを設定している可能性があります。最初に実行すると、デザイナーに設定されている値が実行され、次の実行時に期待どおりに実行されます。

あなたのデザイナーを見て、あなたは問題を見つけるでしょう。

+0

それは私が当初考えていたものです。私はデザイナーを見て、結果を修正するものは見つけられませんでした。ユーザーインターフェイスを使用して戻り値を設定すると、「this.buttonSaveSet.DialogResult = System.Windows.Forms.DialogResult.Yes;」というコード行が追加されました。ダイアログの結果を修正しました。多分それがあなたが意味するものですか?しかし、答えをありがとう!私は助けに感謝します。 – WholeMilk32

関連する問題