2

元に戻す機能を備えたコントロールがあります。ユーザーが Escape を押すと、コントロールは元の値に戻ります。

問題は、コントロールを DataGridView に統合したときです。DataGridView は Escape キーを「食べる」ため、コントロールは Escape キーを検出できません。

EditingControlWantsInputKey に "return true" を設定すると、コントロールは Escape キーを検出できましたが、他の問題が発生しました。DataGridView がコントロールを閉じることができず、EditMode のままです。

DataGridView がコントロールを閉じることを許可しながら、コントロールが Escape キーを検出できるようにするにはどうすればよいですか?

4

3 に答える 3

2

私は自分の問題を解決することができました。LookupBoxUndoメソッドを公開してから、DataGridViewコントロール(クラスDgvLookupBoxEditingControl:LookupBox、IDataGridViewEditingControl)に次のコードを配置しました。

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Escape)            
            this.Undo();            

        return base.ProcessCmdKey(ref msg, keyData);


    }
于 2009-01-14T06:39:58.547 に答える
0

Keys.KeyCode == Keys.Escape; の場合にのみ「true を返す」必要があります。
それ以外の場合は、!dataGridViewWantsInputKey を返します。

于 2009-01-14T05:40:01.117 に答える
0

または、PreviewKeyDown ハンドラーを編集コントロールに追加して、そこで Escape を検出することもできます。

            dataGridView1.EditingControlShowing += (o, e) => {

            if(e.Control is DataGridViewTextBoxEditingControl)
            {                 
                var editBox = e.Control as DataGridViewTextBoxEditingControl;
                editBox.PreviewKeyDown += KeyPressHandler;
            }
于 2015-07-21T20:51:47.550 に答える