2016-07-22 10 views
1

次の問題がありますが、小さなC#-wpfアプリケーション に取り組んでいます。クリックするといくつかのアクションを実行するためにussualyボタンが無効になっていますC#Button IsEnabledの場合、クリック時のトリガーイベント

public MainWindow() 
{ 
    InitializeComponent(); 

    this.WindowStartupLocation = WindowStartupLocation.CenterScreen; 

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

とどこかに私は例えば、私のパスワードフィールド、チェックしています:

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; 
     } 
    } 
} 

をそして、私の問題は、ユーザーが"drag0n"を入力し、Enterキーを押しますと、ボタンがちょうど有効にする必要があり、次のですが、このようなその有効化だけでなく、その呼び出しを自動的にイベント_Click、私はなぜそのようなことが起こっているのかわかりません。その場合、私のボタンが有効になっている場合は_Clickというイベントが呼び出され、ユーザーがそのボタンをクリックすると再びイベントが呼び出されるので、実際には私のイベントonclickが呼び出されます二度。

私の質問は、IsEnabled=trueを設定すると、私のClickイベントの呼び出しを止める方法です。 IsEnabled=trueを設定すると、そのボタンを押すことが有効になりたいので、イベント_Clickを実行したくありません。 _Clickイベントは、ボタンが押されたときにのみ実行したい場合は、IsEnabled=trueには動作しません。 Enterキーを押すと、このボタンはフォームのデフォルトの制御であるため、

みんなありがとう、 乾杯

+4

は、デフォルトとしてマークボタンですか?もしそうなら、押されたEnterのためにClickイベントが自動的に発生しているかもしれません。ボタンの 'IsDefault'プロパティをfalseに設定してみてください。または、したくない場合は、ボタンを有効にしたときに 'e.Handled'をtrueに設定すると、KeyEventのバブリングが停止します。 – GregaMohorko

答えて

3

クリックイベントでは、発生します。

Enterキーでクリックイベントが発生しないようにするには、このボタンをデフォルトにしないか処理しないでください。ボタンを押してEnterキーを押します(Enterを押したときにe.Handled = true - >をクリック)。

またはあなたのコードを変更しよう:

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

はい私はそれをexaclyのようにして、問題は解決されました!みんなありがとう! –

関連する問題