DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームを閉じる時に確認ダイアログ

環境/言語:[WinXPPro(SP1)、VS.Net2003(言語C#)、.NETFramework1.1]
分類:[.NET]

こんにちは〜

フォームに終了するためのボタンを配置して、
押されると、終了するかどうかの確認ダイアログを出して
「はい」を押された時、または右上の「x」ボタンを押されたときに、
終了するようにしたいと思っています。

以下のように書いて、
「〜終了〜」ボタンを押すと、ダイアログが出て「はい」を押すと
終了するのですが、
「いいえ」と押したときに、もう一度終了確認ダイアログが表示されます。

どうして「いいえ」を押したときにもう一度ダイアログが
出てくるのかがわかりません。
どこがおかしいでしょうか?
よろしくお願いします。m(_ _)m


namespace Rensyu1
{
    /// <summary>
    /// MainWindow の概要の説明です。
    /// </summary>
    public class MainWindow : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button button1;
        /// <summary>
        /// 必要なデザイナ変数です。
        /// </summary>
        private System.ComponentModel.Container components = null;

        public MainWindow()
        {
            //
            // Windows フォーム デザイナ サポートに必要です。
            //
            InitializeComponent();

            //
            // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
            //
            this.button1.Click += new EventHandler(this.button1_Click);
            this.Closing += new CancelEventHandler(this.form_OnClosing);
        }

        /// <summary>
        /// 使用されているリソースに後処理を実行します。
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows フォーム デザイナで生成されたコード 
        /// <summary>
        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディタで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(96, 16);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(72, 40);
            this.button1.TabIndex = 0;
            this.button1.Text = "〜終了〜";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // MainWindow
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
            this.ClientSize = new System.Drawing.Size(300, 100);
            this.Controls.Add(this.button1);
            this.Name = "MainWindow";
            this.ResumeLayout(false);

        }
        #endregion
        static void Main() {
            Application.Run(new MainWindow());
        }

        private void button1_Click(object source, EventArgs e) {
            this.Close();
        }

        protected virtual void form_OnClosing(Object source, CancelEventArgs e){
            if(MessageBox.Show(this, "終了しますか?","終了の確認",MessageBoxButtons.OKCancel) == DialogResult.Cancel)
                e.Cancel = true;
        }
    }
}
> 以下のように書いて、
> 「〜終了〜」ボタンを押すと、ダイアログが出て「はい」を押すと
> 終了するのですが、
> 「いいえ」と押したときに、もう一度終了確認ダイアログが表示されます。
>
> どうして「いいえ」を押したときにもう一度ダイアログが
> 出てくるのかがわかりません。

その現象がおきるのは、button1をクリックしたときだけですよね?
Xボタンで終わろうとしたときは1回だけだと思います。

> // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
> //
> this.button1.Click += new EventHandler(this.button1_Click);

InitializeComponentメソッド内とここでbutton1のClickイベントを2重に登録してしまっています。
これだと2回、this.Closeメソッドが呼ばれます。
すみません

何回も見直したはずなんですが
まったく気が付きませんでした><

単純なミスなのに
返答して頂いてありがとうございました。

申し訳ありませんでしたm(_ _)m

また投稿するときはよろしくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板