Problem mit OnKeyDown

xbu58

Mitglied
Hallo

Ich habe mir eine Selector-Komponente geschrieben, mit der ich Bildteile auswählen kann. Die Komponente ist von Control abgeleitet. Soweit funktioniert alles, solange ich mit der Maus den Selector bediene. Nun möchte ich aber auch mit der Tastatur den Selector verschieben oder vergrössern/verkleinern können. Dazu habe ich die Methode OnKeyDown überschrieben. Auch das funktionert, solange ich die Pfeiltaste mit Kontrol, Alt oder Shift kombiniere. Wenn ich jedoch die Pfeiltasten verwende, ohne dass ich eine der Umstallt-Tasten verwende, wird die Methode nicht aufgerufen.
Code:
    protected override void OnKeyDown(KeyEventArgs e)
    {
      switch (e.KeyCode)
      { 
        case Keys.Left:
          if (e.Control)
            System.Media.SystemSounds.Beep.Play();
          else
            System.Media.SystemSounds.Exclamation.Play();
          break;
        default:
          base.OnKeyDown(e);
          break;
      }
    }
Was ich festgestellt habe ist, dass dann der Fucus auf eine anderes Objekt wechselt, anstatt dass die Methode aufgerufen wird.
Nun die Frage: Weiss jemand, wie man einem Control beibringen kann, dass das nicht mehr passiert?

Danke und Gruss
Xaver
 
... das kannst du mit
C#:
private void xxx_KeyPress(object sender, KeyPressEventArgs e)

Anhand vom KeyPressEventArgs kannst du jede Taste abfragen. Siehe Anhang.
Ich würde dir überhaupt empfehlen mit KeyPress zu arbeiten.


ksk
 

Anhänge

  • keyChar.jpg
    keyChar.jpg
    18,8 KB · Aufrufe: 18
Hallo ksk

Besten Dank für Deine Antwort. Ich war in den letzten 3 Wochen im Ausland und konnte deshalb nicht antworten.

Die Methote, welche Du vorschlägst, habe ich schon versucht, hat aber nicht geklappt, da sie (wie ich festgestellt habe) nicht alle Key-Ereignisse weiterleitet. Ich habe jedoch eine andere Methode gefunden, mit der es funktioniert.
Code:
protected override void OnPreviewKeyDown(PreviewKeyDownEvent Args e)
{}
Mit dem Überschreiben dieser Methode kann man alle Key-Ereignisse abfangen und behandeln.

Nochmals Danke und Gruss
Xaver
 
Zurück