4

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 キーを取得できます。それでも、下矢印キーと上矢印キーはキャプチャされません。何か間違っていることでも?

完璧な解決策は、セル編集モードでは、タブと矢印キーを私の方法で処理し、セルにとどまることです。グリッド内では、矢印キーとタブ キーは通常どおり機能します。

4

1 に答える 1