2

TreeView のキーダウン イベント内 (または、TreeView にフォーカスがある場合は KeyPreview=true のフォーム内) でモーダル ダイアログを開くと、煩わしい DING が聞こえます。

どうすればそれを防ぐことができますか?

この音は通常、キー イベントが処理されなかったことを示すシグナルです (たとえば、デフォルトでは、TextBox は Ctrl+A などで鳴ります)。ただし、TreeView のモーダル ダイアログの場合、e.Handled または e.SuppressKeyPress を設定しても役に立ちません。モーダルダイアログを開く以外のことをするときに役立ちます!

4

3 に答える 3

6

イベントの 1 つでメッセージ ループをポンピングすると、ネイティブの Windows ツリービュー コントロールが非常に不安定になります。標準的な解決策は、すべてのイベントが完了するまでイベントの処理を遅らせることです。Control.BeginInvoke() メソッドで簡単に実行できます。この場合も機能しました:

    private void treeView1_KeyDown(object sender, KeyEventArgs e) {
        e.Handled = e.SuppressKeyPress = true;
        this.BeginInvoke(new Action(() => 
            (new Form1()).ShowDialog()
        ));
    }
于 2012-04-26T06:29:11.190 に答える
0

ProcessCmdKeyでキーストロークをキャプチャするとうまくいきました。フォームのこのメソッドをオーバーライドします。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == (Keys.O | Keys.Control))
    {
        openFileDialog1.ShowDialog();
        return true;
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

true を返して、キーストロークがフォームによって消費されたことを示し、それ以上の処理を停止します。

于 2012-04-26T07:01:24.463 に答える