読者です 読者をやめる 読者になる 読者になる

いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

DataGridView入門記-16 (セルがダブルクリックされた際のイベント)(CellDoubleClick, CellContentDoubleClick)


セルがダブルクリックされた際のイベントの処理は、おおむねシングルクリック時と同じです。
イベントが

  • CellDoubleClick
  • CellContentDoubleClick

になるだけです。


一応、サンプルです。
前回とほとんど同じですが・・。w

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:

using System;
using System.Windows.Forms;

using Gsf.Samples.Utility;

namespace Gsf.Samples.DGV{

    /// <summary>
    /// DataGridView.CellDoubleClick, DataGridView.CellContentDoubleClickイベントについてのサンプルです。
    /// </summary>
    /// <remarks>
    /// CellDoubleClickイベントは、セルの一部をダブルクリックした際に発生します。
    /// セルの内容がダブルクリックされたイベントを補足する場合は、CellContentDoubleClickイベント
    /// の方を使用します。
    /// </remarks>
    public class DataGridViewSample16 : BaseForm{

        public DataGridViewSample16() : base(typeof(DataGridViewSample16).FullName){
            // nop;
        }

        protected override void InitializeComponents(){
            //
            // DataGridView & BindingSource
            //
            DataGridView grid = new DataGridView();

            grid.Dock                = DockStyle.Fill;
            grid.AutoGenerateColumns = true;
            grid.DataSource          = GetDataSource();

            //
            // CellDoubleClick, CellContentDoubleClickイベントにコールバックを設定
            //
            grid.CellDoubleClick        += OnCellDoubleClick;
            grid.CellContentDoubleClick += OnCellContentDoubleClick;

            Controls.Add(grid);
        }

        object GetDataSource(){
            BindingSource source = new BindingSource();

            source.DataSource = typeof(Sample);

            source.Add(new Sample(0, "gsf_zero1"));
            source.Add(new Sample(1, "gsf_zero2"));

            return source;
        }

        /// <summary>
        /// セルの一部がダブルクリックされた際に発生するCellDoubleClickイベントの
        /// コールバックメソッドです。
        /// </summary>
        /// <param name="sender">イベント送信元オブジェクト</param>
        /// <param name="args">イベント引数オブジェクト</param>
        /// <remarks>
        /// クリックされたセルの位置と値をメッセージボックスにて
        /// 表示します。
        /// </remarks>
        protected void OnCellDoubleClick(object sender, DataGridViewCellEventArgs args){
            ShowCellInformation(sender, args, "CellDoubleClick");
        }

        /// <summary>
        /// セルの値自体がダブルクリックされた際に発生するCellContentDoubleClickイベントの
        /// コールバックメソッドです。
        /// </summary>
        /// <param name="sender">イベント送信元オブジェクト</param>
        /// <param name="args">イベント引数オブジェクト</param>
        /// <remarks>
        /// クリックされたセルの位置と値をメッセージボックスにて
        /// 表示します。
        /// </remarks>
        protected void OnCellContentDoubleClick(object sender, DataGridViewCellEventArgs args){
            ShowCellInformation(sender, args, "CellContentDoubleClick");
        }

        void ShowCellInformation(object sender, DataGridViewCellEventArgs args, string boxTitle){

            DataGridView g = sender as DataGridView;

            if(g != null){
                int col = args.ColumnIndex;
                int row = args.RowIndex;

                //
                // クリックがヘッダー部分などの場合は、どちらかの
                // インデックスが-1となります。
                //
                if(col >= 0 && row >= 0){
                    MessageBox.Show(string.Format("行:{0}, 列:{1}, 値:{2}", row, col, g[col, row].Value), boxTitle);
                }
            }
        }

        [STAThread]
        static void Main(){
            ApplicationUtility.Launch(typeof(DataGridViewSample16).FullName);
        }
    }

    class Sample{
        int?   _id;
        string _name;

        public Sample() : this(null, null){
            // nop;
        }

        public Sample(int? id, string name){
            _id   = id;
            _name = name;
        }

        public int? Id{
            get{
                return _id;
            }
            set{
                _id = value;
            }
        }

        public string Name{
            get{
                return _name;
            }
            set{
                _name = value;
            }
        }
    }
}

================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。