如何让我的控件在 DataGridView 关闭我的控件之前检测到 Escape 键?

发布于 2024-07-12 07:08:53 字数 316 浏览 11 评论 0原文

我有一个具有撤消功能的控件,当用户按 Escape 时,控件将恢复原始值。

问题是当我将控件集成到 DataGridView 时。 DataGridView“吃掉”了 Escape 键,因此我的控件无法检测到 Escape 键。

当我在 EditingControlWantsInputKey 上设置“return true”时,我的控件能够检测到 Escape 键,但出现了其他问题,DataGridView 无法关闭我的控件,它停留在 EditMode 中。

如何允许我的控件检测 Escape 键,同时允许 DataGridView 关闭我的控件?

I have a control with an undo feature, when the user press Escape the control will revert the original value.

The problem is when I integrated my control to DataGridView. The DataGridView "eats" the Escape key, hence my control cannot detect the Escape key.

When I put "return true" on EditingControlWantsInputKey, my control was able to detect the Escape key, but other problem arised, the DataGridView cannot close my control, it stays in EditMode.

How to allow my control to detect the Escape key while also allowing the DataGridView to close my control?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

留一抹残留的笑 2024-07-19 07:08:53

我能够解决我自己的问题。 我将 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);


    }

I was able to solved my own problem. I made the Undo method of my LookupBox public, then on my DataGridView control (class DgvLookupBoxEditingControl : LookupBox, IDataGridViewEditingControl), I put the following code:

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

        return base.ProcessCmdKey(ref msg, keyData);


    }
哭泣的笑容 2024-07-19 07:08:53

仅当 Keys.KeyCode == Keys.Escape 时才应“返回 true”;
否则返回
!dataGridViewWantsInputKey。

You should "return true" only when Keys.KeyCode == Keys.Escape;
otherwise return
!dataGridViewWantsInputKey.

ら栖息 2024-07-19 07:08:53

或者您可以将 PreviewKeyDown 处理程序添加到编辑控件并在那里检测 Escape。

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

            if(e.Control is DataGridViewTextBoxEditingControl)
            {                 
                var editBox = e.Control as DataGridViewTextBoxEditingControl;
                editBox.PreviewKeyDown += KeyPressHandler;
            }

Or you can add PreviewKeyDown handler to your editing control and detect Escape there.

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

            if(e.Control is DataGridViewTextBoxEditingControl)
            {                 
                var editBox = e.Control as DataGridViewTextBoxEditingControl;
                editBox.PreviewKeyDown += KeyPressHandler;
            }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文