2011-07-27 18 views
1

ここではC#を使用しています。ユーザーが[はい]または[いいえ]を選択できるフォームがあり、[いいえ]を選択した場合は、メッセージボックスが表示され、わかっているかどうかを尋ねるメッセージが表示されます。 [いいえ]をクリックすると、フォームを再度表示します。ここに私のコードです:MessageBoxの選択に基づいてShowDialogを行う方法

public void function() 
{ 
    MyForm form = new MyForm(); 
    if (form.ShowDialog() == DialogResult.No) 
    { 
     if (MessageBox.Show("Are you sure?", 
          MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      runFinished.Dispose(); 
      return; 
     } 
     else 
     { 
      //Show form again. How?? 
     } 
    } 
} 

おかげさで皆さん、お手伝いします!

+1

何回質問しますか?彼らは "はい"または設定回数をクリックするまで? –

+0

あなたは単にform.ShowDialog()をもう一度呼び出すことはできません....? – Jeff

+0

MyFormで「はい」をクリックするか、メッセージボックスで「いいえ」をクリックするまで表示し続けます。 – Daniel

答えて

3

NoボタンMyFormは、MessageBoxを呼び出します。ユーザーが確認した場合にのみ、ダイアログを閉じます。ダイアログが閉じた後に質問をする現在の方法は間違っています。

NoボタンのDialogResultプロパティではなく、コードにDialogResultが設定されていることを確認して変更を行うことができます。次に、ボタンのクリックハンドラで、メッセージボックスを実行します。ユーザーがアクションを確認した場合は、フォームDialogResultDialogResult.Noに設定します。

+0

ああ、意味があります。ありがとう! – Daniel

+0

私はまだC#のプロパティのすべてに慣れてきています。私はドロップダウンメニューを使用してプログラマチックに変更できることを常に忘れています。 – Daniel

+0

もう1つ質問があります。私の理解では、ユーザーが 'MyForm'を閉じるためにXをクリックすると、' ShowDialog() 'の戻り値は' DialogResult.Cancel'です。フォームを閉じることなくそれを処理する方法はありますか? – Daniel

2

「いいえ」または「はい」(MyForm内)が選択されているかどうかに応じて、2つのイベントを呼び出します。たとえば、

void OnNoEvent(object sender, EventArgs e) 
{ 
    if (MessageBox.Show("Are you sure?", MessageBoxButtons.YesNo) == DialogResult.Yes) 
    { 
     this.DialogResult = DialogResult.No; 
     this.Close(); 
    } 
} 

void OnYesEvent(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.Yes; 
    this.Close(); 
} 

これはおそらくダイアログボックスを何度も開くよりも優れています。

次に、ダイアログを開くためのコードは簡単です。

+0

モーダルダイアログで 'this.Close()'を呼び出す必要はありません。 –

+0

興味深いことに私は知らなかった、ありがとう。とにかく前にあなたは同じように答えました。優しさ – Giawa

+0

助けてくれてありがとう。デイヴィッドはあなたにそれを打つので、私は彼の答えを選んだが、私はそれを感謝する:) – Daniel

0

は、たぶん私はここに何かが足りないのですが、なぜwhileループを使用していませんか?

public void function() 
{ 
    MyForm form = new MyForm(); 

    while(form.ShowDialog() == DialogResult.No) 
    { 
     if (MessageBox.Show("Are you sure?", 
          MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      runFinished.Dispose(); 
      return; 
     } 
    } 
}