代码之家  ›  专栏  ›  技术社区  ›  Kharlos Dominguez

在DataGridView中使用+(加号)和-(减号)键盘键作为递增和递减键

  •  5
  • Kharlos Dominguez  · 技术社区  · 14 年前

    在我用C语言编写的WinForms应用程序中,我有一个DataGridViewTextBoxColumn,其中的单元格包含整数值,我希望用户能够使用键盘上的+和-键进行增减。

    我已经处理了keydown事件,因为它是我通常用来处理删除键等的,但是它对加号和减号键不起作用,因为按下它们会导致单元格进入编辑模式,因此不会为这些键触发keydown事件。同样适用于按键事件

    实际上,如果我将单元格设置为只读,它就会被激发,但是我不喜欢这个解决方案,因为它会迫使我在代码的几个区域将属性从true设置为false,并且很快就会变得混乱。

    谢谢。

    3 回复  |  直到 13 年前
        1
  •  2
  •   Dave Swersky    14 年前

    您需要在击键到达数据报之前捕获它们。

    这看起来非常接近你想要做的事情: http://support.microsoft.com/kb/320584

        2
  •  9
  •   Tomko    13 年前

    您是否尝试过:

    而不是使用:keys.oeminus 使用这个:键。减法

    而不是使用这个:keys.oemplus 使用:键。添加

        3
  •  2
  •   Hans Passant    14 年前

    哇,那篇知识库文章真糟糕。这应该通过重写isInputKey()来完成。

    我不太关心DGV,它是一个bugger自定义。但你可以把它做成某种形状:

    using System;
    using System.Windows.Forms;
    
    class MyDgv : DataGridView {
        public event EventHandler Increment;
        public event EventHandler Decrement;
    
        protected override void OnKeyDown(KeyEventArgs e) {
            bool used = false;
            if (this.EditingControl == null) {
                if (e.KeyData == Keys.Oemplus) {
                    if (Increment != null) { Increment(this, EventArgs.Empty); used = true; }
                }
                else if (e.KeyData == Keys.OemMinus) {
                    if (Decrement != null) { Decrement(this, EventArgs.Empty); used = true; }
                }
            }
            if (used) e.SuppressKeyPress = e.Handled = true;
            else base.OnKeyDown(e);
        }
    }