どっとねっとふぁん

C# Tips And Samples
in 検索

14.イベントハンドラの利用とオーバーライド

最新の投稿は、投稿日時: 06-24-2005, 11:21 午前 投稿者: ono です。スレッドには 0 件の返答があります。
投稿のソート: 前へ 次へ
  •  06-24-2005, 11:21 午前 86

    14.イベントハンドラの利用とオーバーライド

    イベントに対する処理を登録する場合、イベントハンドラを使ってメソッドをイベントに関連づけします。
    -------------------------------------------------------
    using System;
    using System.Windows.Forms;
    
    class WinSample : Form
    {
    
        public WinSample()
        {
            // イベントにメソッドを登録
            this.MouseDown += new MouseEventHandler(this.myMouseDown);
        }
    
        private void myMouseDown(object sender, MouseEventArgs e)
        {
            MessageBox.Show("マウスがクリックされました");
        }
    
        public static void Main()
        {
            Application.Run(new WinSample());
        }
    
    }
    
    -------------------------------------------------------
    上記の方法以外に、継承元のクラスが持っている、イベント発生時に動作するprivateなメソッド(Onイベント名)をオーバーライドしてしまうという方法もあります。
    -------------------------------------------------------
    using System;
    using System.Windows.Forms;
    
    class WinSample : Form
    {
    
        public WinSample()
        {
            this.MouseDown += new MouseEventHandler(this.myMouseDown);
        }
    
        private void myMouseDown(object sender, MouseEventArgs e)
        {
            MessageBox.Show("マウスがクリックされました");
        }
    
        // OnMouseDownメソッドをオーバーライド
        protected override void OnMouseDown(MouseEventArgs e)
        {
            MessageBox.Show("X:" + e.X + " Y:" + e.Y);
        }
    
        public static void Main()
        {
            Application.Run(new WinSample());
        }
    
    }
    
    -------------------------------------------------------
    このサンプルを動作させると気がつくと思いますが、OnMouseDownをオーバーライドしてしまうと、イベントハンドラを使ってMouseDownに関連付けたメソッドが呼ばれなくなってしまいます。
    オーバーライドを利用する際は、基本的には継承元のメソッドを呼び出すようにしたほうがよいでしょう。
    継承元のクラスはbaseとして呼び出すことができます。
    -------------------------------------------------------
    using System;
    using System.Windows.Forms;
    
    class WinSample : Form
    {
    
        public WinSample()
        {
            this.MouseDown += new MouseEventHandler(this.myMouseDown);
        }
    
        private void myMouseDown(object sender, MouseEventArgs e)
        {
            MessageBox.Show("マウスがクリックされました");
        }
    
        protected override void OnMouseDown(MouseEventArgs e)
        {
            MessageBox.Show("X:" + e.X + " Y:" + e.Y);
            // 継承元クラスのOnMouseDownメソッドを呼び出す
            base.OnMouseDown(e);
        }
    
        public static void Main()
        {
            Application.Run(new WinSample());
        }
    
    }
    
    -------------------------------------------------------



    あおい情報システム株式会社
     小野修司(どっとねっとふぁん)
RSS ニュースフィードで参照
SkinName:iroha_CS2
Powered by Community Server, by Telligent Systems