2017-11-04 8 views
1

私は0-9の単純なキーパッド、クリアボタン、Enterボタンを持っています。数字をクリックすると、コンテンツがPasswordBoxに配置されます。 [クリア]ボタンをクリックするとバックスペースがシミュレートされ、[入力]ボタンは定義済みの4桁のコードの送信として機能します。正しいコードを入力すると、アクセスが許可されたことを示すテキストボックスに追加されます。それ以外の場合はアクセスが拒否されます。入力がKeyboardではなくButton.Contentの場合、PasswordBoxでMaxLengthを設定するにはどうすればよいですか? (WPF)

The WPF Application

私はPasswordBox上のMaxLengthを設定しようとしたとき以外は問題を抱えていないのです。

private void ButtonClickNum(object sender, RoutedEventArgs e) 
    { 
     Button button = (Button)sender; 

     securityCodeTextBox.Password += button.Content.ToString(); 
    } 
:これは、数字ボタンのための私の関数内のコードのみです

securityCodeTextBox.MaxLength = 4; 

:私も使って、プログラムを試してみた

<PasswordBox PasswordChanged="securityCodeTextBox_PasswordChanged" MaxLength="4" KeyDown="securityCodeTextBox_KeyDown" x:Name="securityCodeTextBox" PasswordChar="•" HorizontalAlignment="Left" Margin="117,20,0,0" VerticalAlignment="Top" Height="23" Width="213"/> 

:私は私のXAMLでそれを試してみました

コードが間違っていると、その下のテキストボックスに「アクセス拒否」だけが記録されるため、これを実装する必要はありません。しかし、私は実際にMaxLengthがキーボード入力のためのものであり、ボタンのクリックではないことを認識した後にこれを行う方法について本当に興味があります。私は長さがこれらのコードスニペットで> = 4に達した場合、ボタンをクリア残してすべてを無効にして、入力するには非常にずさんな方法で作成

//Prevent keyboard input 

    private void securityCodeTextBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     e.Handled = true; 
    } 

次の試み:私は現在、キーボードは完全に無効にしていますnumとクリアボタンをクリックして機能で:

private void ButtonClickNum(object sender, RoutedEventArgs e) 
    { 
     Button button = (Button)sender; 

     securityCodeTextBox.Password += button.Content.ToString(); 

     //Disable all buttons if MaxLength is reached 

     if(securityCodeTextBox.Password.Length >= 4) 
     { 
      button0.IsEnabled = false; 
      button1.IsEnabled = false; 
      button2.IsEnabled = false; 
      button3.IsEnabled = false; 
      button4.IsEnabled = false; 
      button5.IsEnabled = false; 
      button6.IsEnabled = false; 
      button7.IsEnabled = false; 
      button8.IsEnabled = false; 
      button9.IsEnabled = false; 
     } 

    } 

クリアボタン

/** 
    * Remove(int startIndex, int count) startIndex = position, count = num of chars to delete 
    */ 
    private void ButtonClickClear(object sender, RoutedEventArgs e) 
    { 

     if (securityCodeTextBox.Password.Length > 0) 
     { 
      securityCodeTextBox.Password = securityCodeTextBox.Password.Remove(securityCodeTextBox.Password.Length - 1, 1); 
     } 
     //Enable all the buttons again once password is less than MaxLength 

     if (securityCodeTextBox.Password.Length < 4) 
     { 
      button0.IsEnabled = true; 
      button1.IsEnabled = true; 
      button2.IsEnabled = true; 
      button3.IsEnabled = true; 
      button4.IsEnabled = true; 
      button5.IsEnabled = true; 
      button6.IsEnabled = true; 
      button7.IsEnabled = true; 
      button8.IsEnabled = true; 
      button9.IsEnabled = true; 
     } 
    } 

入力がボタンのコンテンツである場合、MaxLengthメソッドを実装するためのよりクリーンな方法がありますか?

答えて

0

以前はWPFやパスワード入力コントロールで作業したことがありませんでしたが、これを試してみましたが、長さに達するとパスワードを追加することはありません。

private void ButtonClickNum(object sender, RoutedEventArgs e) 
    { 
     Button button = (Button)sender; 

     if(securityCodeTextBox.Password.Length < 4) 
      securityCodeTextBox.Password += button.Content.ToString();    
    } 
+0

うわー....すべての無関係なコードは何のためにもありませんでした。なぜ私が最初にこれをやっていないのか分かりません。ありがとうございました。 – IRGeekSauce

+0

あなたは大歓迎です、私の脳は常にそのようなコードを生成します。 :D – Jan

関連する問題