7

C#で記述しているWinFormsアプリケーションには、ユーザーがキーボードの+キーと-キーを使用してインクリメントまたはデクリメントできるようにする整数値を保持するセルを持つDataGridViewTextBoxColumnがあります。

KeyDownイベントは、削除キーなどを処理するために通常使用するものであるため処理しましたが、プラスキーとマイナスキーを押すとセルが編集モードになり、KeyDownイベントが機能するため機能しません。結果として、これらのキーに対して起動されることはありません。KeyPressイベントについても同じです

実際には、セルを読み取り専用に設定すると起動しますが、コードのいくつかの領域でプロパティをtrueからfalseに設定する必要があり、すぐに乱雑になる可能性があるため、このソリューションには満足していません。

これを達成するための最良の方法は何でしょうか?

ありがとう。

4

3 に答える 3

13

これを試してみましたか:

これを使用する代わりに:Keys.OemMinusこれを使用します:Keys.Subtract

そしてこれを使用する代わりに:Keys.Oemplusはこれを使用します:Keys.Add

于 2011-11-23T07:39:58.030 に答える
2

データグリッドに到達する前に、キーストロークをトラップする必要があります。

これは、あなたがやろうとしていることに驚くほど近いように見えます: http ://support.microsoft.com/kb/320584

于 2010-08-25T15:44:14.643 に答える
2

うわー、そのKB記事はかなり悪いです。これは、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 に答える