2016-07-22 6 views
1

Ich habe nächste Ausgabe, ich arbeite an kleinen C# -WPF-Anwendung, und beim Laden bin ich deaktivieren Schaltfläche, die Ussualy verwendet wird, um einige Aktion auf klicken, und es sieht dies wie:C# Wenn Button IsEnabled, sein auslösendes Ereignis bei Klick

public MainWindow() 
{ 
    InitializeComponent(); 

    this.WindowStartupLocation = WindowStartupLocation.CenterScreen; 

    if (String.IsNullOrEmpty(password.Password)) 
    { 
     btnActivate.IsEnabled=false; 
    } 
} 

und irgendwo ich mein Passwort Feld bin Überprüfung, zum Beispiel:

private void password_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key.Equals(Key.Enter)) 
    { 
     if (password.Password == "drag0n") 
     { 
      btnActivate.IsEnabled = true; 
     } 
     else 
     { 
      btnActivate.IsEnabled = false; 
     } 
    } 
} 

und mein Problem ist, als nächstes, wenn Benutzer "drag0n" eingeben und drücken Sie die Eingabetaste, Taste nur aktiviert werden soll, aber es ist nicht nur aktiviert, seine automatische Ruffunktion ist seine Ereignis _Click, ich weiß nicht, warum das passiert, denn in diesem Fall, wenn meine Schaltfläche gerade aktiviert ist Ereignis _Click wird auch aufgerufen, und wenn Benutzer auf diese Schaltfläche klickt, wird Ereignis erneut aufgerufen, so tatsächlich mein Ereignis onclick aufgerufen wird zweimal.

Meine Frage ist, wie kann ich aufhören, mein Click-Ereignis aufzurufen, wenn ich IsEnabled=true setze. Wenn ich IsEnabled=true setze, möchte ich nur, dass es zum Drücken aktiviert ist und ich möchte das Ereignis _Click nicht ausführen. Ich möchte Ereignis _Click nur ausführen, wenn meine Taste gedrückt wird, wie es funktionieren sollte und nicht auf IsEnabled=true.

Danke Jungs, Beifall

+4

die als Standard markiert Taste? Wenn dies der Fall ist, wird das Click-Ereignis möglicherweise aufgrund der gedrückten Eingabetaste automatisch ausgelöst. Versuchen Sie, die Eigenschaft 'IsDefault' der Schaltfläche auf 'false' zu setzen. Oder wenn Sie nicht möchten, können Sie "e.Handled" auf "true" setzen, wenn Sie die Schaltfläche auf "enabled" setzen, damit das KeyEvent nicht weiter aufblubbert. – GregaMohorko

Antwort

3

auf Click-Ereignis tritt ein, wenn Sie Taste drücken Sie die Eingabetaste, da diese Taste die Steuerung in einer Form Standard ist.

Wenn Sie kein Klickereignis auf die Eingabetaste drücken möchten, sollten Sie diese Schaltfläche nicht als Standard definieren oder nicht verarbeiten. Die Eingabetaste drücken und dann auf klicken (e.Handled = true -> wenn Enter gedrückt wird).

Oder versuchen Sie den Code zu ändern:

private void password_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key.Equals(Key.Enter)) 
    { 
     if (password.Password == "drag0n") 
     { 
      e.Handled = true; // add this line 
      btnActivate.IsEnabled = true; 
     } 
     else 
     { 
      btnActivate.IsEnabled = false; 
     } 
    } 
} 
+0

Ja, ich habe das genau so gemacht und das Problem ist gelöst! Danke Leute! –