セルがダブルクリックされた際のイベントの処理は、おおむねシングルクリック時と同じです。
イベントが
- 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; } } } }
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場