3

私が開発しているWinFormsアプリで、かなり興味深い出来事に遭遇しました。DropDownItemをToolStripMenuItemに追加すると、親メニュー項目のショートカットキーが消えるようです。また、ショートカットキーが表示されないだけでなく、キー押下がまったく登録されなくなります。サブメニュー項目を削除すると、ショートカットキーが戻ってきます。驚いたことに、デザイナーではすべてがうまく見えます。これは実行時まで発生しないようです。

デザイナのメニュー:

デザイナービュー

実行時の同じメニュー:

ランタイムビュー

なぜこれが起こっているのか、そしてどうすればそれを防ぐことができるのか誰かが知っていますか?また、明確にするために、親メニューをクリックすると、サブメニューをクリックする場合とは異なる機能が実行されるため、ショートカットを移動するだけでは不十分です。メニューを手動でクリックすると、すべての機能が期待どおりに実行されます。動作しなくなったのはショートカットキーだけです。

4

3 に答える 3

0

ショートカットキーは、サブアイテムのないメニューアイテムでのみ機能すると思います。したがって、コンパイラがサブメニュー付きのメニューであると予測したため、実行時には表示されません。

于 2012-11-10T18:12:20.730 に答える
0

なぜこれが発生するのかはよくわかりませんがPreviewKeyDown、現在のイベント内でいつでも新しいイベントを定義してForm、押されたキーがメニュー項目のショートカットキーと一致するかどうかを確認できます。したがって、1つ以上のキーが押されたときに、必要なコマンドを実行できるようになります。

public Form1()
{
    InitializeComponent();
    PreviewKeyDown += new PreviewKeyDownEventHandler(Form1_PreviewKeyDown); //Link the PreviewKeyDown event of the current Form to Form1_PreviewKeyDown
}

private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.D7) //Indicates whether Ctrl and 7 are pressed (These are our hotkeys)
    {
        //DoSomething
    }
}

ありがとう、
これがお役に立てば幸いです:)

于 2012-11-10T17:53:46.623 に答える
0

私が収集できたものから、これを機能させる唯一の方法は、ToolStripMenuItemをサブクラス化し、手動で描画を処理することです。

于 2012-11-24T16:56:58.633 に答える