В моем случае ошибка была вызвана тем, что я изменил видимость от ушедшего к видимому (или наоборот) элемента макета. И как следствие, пространство для изображения и растрового изображения было изменено, поэтому утилизация заставила приложение сбой. Избегайте этого, и ваша проблема будет исправлена.
Это сделано специально, поэтому вам придется самостоятельно отслеживать состояние. Но это определенно остановит 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;
}
}