2017-11-04 14 views
1

나는 0-9의 간단한 키패드, 지우기 단추 및 Enter 단추가 있습니다. 숫자를 클릭하면 내용이 PasswordBox에 저장됩니다. 지우기 버튼을 클릭하면 백 스페이스를 시뮬레이션하고, Enter 버튼은 미리 정의 된 4 자리 코드를 제출하는 역할을합니다. 올바른 코드를 입력하면 액세스가 허가되었음을 나타내는 텍스트 상자에 추가되고 그렇지 않으면 액세스가 거부됩니다.입력이 키보드 대신 Button.Content 인 경우 PasswordBox에 MaxLength를 설정하는 방법은 무엇입니까? (WPF)

The WPF Application

나는 PasswordBox의의 최대 길이를 설정하려고 할 때를 제외하고 아무런 문제가없는입니다.

<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에서 그것을 시도

securityCodeTextBox.MaxLength = 4; 

이 숫자 버튼 내 기능의 유일한 코드 :

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

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

코드를 잘못 입력하면 그 아래의 텍스트 상자에 "액세스가 거부되었습니다"라는 메시지 만 표시되므로 구현할 필요가 없습니다. 그러나, 나는 MaxLength가 키보드 입력에 대한 것이고, 버튼 클릭이 아니라는 것을 깨닫고 나서 이것을하는 방법에 정말로 흥미가 있습니다. 나는 길이가이 코드 조각으로> = 4에 도달하면 버튼을 지우기 제외한 모든을 사용하지 않도록 설정하고 입력 할 수있는 매우 조잡한 방법을 만들어

//Prevent keyboard input 

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

다음 시도 : 저는 현재 키보드는 완전히와 비활성화 인분 지우기 버튼 클릭 기능에 :

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

환영합니다. 내 뇌는 항상 그런 코드를 생성합니다. :디 – Jan