7

在我用 C# 编写的 WinForms 应用程序中,我有一个 DataGridViewTextBoxColumn,其中的单元格包含整数值,我希望用户能够使用键盘上的 + 和 - 键来增加或减少这些值。

我已经处理了 KeyDown 事件,因为它通常用于处理 Delete 键等,但它不适用于加号和减号键,因为按下它们会导致单元格进入编辑模式,并且 KeyDown 事件是结果从未为这些键开火。KeyPress 事件也一样

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

请问什么是实现这一目标的最佳方法?

谢谢。

4

3 回答 3

13

你试过这个:

而不是使用这个:Keys.OemMinus 使用这个:Keys.Subtract

而不是使用这个:Keys.Oemplus 使用这个:Keys.Add

于 2011-11-23T07:39:58.030 回答
2

哇,那篇知识库文章很糟糕。这应该通过覆盖 IsInputKey() 来完成。

我不太关心 DGV,它是一个定制的虫子。但是您可能可以将其打造成某种形状:

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);
    }
}
于 2010-08-25T17:36:44.440 回答
2

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

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

于 2010-08-25T15:44:14.643 回答