*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

<C#>

マウスのクリックとダブルクリックの扱い方<フォーム上での扱い方>


*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*


「C# でのマウスの使い方」における一連の説明(知恵ノート)において、ここでは、

「<C#> マウスのクリックとダブルクリックの扱い方<フォーム上での扱い方>」

について説明します。






総合の目次


本ページを含めた関連事項の総合目次です。

http://note.chiebukuro.yahoo.co.jp/detail/n153215



関連サンプル


本サンプルと関連性のあるサンプルです。
すなわち、次回のサンプルです。

<関連サンプル1>
「マウスのクリックとダブルクリックの扱い方<フォーム上での扱い方>」

http://note.chiebukuro.yahoo.co.jp/detail/n153125

 

<関連サンプル2>
「マウスのクリックとダブルクリックの扱い方<ピクチャボックス上での扱い方>」





はじめに


本サンプルでは、マウスのクリックとダブルクリックの扱い方についてのサンプルです。
なお、フォーム上でのマウスの扱い方を説明しています。






関連サンプルと比べた特徴


一連のサンプルでは、マウスのクリックとダブルクリックの扱い方についてのサンプルです。


<関連サンプル1>
「マウスのクリックとダブルクリックの扱い方<フォーム上での扱い方>」

フォーム上でのマウスの扱い方を説明しています。

 

<関連サンプル2>
「マウスのクリックとダブルクリックの扱い方<ピクチャボックス上での扱い方>」

ピクチャボックス上でのマウスの扱い方を説明しています。





サンプルコード


ここで取り上げるサンプルは、なるべく複雑にならない範囲で、マウスを確かめられるものとします。






本サンプの仕様概要


マウスをクリック、又はダブルクリックすると、以下の処理が行なわれる仕様とします。

 

 

<1>
マウスをフォーム上の任意の位置で、クリックすると、そこに円が描かれます。
さらに、その時の位置情報等のマウスに関連する情報も表示されます。

 

<2>
マウスをフォーム上の任意の位置で、ダブルクリックすると、そこに四角形が描かれます。
さらに、その時の位置情報等のマウスに関連する情報も表示されます。。



フォームデザイン等の前準備


コードを記述する前に、フォームのデザイン作成などの、以下の前準備を行なって下さい。

<プロジェクトの作成>
本サンプルの確認用に、新規にプロジェクトを作成して下さい。
プロジェクトの種類は、「Windowsフォームアプリケーション」です。

<フォームのデザイン>
デザイン画面で、ピクチャボックス(pictureBox)を1個貼り付けて下さい。

 

 デザイン画面

 

 

 

<イベントプロシージャの作成>

 

デザイン画面のピクチャボックス(pictureBox)が選択された状態で、「プロパティ」画面の「イベント」ボタン(雷マークのボタン)をクリックして下さい。
その「プロパティ」画面で、MouseClick と言う項目をダブルクリックして下さい。
そうすると、pictureBox1_MouseClick()メソッドが作成されます。

 

次に、同じように、デザイン画面のピクチャボックスが選択された状態での「プロパティ」画面(イベント表示の状態)で、MouseDoubleClick と言う項目をダブルクリックして下さい。
そうすると、pictureBox1_MouseDoubleClick()メソッドが作成されます。。







コード


 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


// マウスのクリックとダブルクリックの扱い方<ピクチャボックス上での扱い方>
namespace MouseClickDoubleClickEvent_PicBox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        // ==============
        // マウスでクリック時に起動するイベントプロシージャ
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {

            string Button_Type; // ボタンの種類(右ボタンか、左ボタンか等)
            int Clicks_Num;     // 押された回数
            int X_Data;         // 押された位置のx座標値
            int Y_Data;         // 押された位置のy座標値


            // マウス情報取得
            GetMouseInfo(
                e,
                out Button_Type,
                out Clicks_Num,
                out X_Data,
                out Y_Data);

 

            // ビットマップクラス(イメージ画像)の生成
            Bitmap img = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);


            // 円描画用メソッドを実行
            //  --- マウスがクリックされた位置に円を描く。
            DrawCircle(
                img,    // 図(円)を描く対象の画像
                X_Data, // 図(円)の中心位置x座標
                Y_Data, // 図(円)の中心位置y座標
                12.0f); // 図(円)の半径


            // グラフィック処理をするメソッドを実行
            DrawText(
                img,
                Button_Type,
                "クリックされました。",
                Clicks_Num.ToString(),
                X_Data,
                Y_Data);


            // 上記までに作成した画像をピクチャボックスに設定
            pictureBox1.Image = img;

        }


        // ==============
        // マウスでダブルクリック時に起動するイベントプロシージャ
        private void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {


            string Button_Type; // ボタンの種類(右ボタンか、左ボタンか等)
            int Clicks_Num;     // 押された回数
            int X_Data;         // 押された位置のx座標値
            int Y_Data;         // 押された位置のy座標値


            // マウス情報取得
            GetMouseInfo(
                e,
                out Button_Type,
                out Clicks_Num,
                out X_Data,
                out Y_Data);


            // ビットマップクラス(イメージ画像)の生成
            Bitmap img = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);


            // 四角形描画
            // 第1引数: 図を描く対象の画像
            // 第2引数: 図の中心位置x座標
            // 第3引数: 図の中心位置y座標
            // 第4引数: 図(四角)の横幅
            // 第5引数: 図(四角)の縦幅
            DrawQuadrangle(
                img,
                X_Data,
                Y_Data,
                12.0f,
                12.0f);

 

            // グラフィック処理をするメソッドを実行
            DrawText(
                img,
                Button_Type,
                "ダブルクリックされました。",
                Clicks_Num.ToString(),
                X_Data,
                Y_Data);


            // 上記までに作成した画像をピクチャボックスに設定
            pictureBox1.Image = img;

        }

 

        // ==============
        // マウス情報取得メソッド
        // マウスのクリック(MouseClick)やダブルクリック(MouseDoubleClick)
        // の際に、マウス情報を取得する。
        // 第1引数: クリック時、又はダブルクリック時に起動するイベントプロシー
        //           ジャの第2引数を、本メソッドの本引数に入力指定
        // 第2引数以降: 取得した各種のマウス情報
        public void GetMouseInfo(
            MouseEventArgs e,   // マウス情報の元となる情報の集合体


            // 第2引数以降: 取得した各種のマウス情報
            out string Button_Type, // ボタンの種類
            out int Clicks_Num,     // クリックの回数
            out int X_Data,         // マウスポインターのx座標値
            out int Y_Data)         // マウスポインターのy座標値
        {
            // 左ボタンの場合
            if (e.Button == MouseButtons.Left)
            {
                Button_Type = "左";
            }
            // 右ボタンの場合
            else if (e.Button == MouseButtons.Right)
            {
                Button_Type = "右";
            }
            // 中央ボタン(マウスホイール上のボタン)の場合
            else if (e.Button == MouseButtons.Middle)
            {
                Button_Type = "中央";
            }
            // 5つボタン対応マウスでのXButton1 (第4ボタン)の場合
            else if (e.Button == MouseButtons.XButton1)
            {
                Button_Type = "XButton1";
            }
            // 5つボタン対応マウスでのXButton2 (第5ボタン)の場合
            else if (e.Button == MouseButtons.XButton2)
            {
                Button_Type = "XButton2";
            }
            else
            {
                Button_Type = "不明";
            }

            Clicks_Num = e.Clicks;
            X_Data = e.X;
            Y_Data = e.Y;
        }

 

        //============
        // 円描画
        // 第1引数: 図を描く対象の画像
        // 第2引数: 図の中心位置x座標
        // 第3引数: 図の中心位置y座標
        // 第4引数: 図(円)の半径
        public void DrawCircle(
            Bitmap Img_Obj,
            float CenterX,
            float CenterY,
            float Radius)
        {

            // 指定イメージに対するグラフィック用オブジェクトを生成
            Graphics Gr_Obj = Graphics.FromImage(Img_Obj);

            // 指定イメージに、描画処理を実行
            Gr_Obj.FillEllipse(Brushes.Blue, CenterX - Radius, CenterY - Radius, Radius * 2.0f, Radius * 2.0f);

        }

 

        //============
        // 四角形描画
        // 第1引数: 図を描く対象の画像
        // 第2引数: 図の中心位置x座標
        // 第3引数: 図の中心位置y座標
        // 第4引数: 図(四角)の横幅
        // 第5引数: 図(四角)の縦幅
        public void DrawQuadrangle(
            Bitmap Img_Obj,
            float CenterX,
            float CenterY,
            float QuadWidth,
            float QuadHeight)
        {

            // フォームのイメージに対するグラフィック用オブジェクトを生成
            Graphics g = Graphics.FromImage(Img_Obj);

            // フォームのイメージに、描画処理を実行
            Pen redpen2 = new Pen(Color.Black, 7);
            redpen2.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
            g.DrawRectangle(redpen2,
                CenterX - (0.5F * QuadWidth),
                CenterY - (0.5F * QuadHeight),
                QuadWidth, QuadHeight);

            // 編集した画像を返却
            //return Img_Obj;

        }

 

        // ==============
        // 情報表示メソッド
        // 文字関連のグラフィック処理をするメソッドです。具体的には、本
        // メソッドを実行する前に、マウス情報取得メソッドで取得した各種
        // のマウス関連の情報(文字列、数値)を、本メソッドで画像に書き
        // 込みます。
        // 第1引数: 編集する対象の画像
        // 第2引数以降: 画像に書き込む各種文字列
        public void DrawText(


            // 編集対象画像
            Bitmap Img_Obj, // 第1引数: 編集する対象の画像


            // 第2引数以降: 画像に書き込む各種文字列
            string Button_Type, // ボタンの種類
            string Click_Type,  // クリックの種類
            string Clicks_Num,  // クリックの回数
            int x_data,         // マウスポインターのx座標値
            int y_data)         // マウスポインターのy座標値
        {

            // 描画を行うグラフィック用オブジェクトを生成
            Graphics gr = Graphics.FromImage(Img_Obj);

            // 画像領域に文字列を書き込む
            System.Drawing.Font myFont = new System.Drawing.Font(FontFamily.GenericSansSerif, 14, FontStyle.Bold);
            gr.DrawString(Button_Type + " ボタン", myFont, Brushes.Red, 0, 0);
            gr.DrawString(Click_Type, myFont, Brushes.Red, 0, 25);
            gr.DrawString(Clicks_Num + " 回", myFont, Brushes.Red, 0, 50);
            gr.DrawString("x: " + x_data.ToString(), myFont, Brushes.Red, 0, 75);
            gr.DrawString("y: " + y_data.ToString(), myFont, Brushes.Red, 0, 100);

        }

 

    }
}



 

コードの解説


サンプルコードの中に書かれていますコメントを読んで下さい。
すなわち、コードの解説は、基本的にサンプルコードの中に書かれているコメントとします。





実行結果


フォームをクリック、又はダブルクリックすると、円、又は四角形が描画されます。


 実行結果1クリック時

 

 実行結果2ダブルクリック時


さいごに

 

特にありません。