2015-07-29 5 views
-1

У меня есть некоторые вопросы относительно использования клавиши Alt в C#.C# Alt Основные проблемы

Вот мой код:

switch (e.KeyCode) 
{ 
    case Keys.Menu: 
     ((do something)) 
     break; 
} 

Если я правильно понимаю, Keys.Alt используется для комбинаций клавиш, в то время как Keys.Menu используется для обнаружения простых нажатий на клавиши Alt. Я не собираюсь комбинировать ключи, поэтому я использую Keys.Menu. Мне кажется странным, что для Shift существует Keys.ShiftKey, но для Alt он называется Keys.Menu. Почему бы просто не назвать его Keys.AltKey? Смешение!

В любом случае, код работает правильно. Однако, по-видимому, функция Alt используется по умолчанию. Например, когда я печатаю что-то в документе или что-то еще, и я нажимаю Alt, курсор точки вставки исчезает, как если бы текущее окно или задача были отменены.

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

protected override bool ProcessDialogKey(Keys keyData) 
    { 
     if ((keyData & Keys.Alt) == Keys.Alt) 
      return true; 
     else 
      return base.ProcessDialogKey(keyData); 
    } 

С помощью этого кода положить в, Альт функция по умолчанию ключа отключена. Однако кажется, что клавиша Alt также стала полностью нефункциональной и больше не выполняет задачу ((что-то делать)), как я ее запрограммировал.

Есть ли способ отключить функцию по умолчанию клавиши Alt, не вызывая ее превращения в нерабочий ключ?

+1

Да, клавиша Alt имеет одну специальную функцию. Он используется для барабанной перемотки, активирует меню программы. Ну, это отвечает на один вопрос, а другой невозможно перепроектировать, когда вы не говорите нам, что делать «что-то». –

ответ

0

Не зная больше того, что вы пытаетесь сделать здесь ...

... почему вы не можете выполнить свой «что-то» перед возвращением верно?

protected override bool ProcessDialogKey(Keys keyData) 
    { 
     if ((keyData & Keys.Alt) == Keys.Alt) 
     { 
      Console.WriteLine("Alt"); 

      // ... call something from right here! ... 

      return true; 
     } 

     return base.ProcessDialogKey(keyData); 
    }