2011-08-02 1 views
0

私のアプリケーションで "cmsView"という名前のcontextmenustripがあります。マウスボタンを右クリックすると、cmsViewが開き、アプリケーション内のどこかでcmsViewが閉じられます。 cmsViewを開いてWindowslogo + D(つまりアプリケーションを最小限に抑える)を押すと、アプリケーションでいくつかをクリックしてフォーカスを失ったときにcmsViewが閉じずに開いた状態になります。私はWindowsLogs + Dを押すとContextMenustripが自動的に閉じない

この問題を解決する方法。

よろしく、 ターニャ

答えて

1

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

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

だから、アプリケーションでこれを「修正」することはお勧めしません。ときにローマで、ローマ人がそうであるようにやる...

あなたは絶対にがそれを試してみて、修正しを持っていた場合、あなたはあなたのフォームにlistening for a minimize eventを試してみて、手動で閉じるには、コンテキストメニューを指示することがあります。

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); 
} 
+0

ありがとうございます。しかし、これを処理する方法はありますか?それは手動でcontextmenustripを閉じることです。 – Tanya

+0

@Tanya:更新を参照してください。 –

+0

ありがとうコーディーグレー..それを処理する方法のアイデアを得ました。 – Tanya

関連する問題