0

アプリケーションに「cmsView」という名前の contextmenustrip があります。マウス ボタンを右クリックすると、cmsView が開き、アプリケーションの cmsView が閉じられる場所をクリックします。cmsViewを開いてWindowslogo + Dを押すと(つまり、アプリケーションを最小化します)、cmsViewは閉じられず、アプリケーション内のいくつかをクリックしてフォーカスを失うたびに開いた状態になります。

4

1 に答える 1

1

ContextMenuStripこれは、アプリケーションまたはコントロールのバグではありません。どちらかといえば、これは Windows のポップアップ メニュー コントロールのバグであり、WinForms コントロールは実際にそのバグを模倣しているため、ユーザーの期待どおりに動作します。

これは、メモ帳などの単純なアプリケーションで自分でテストできます。Win新しいインスタンスを開き、ドキュメント領域を右クリックして+を押しDます。アプリケーションのウィンドウが消えた (最小化された) 場合でも、コンテキスト メニューは開いたままデスクトップに表示されます。

したがって、アプリケーションでこれを「修正」しようとすることはお勧めしません。ローマにいるときは、ローマ人がするように...

どうしても修正しなければならない場合は、フォームの最小化イベントをリッスンして、コンテキスト メニューを手動で閉じるように指示してみてください。

private const int WM_SYSCOMMAND = 0x0112; 
private const int SC_MINIMIZE = 0xf020; 

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_SYSCOMMAND) 
    { 
        if (m.WParam.ToInt32() == SC_MINIMIZE) 
        { 
            // Close the context menu strip when the form is being minimized
            cmsView.Close();    
        } 
    } 
    base.WndProc(ref m); 
} 
于 2011-08-02T04:47:11.507 に答える