残念ながらDataGridViewではなく、ReadOnly DataGridでセルをダブルクリックすると処理する必要がありますが、MouseDoubleClickイベントは処理されません解雇される。どうすればイベントを発動できますか?System.Windows.Forms.DataGridでセルをダブルクリックしたときにMouseDoubleClickイベントが発生しない
は、私は、DataGridを作成し、イベントをサブスクライブしている:私はセルの境界をダブルクリックした場合にのみ
var table = new DataTable();
table.Columns.Add("foo");
table.Rows.Add(new object[] { "foo" });
table.Rows.Add(new object[] { "foo" });
dataGrid1.DataSource = table;
dataGrid1.MouseDoubleClick += DataGrid1_MouseDoubleClick;
dataGrid1.ReadOnly = true;
イベントがあります。
私は、彼らが同じくらい言うan old thread in Experts Exchange、見つかった:
まあ、だけではありませんが、私はセルをクリックすると読み取り専用のテキストボックスには、第2のクリックイベントを食べるように思われ表示されますダブルクリックイベントは、セルをクリックするとキャプチャされず、データグリッドメッセージキューによって捕捉されていません。私はデータグリッドを継承し、ダブルクリックを検出できるかどうかを確認するためにwndprocをオーバーロードしました。クリックメッセージをキャプチャしますが、WM_LBUTTONDBLCLKメッセージは送信されません。私は、MSが子コントロール(DataGridColumnStyleクラスとデリバティブを参照)をグリッドコントロールにフックして、メッセージがグリッドに続行されないようにしていると思われます。その子供やグリッドをあらかじめフックしようとするとかなり厄介な結果になる可能性があるので、私はそれを避けています。
私は実際にTextBoxコントロールを必要としないので、セルを "アクティブ化"または表示する方法があれば、私にとっても十分な解決策になります。
注:私はDataGridが廃止されていることを知っていますが、私は従来のコードを扱っています。DataGridViewを使用するようにコメントしないでください。
あなたの代わりにダブルクリックのセル上の簡単なクリックイベントを処理してもらえますか? – Nofuzy
グリッドをアクティブにする必要がない場合は、マウスのクリックをキャプチャするために透明コントロールを上に置くことができますか? – Equalsk
@Equalsk面白いアイデア。グリッドと一緒にコントロールをサイズ変更する必要がありますが、おそらくアンカーでそれを達成できます。ヘッダー行をクリックして列幅のサイズを変更し、並べ替えを変更できるようにするには、セル上で行う必要があります。 – sashoalm