0

ShowDialog() を使用した後、閉じるまで親フォームを開いたままにしておくことに問題があります。

私はこれについて試してきましたが、取得できませんでした。私が見逃していたかもしれない単純なものがあると思います。これを登録するのを手伝ってくれませんか?

問題は、フォーム 1 があり、ボタンを 1 つ押すとフォーム 2 が開くことです。Form 2 でいくつかの検証を行い、検証を確認します。検証に合格しない場合は、[再試行] と [キャンセル] を使用して DialogBox フォームを開きます。再試行を押すと、コントロールはフォーム 2 に戻り、フォーム 2 は閉じません。[キャンセル] を押すと、DialogBox フォームと Form 2 の両方が閉じます。今、私が何を押しても、両方のフォームが閉じます。

オンラインで調べましたが、解決策が見つかりませんでした。この解決策を実行しましたが、両方のフォームがまだ閉じています。 ネストされた子ダイアログを閉じると親ダイアログも閉じるのはなぜですか?

私のコード:(サンプルシナリオ)

フォーム 1:

private void button1_Click(object sender, EventArgs e)
{
    Form2 testForm = new Form2();
    DialogResult dialogResult = new DialogResult();
    dialogResult = testForm.ShowDialog(this);
    if(dialogResult == DialogResult.OK)
    {
        //Do something
    }
}

フォーム 2:

private void button1_Click(object sender, EventArgs e)
{

    DialogResult validDataResult = MessageBox.Show("Invalid Data Entered. Please provide the correct data."
            , "Data Management"
            , MessageBoxButtons.RetryCancel);

    if (validDataResult == DialogResult.Cancel)
    {
        this.Close();
    }
}
4

2 に答える 2

1

Form2.cs で検証を行ってから
(validationOK がチェックの真/偽の結果であると仮定します)

if(validationOK == false)
{
    // Ask retry or cancel to the user
    if(DialogResult.Cancel == MessageBox.Show("Validation Fail", "Validation failed, press retry to do it againg", MessageBoxButtons.RetryCancel))
        this.DialogResult.Cancel; // Set the dialog result on form2. This will close the form.

    // if you have the validation done in a button_click event and that button has its
    // property DialogResult set to something different than DialogResult.None, we need
    // to block the form2 from closing itself.

    // uncomment this code if the above comment is true
    // else
    //    this.DialogResult = DialogResult.None;
}
于 2012-04-09T17:58:06.277 に答える
0

を呼び出す前に、DialogResultを設定する必要があります。それ以外の場合は、デフォルトのままです。(以下のコードは、指定しなかったため、実際のダブルクローズロジックの推測にすぎません)Form2this.Close()

Form2.cs:

if (validDataResult == DialogResult.Cancel)
    DialogResult = DialogResult.Cancel;
else
    DialogResult = DialogResult.OK;
Close();

Form1.cs:

if(dialogResult == DialogResult.OK)
{
    Close();
}
else
{
    //Do something
}
于 2012-04-09T16:27:20.233 に答える