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

わんくま同盟

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

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

■98288 / 1階層)  データグリッドビューでクリックだけで複数行選択
□投稿者/ 魔界の仮面弁士 (3200回)-(2021/10/28(Thu) 16:37:57)
No98283 (tosh さん) に返信
> DataGridViewで、Ctrlキーを押さなくてもクリックだけでセルを複数行選択できるようにしたいです。
> この掲示板の過去ログを調べたところ同様の質問があり、回答として
> 「DataGridView.WndProcのオーバーライドでCTRLキーが押されているように偽装する」
> の一文と共に、方法が書かれたページのリンクが張ってあったのですが

No87697 のことですね?
http://bbs.wankuma.com/index.cgi?mode=al2&namber=87696&KLOG=151

> リンクが切れていたため、具体的な方法がわかりませんでした。
あとは No48251 とか、 No55062 のスレッドとか。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=48214&KLOG=81
http://bbs.wankuma.com/index.cgi?mode=al2&namber=55062&KLOG=92


> 方法が間違っているのだろうと思いますが、どうすれば実現できるでしょうか。
MK_CONTROL → VK_CONTROL とか?


public partial class Form1 : Form
{
 private DataGridView dgv;
 private DataGridViewRow[] selectedRows = { };
 public Form1()
 {
  InitializeComponent();
  Controls.Add(dgv = new ToshDataGridView { Dock = DockStyle.Fill });
  dgv.ColumnCount = 5;
  dgv.RowCount = 30;
 }
}


public class ToshDataGridView : DataGridView
{
 protected override void WndProc(ref Message m)
 {
  const int WM_LBUTTONDOWN = 0x0201;
  if(m.Msg == WM_LBUTTONDOWN)
  {
   ControlKey = true;
   Application.DoEvents();
   base.WndProc(ref m);
   ControlKey = false;
  }
  else
  {
   base.WndProc(ref m);
  }
 }

 private bool ControlKey
 {
  set
  {
   //const byte MK_CONTROL = 0x08;
   const byte VK_CONTROL = 0x11;
   const uint KEYEVENTF_KEYDOWN = 0x0u;
   const uint KEYEVENTF_KEYUP = 0x2u;
   const uint KEYEVENTF_EXTENDEDKEY = 0x1u;
   keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY | (value ? KEYEVENTF_KEYDOWN : KEYEVENTF_KEYUP), UIntPtr.Zero);
  }
 }
 [DllImport("user32.dll")]
 public static extern uint keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
}
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←データグリッドビューでクリックだけで複数行選択 /tosh →Re[2]: データグリッドビューでクリックだけで複数行選択 /tosh
 
上記関連ツリー

データグリッドビューでクリックだけで複数行選択 / tosh (21/10/28(Thu) 09:22) #98283
Re[1]: データグリッドビューでクリックだけで複数行選択 / 大谷刑部 (21/10/28(Thu) 13:34) #98286
Re[1]: データグリッドビューでクリックだけで複数行選択 / KOZ (21/10/28(Thu) 15:39) #98287
│└ Re[2]: データグリッドビューでクリックだけで複数行選択 / tosh (21/10/28(Thu) 17:03) #98289 解決済み
データグリッドビューでクリックだけで複数行選択 / 魔界の仮面弁士 (21/10/28(Thu) 16:37) #98288 ←Now
  └ Re[2]: データグリッドビューでクリックだけで複数行選択 / tosh (21/10/28(Thu) 17:11) #98290

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