WindowsForms DataGridView コントロール上でのタッチ操作について
Windows FormsのDataGridViewはタッチ操作(フリック、スワイプっていうらしい)でのスクロールに不具合があります。
もうWindows Formsのバグは修正してくれないので回避コードでいくしかないようです。
DataGridView コントロール上でのタッチ操作について – Visual Studio サポート チーム blog
回避コード
private const int WM_VSCROLL = 0x0115; private const int SB_THUMBPOSITION = 0x0004; private const int SB_THUMBTRACK = 0x0005; [System.Runtime.InteropServices.DllImport("user32")] private static extern int PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); public class MyDataGridView : DataGridView { // メッセージを処理します。 protected override void WndProc(ref Message m){ base.WndProc(ref m); if (m.Msg == WM_VSCROLL){ if (LoWord((long)m.WParam) == LoWord((long)SB_THUMBPOSITION)){ BeginInvoke((Action<IntPtr, IntPtr>)((WParam, LParam) => { // SB_THUMBPOSITION を SB_THUMBTRACK に変更します。 IntPtr testWParam = new IntPtr(SB_THUMBTRACK); // WM_VSCROLL メッセージを再送します。 PostMessage(this.Handle, WM_VSCROLL, testWParam, LParam); }), m.WParam, m.LParam); } } } }
WindowsFormsでタッチ操作は正直限界だと思う。
そしてこの一文
※ 上記回避方法については、お客様において十分にご確認、ご検証くださいますようお願いします。
バグ直せや
参考URL:
Windows 8 でタッチ操作でグリッドをスクロールしたときに描画がズレる。(最後が隠れる) - Microsoft.NET - Project Group
Windows8でデータグリッドビューをタッチ操作するとスクロールバーと描画内容がずれる
Windows8 対応タッチパネルでDataGridViewコントロールによるタッチ操作でのMoseMoveイベントが発生しない。 | Microsoft Connect