7

リード開発者は、私のアプリを使用すると、方向矢印キーを使用してTableLayoutPanelのTextBox間を移動すると、キーボードからビープ音が鳴ると言います。

しかし、そのような聴覚活動は聞いていません。

これが私のコードです:

// Had to intercept Up and Down arrows from Windows
private void textBoxPlatypi_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
    TextBox tb = (TextBox)sender;

    if (e.KeyCode.Equals(Keys.Up)) {
        SetFocusOneRowUp(tb.Name);
        return;
    }
    if (e.KeyCode.Equals(Keys.Down)) {
        SetFocusOneRowDown(tb.Name);
        return;
    }
}

private void textBoxPlatypi_KeyDown(object sender, KeyEventArgs e) {
    TextBox tb = (TextBox)sender;

    if (e.KeyCode.Equals(Keys.Left)) {
        SetFocusOneColumnBack(tb.Name);
        e.Handled = true;
        return;
    }
    if (e.KeyCode.Equals(Keys.Right)) {
        SetFocusOneColumnForward(tb.Name);
        e.Handled = true;
        return;
    }
}

..彼は私が「e.Handled」を必要としているのではないかと考えましたが、それはPreviewKeyDownイベントでは利用できません。

ビープ音を抑制する方法はありますか(これは明らかに特定のキーボードまたは特定のセットアップでのみ発生します(彼はWindows7を使用していますが、私はまだXPを使用しています))?

アップデート

私は今このコードを持っています:

private void textBoxPlatypus1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
    switch (e.KeyCode) {
        case Keys.Down:
        case Keys.Up:
            e.IsInputKey = true;
            break;
    }
}

private void textBoxPlatypus1_KeyDown(object sender, KeyEventArgs e) {
    TextBox tb = (TextBox)sender;

    if (e.KeyCode.Equals(Keys.Up)) {
        SetFocusOneRowUp(tb.Name);
        e.Handled = true;
        return;
    }
    if (e.KeyCode.Equals(Keys.Down)) {
        SetFocusOneRowDown(tb.Name);
        e.Handled = true;
        return;
    }

    if (e.KeyCode.Equals(Keys.Left)) {
        SetFocusOneColumnBack(tb.Name);
        e.Handled = true;
        return;
    }
    if (e.KeyCode.Equals(Keys.Right)) {
        SetFocusOneColumnForward(tb.Name);
        e.Handled = true;
        return;
    }
}

...しかし、彼はまだビープ音を聞きます(私は聞きません)。

彼はアラスカにいて、Windows7を使用しています。私はカリフォルニアにいて、XPを使用しています。いくつかの組み合わせ/不一致に問題があるかどうかはわかりません...

もう一度更新

これは一部の人にとっては衝撃的かもしれませんが、アラスカ/カリフォルニアの切断はそれとは何の関係もありません。ビープ音も聞こえますが、矢印キーからではありません。TextBoxに値が入力され、そのテキストボックスにすでに文字が含まれている場合は、フォーカスが次のtextBoxに移動され、そこに値が入力されます(これが、これを発生させるコードです)。しかし、イライラするビープ音はランダムに聞こえます-ビープ音が鳴るときのパターンを理解していません(時々鳴る、時々鳴らない)...誰かがそのようなものに出くわしたことがありますか、もっと良いことに、知っていますビープ音を抑える方法は?私がしているのは、キーボードの上にある「1」または「2」キーを押すことだけです。

4

2 に答える 2

3

PreviewKeyDownEventには、通常のKeyDownイベントのようにKeyEventを処理/抑制する方法はありません。ドキュメントが示唆しているのは、KeyDownイベントでは通常は使用できないキーの押下を処理するために、PreviewKeyDownEventArgs.IsInputKeyプロパティをtrueに設定することです。

上記のリンクから、彼らは例としてボタンを使用しています:

TAB、RETURN、ESC、矢印キーなどの一部のキーの押下は、入力キーの押下とは見なされないため、通常、一部のコントロールでは無視されます... ButtonのPreviewKeyDownイベントを処理し、IsInputKeyプロパティをtrueに設定することにより、矢印キーが押されたときにKeyDownイベントを発生させることができます。ただし、矢印キーを処理すると、フォーカスは前または次のコントロールに移動しなくなります。

于 2012-05-19T00:16:52.937 に答える
1

これを試してください:

    e.SuppressKeyPress = true;
于 2012-05-18T23:57:58.077 に答える