C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■93246 / 6階層)  Re: DataGridViewのCellDoublecli
□投稿者/ KOZ (57回)-(2019/11/29(Fri) 16:29:00)
サンプル投下します。

using System;
using System.Windows.Forms;

class DataGridViewEx : DataGridView
{
    protected override void WndProc(ref Message m) {
        switch (m.Msg) {
            case WM_LBUTTONDOWN:
                WmLButtonDown(ref m);
                break;
            case WM_LBUTTONDBLCLK:
                WmLButtonDblClk(ref m);
                break;
            default:
                base.WndProc(ref m);
                break;
        }
    }

    private bool fireCellDoubleClickEx;
    private HitTestInfo fireHitTest;

    private void WmLButtonDown(ref Message m) {
        int x = SignedLOWORD(m.LParam);
        int y = SignedHIWORD(m.LParam);
        fireHitTest = base.HitTest(x, y);

        base.WndProc(ref m);

        fireCellDoubleClickEx = false;
        switch (fireHitTest.Type) {
            case DataGridViewHitTestType.Cell:
                // ヘッダ付近だとリサイズ操作になるので
                if (Cursor != Cursors.SizeWE &&
                    Cursor != Cursors.SizeNS &&
                    CurrentCell.RowIndex == fireHitTest.RowIndex &&
                    CurrentCell.ColumnIndex == fireHitTest.ColumnIndex) {
                    fireCellDoubleClickEx = true;
                }
                break;
        }
    }

    private void WmLButtonDblClk(ref Message m) {
        base.WndProc(ref m);
        if (fireCellDoubleClickEx) {
            OnCellDoubleClickEx(new DataGridViewCellEventArgs(
                                        fireHitTest.ColumnIndex, fireHitTest.RowIndex));
        }
    }

    public event DataGridViewCellEventHandler CellDoubleClickEx;

    protected virtual void OnCellDoubleClickEx(DataGridViewCellEventArgs e) {
        if (CellDoubleClickEx != null) CellDoubleClickEx.Invoke(this, e);
    }

    private const int WM_LBUTTONDOWN = 0x201;
    private const int WM_LBUTTONDBLCLK = 0x203;

    private static int SignedHIWORD(IntPtr n) {
        return SignedHIWORD(unchecked((int)(long)n));
    }

    private static int SignedLOWORD(IntPtr n) {
        return SignedLOWORD(unchecked((int)(long)n));
    }

    private static int SignedHIWORD(int n) {
        return (short)((n >> 16) & 0xffff);
    }

    private static int SignedLOWORD(int n) {
        return (short)(n & 0xFFFF);
    }
}

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[5]: Re: DataGridViewのCellDoublecli /KOZ 返信無し
 
上記関連ツリー

DataGridViewのCellDoubleClick / Rider (19/11/28(Thu) 10:39) #93213
Re[1]: DataGridViewのCellDoubleClick / 大谷刑部 (19/11/28(Thu) 13:41) #93217
│├ Re[2]: DataGridViewのCellDoubleClick / 大谷刑部 (19/11/28(Thu) 14:16) #93219
│└ Re[2]: DataGridViewのCellDoubleClick / Rider (19/11/28(Thu) 14:48) #93220
│  └ Re[3]: DataGridViewのCellDoubleClick / 大谷刑部 (19/11/28(Thu) 15:41) #93222
│    └ Re[4]: DataGridViewのCellDoubleClick / Rider (19/11/28(Thu) 16:15) #93223
│      ├ Re[5]: DataGridViewのCellDoubleClick / Hongliang (19/11/28(Thu) 16:41) #93224
│      │├ Re: DataGridViewのCellDoubleCli / Rider (19/11/28(Thu) 17:19) #93228
│      ││└ Re[7]: DataGridViewのCellDoubleClick / 大谷刑部 (19/11/28(Thu) 17:25) #93230 解決済み
│      ││  └ Re[8]: DataGridViewのCellDoubleClick / Zurishin (19/11/28(Thu) 20:46) #93234 解決済み
│      │├ Re[6]: DataGridViewのCellDoubleClick / 大谷刑部 (19/11/28(Thu) 17:17) #93227
│      │└ Re[6]: DataGridViewのCellDoubleClick / Rider (19/11/28(Thu) 17:24) #93229 解決済み
│      └ Re[5]: DataGridViewのCellDoubleClick / 大谷刑部 (19/11/28(Thu) 17:15) #93226
Re[1]: DataGridViewのCellDoubleClick / KOZ (19/11/29(Fri) 09:03) #93238
  └ Re[2]: DataGridViewのCellDoubleClick / Rider (19/11/29(Fri) 09:27) #93239
    └ Re: DataGridViewのCellDoublecli / Rider (19/11/29(Fri) 10:02) #93243
      └ Re[4]: Re: DataGridViewのCellDoublecli / KOZ (19/11/29(Fri) 10:26) #93244
        └ Re[5]: Re: DataGridViewのCellDoublecli / KOZ (19/11/29(Fri) 10:42) #93245
          └ Re: DataGridViewのCellDoublecli / KOZ (19/11/29(Fri) 16:29) #93246 ←Now

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信