ContextMenustrip не закрывается автоматически, когда я нажимаю WindowsLogs + D - PullRequest
0 голосов
/ 02 августа 2011

В моем приложении есть contextmenustrip с именем "cmsView". Когда я щелкаю правой кнопкой мыши по кнопке мыши, открывается cmsView и щелкаю там, где в приложении cmsView закрывается. Если я открыл cmsView и нажал Windowslogo + D (то есть свернул приложения), и снова cmsView не закрывается и не открывается, когда я щелкаю некоторые в приложении и теряю фокус.

Как решить эту проблему.

С уважением, Tanya

1 Ответ

1 голос
/ 02 августа 2011

Это не ошибка в вашем приложении или в элементе управления 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); 
} 
...