DataGridView セルで KeyDown イベントを処理したいと考えています。次のコードを使用して、セルで KeyDown イベントを取得します。
private void dgvData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var tb = (DataGridViewTextBoxEditingControl)e.Control;
tb.KeyDown += cell_KeyDown;
}
しかし、タブや矢印などの特殊キーを処理できないようです。これらのキーは私の cell_KeyDown メソッドには行きません。だから私は DataGridView の KeyDown イベントでそれらを処理しようとします:
private void dgvData_KeyDown(object sender, KeyEventArgs e)
{
// handle keys
}
その場合、私はまだ Tab キーをキャプチャできません。矢印キーをキャプチャできますが、カスタム イベントを処理した後でも、矢印によって他のセルに移動します。独房に残りたい。
次に、次のように DataGridView を拡張します。
class DataGridViewSp : DataGridView
{
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Tab)
{
//todo special handling
return true;
}
else if (keyData == Keys.Down)
{
//todo special handling
return true;
}
else if (keyData == Keys.Up)
{
//todo special handling
return true;
}
else
{
return base.ProcessDialogKey(keyData);
}
}
}
これで、このオーバーライドされた ProcessDialogKey メソッドで Tab キーを取得できます。それでも、下矢印キーと上矢印キーはキャプチャされません。何か間違っていることでも?
完璧な解決策は、セル編集モードでは、タブと矢印キーを私の方法で処理し、セルにとどまることです。グリッド内では、矢印キーとタブ キーは通常どおり機能します。