Warum funktioniert das PreviewKeyDown-Ereignis aufgerufen werden, ein zweites mal, wenn IsInputKey eingestellt ist wahr?

VS2010 C# .Net 4.1

Arbeite ich an einem Formular, das der Benutzer muss wählen Sie oder geben Sie an, die anfänglichen Daten in eine ComboBox. Mit dem nachstehenden code, das dauerte einige Zeit, ableiten, die ich aktivieren Sie die Schaltfläche Bearbeiten, wenn der Benutzer trifft die Tab - Taste, wenn die Daten korrekt sind, andernfalls ist die Schaltfläche deaktiviert ist, wechselt er zur nächsten Taste.

Dieser code funktioniert, aber ein Nebeneffekt ist, dass die PreviewKeyDown Ereignis wieder Auftritt, wenn ich IsInputKey zu wahren. Diese fordert die Validierung zweimal. Die KeyDown Ereignis wird nur einmal aufgerufen, und die IsInputKey falsch ist wieder auf dem zweiten Anruf, so dass ich brauchen, um zu überprüfen, Validierung wieder.

Ich würde gerne verstehen, warum und möglichst zu vermeiden.

private void comboBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { 
  if (e.KeyData == Keys.Tab) { 
    if (ValidationRoutine()) { 
      e.IsInputKey = true;  //If Validated, signals KeyDown to examine this key 
    } //Side effect - This event is called twice when IsInputKey is set to true 
  }           
} 

private void comboBox1_KeyDown(object sender, KeyEventArgs e) { 
  if (e.KeyData == Keys.Tab) { 
      e.SuppressKeyPress = true; //Stops further processing of the TAB key 
      btnEdit.Enabled = true; 
      btnEdit.Focus(); 
  } 
} 
  • haben Sie versucht, entfernen Sie den code in das PreviewKeyDown und fügen Sie den code in ein anderes Ereignis-Handler.. PreviewKeyDown passiert / wird ausgelöst, bevor das eigentliche Ereignis KeyDown..
  • KRAZE-Dies ist, wo es braucht, um zu ermöglichen, um die Registerkarte " unterdrückt in der KeyDown-Ereignis. Wenn ich nicht surpress es verschiebt den Fokus zur nächsten Taste in der Reihenfolge, weil mein Ziel-Taste war nicht aktiviert in der Zeit. Ich kann eine volle Validierung anderswo und lassen eine einfache fahne für diesen test. Aber ich würde gerne wissen, warum es zweimal angerufen.
InformationsquelleAutor Rich Shealer | 2012-08-10
Schreibe einen Kommentar