Как предотвратить закрытие контекстного меню при удерживании клавиши Alt?

В моем случае ошибка была вызвана тем, что я изменил видимость от ушедшего к видимому (или наоборот) элемента макета. И как следствие, пространство для изображения и растрового изображения было изменено, поэтому утилизация заставила приложение сбой. Избегайте этого, и ваша проблема будет исправлена.

1
задан glopes 20 February 2019 в 22:06
поделиться

1 ответ

Это сделано специально, поэтому вам придется самостоятельно отслеживать состояние. Но это определенно остановит Alt от достижения MenuStrip.

Это низкоуровневая фильтрация клавиатуры, поэтому вам придется решить, что делать, когда Alt нажата полностью самостоятельно.

Вы также можете изменить условное выражение для проверки на Alt плюс некоторое состояние .

Короче говоря, возврат true из PreFilterMesssage остановит его доступ к вашему приложению.

static void Main()
{
    //...SNIP...
    Application.AddMessageFilter(new AltFilter());
    //...SNIP...
}

public class AltFilter : IMessageFilter
{
    private static ushort WM_SYSKEYDOWN = 0x0104;

    public bool PreFilterMessage(ref Message m)
    {
        if (m.Msg == WM_SYSKEYDOWN && Control.ModifierKeys == Keys.Alt)
        {
            //Do your own special thing instead
            return true;
        }
        return false;
    }
}
0
ответ дан Zer0 20 February 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: