Obsługa kombinacji klawiszy

Na pierwszy rzut oka może się wydawać, że Silverlight nie pozwala na „przechwytywanie” i obsługę wciskania wielu klawiszy jednocześnie np: CTRL + C, ALT + X itd. Ale to tylko pierwsze wrażenie. Poniżej opiszę jak radzić sobie z tym problemem.

Jeden klawisz

Obsługa jednego klawisza jest dziecinnie prosta. Wpinamy się interesującej nas kontrolce w zdarzenie KeyDown lub KeyUp, a następnie analizujemy argument KeyEventArgs:

private void myControl_KeyDown(object sender, KeyEventArgs e)
{
	if (e.Key == Key.Escape)
	{
		e.Handled = true;
		// ESC was pressed!
		// close window
	}
}

Typ Key jest enum’em, który zawiera litery, cyfry, znaki, klawisze specjalne i inne. Ale co jeśli potrzebujemy funcjonalność a’la copy & paste?

Kombinacje klawiszy

Aby obsługiwać kombinacje klawiszy typu: CTRL+F (szukaj) musimy nieco zmodyfikować nasz kod obsługi zdarzenia KeyDown/KeyUp i użyć Keyboard Modifiers:

private void myControl_KeyDown(object sender, KeyEventArgs e)
{
	if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.F)
	{
		e.Handled = true;
		// CTRL + F was pressed!
		// find something
	}
}

Zobacz też

2 thoughts on “Obsługa kombinacji klawiszy

  1. Pingback: dotnetomaniak.pl

  2. Post ten wypada uzupełnić o następujące wiadomości
    Enum Key zawiera tylko małą część wszystkich znaków z klawiatury. Ale da się to obejść przez właściwość PlatformKey parametru typu KeyEventArgs. Dodatkowo nie KeyDown działa tak jakby się tego oczekiwało (np. KeyDown potrafi nie widzieć Delete i BackSpace) Wtedy przydatna jest metoda:
    AddHandler(FrameworkElement.KeyDownEvent, new KeyEventHandler(MetodaObsługi), true);

Możliwość komentowania jest wyłączona.