2011-12-21 10 views
5

mam przeżywa pewne problemy przy użyciu klawiszy mnemonicznych w Windows Forms:Accelerator (element pamięciowy) są wykonywane bez naciskania klawisza ALT

Proszę o formularz z przyciskiem, który wykorzystuje ALT + S jako akceleratora:

this.searchButton = new System.Windows.Forms.Button(); 
this.searchButton.Text = "&search"; 

Działanie przycisku wykonuje się po prostu naciskając "s" (bez naciskania klawisza ALT). Sprawdziłem kilka innych aplikacji, a akceleratory są wykonywane tylko po naciśnięciu klawisza ALT.

  • Czy to jest problem .NET?
  • Jak rozwiązać ten problem?

Z góry dziękuję.

+0

Jakiej wersji .NET używasz? – leanne

+0

@leanne: To jest .NET 2.0, ale także testowałem .NET 3 i .NET 3.5 i .NET 4.0 również nie działają. –

+0

+1, ponieważ właśnie napotkałem ten sam problem i to pytanie jest przydatne! Ale technicznie jest to "klucz mnemoniczny", a nie klucz akceleracyjny? – MarkJ

Odpowiedz

2

Jest to normalne zachowanie .NET ("według projektu", mówią).

Oto artykuł, który powinien pomóc w rozwiązaniu problemu - nie prostym lub ładnej rozpocząć się, ale gdy to się robi, żadnych skrótów ustawione w górę może być łatwo dodana:

Building Keyboard Accelerators into .NET Windows Forms Applications - Code Guru

Zasadniczo , rozwiązanie to polega na utworzeniu klasy, wczytaniu tabeli mieszania i przesłanianiu ProcessCmdKey w celu skonfigurowania własnego programu obsługi akceleratora.

5

Możesz zmienić to zachowanie, wklejając ten fragment w swojej formie:

protected override bool ProcessDialogChar(char charCode) { 
     if ((Control.ModifierKeys & Keys.Alt) == Keys.None) return false; 
     return base.ProcessDialogChar(charCode); 
    } 

Nie 100% pewien, że to nie będzie mieć inne skutki uboczne, obsługi w WinForm klawiatura jest zawiłe delikatnie mówiąc.

+3

Dzięki, zrobiłem to samo zastępując ProcessMnemonicChar w kontroli, które otrzymują acceleratos. –

Powiązane problemy