none
c#、ダイアログボックス RRS feed

  • 質問

  • 「プロジェクト」からwindowsアプリケーションであるFORM2を新規作成して、

    OKボタンとCANCELボタンを配置、

    DialogResultプロパティはそれぞれ、「OK」と「CANCEL」にします。

     

    FORM1にメニューを追加して、

    メニューに関連付けたイベントハンドラから、次のようにFORM2を呼び出します。

           private void dETAToolStripMenuItem_Click(object sender, EventArgs e)
            {

                Form2 fo2 = new Form2(ref listBox1);
                if (fo2.ShowDialog() == DialogResult.OK){・・・・}

     

    プログラムを実行してメニューからFORM2を呼び出したとき、

    「OK」ボタンをクリックしたときは問題ないのですが、

    「CANCEL」ボタンや、右上の「×」ボタンをクリックしたとき、

    もう一度FORM2が立ち上がってきます。

    再度「CANCEL」ボタンや、右上の「×」ボタンをクリックしたときは、無事にFORM2が閉じます。

     

    なぜ「CANCEL」ボタンを2回クリックしないと閉じないのかが分からずに困っております。

    質問ばかりで恐縮ですが、どなたかご存知の方がいらっしゃいましたら、よろしくお願い致します。


     

    2007年8月29日 8:22

回答

  • 書かれたコードを元に試してみましたが、自分の環境では再現しませんでした。

     

    まず    Form2 fo2 = new Form2(ref listBox1); の部分ですが

    Form2のコンストラクタを自分で定義してますよね。

    この辺りのコードが何か悪さをしているかもしれません。

    試しに Form2 fo2 = new Form2(); として再現するか確認してみてください。

     

    次に最後のif 文がDialogResult.OKのみの処理しか書かれていませんが

    この後にDialogResult.Cancel のelse文が入っていませんか?

    入っているならそのelse文が悪さしているかもしれません。

    (「CANCEL」ボタン、「x」ボタンともにDialogResult.Cancel が返ってくるため)

     

    2007年8月29日 11:13

すべての返信

  • 書かれたコードを元に試してみましたが、自分の環境では再現しませんでした。

     

    まず    Form2 fo2 = new Form2(ref listBox1); の部分ですが

    Form2のコンストラクタを自分で定義してますよね。

    この辺りのコードが何か悪さをしているかもしれません。

    試しに Form2 fo2 = new Form2(); として再現するか確認してみてください。

     

    次に最後のif 文がDialogResult.OKのみの処理しか書かれていませんが

    この後にDialogResult.Cancel のelse文が入っていませんか?

    入っているならそのelse文が悪さしているかもしれません。

    (「CANCEL」ボタン、「x」ボタンともにDialogResult.Cancel が返ってくるため)

     

    2007年8月29日 11:13
  •  

    早速のご回答ありがとうございました。

    ご指摘の通り、else以下が次のようになっていました。

                else if (fo2.ShowDialog()== DialogResult.Cancel)

    fo2.ShowDialog()を変数に代入して修正したところ、うまくいいきました。

    ありがとうございました。

    2007年8月29日 14:13