나는 0-9의 간단한 키패드, 지우기 단추 및 Enter 단추가 있습니다. 숫자를 클릭하면 내용이 PasswordBox에 저장됩니다. 지우기 버튼을 클릭하면 백 스페이스를 시뮬레이션하고, Enter 버튼은 미리 정의 된 4 자리 코드를 제출하는 역할을합니다. 올바른 코드를 입력하면 액세스가 허가되었음을 나타내는 텍스트 상자에 추가되고 그렇지 않으면 액세스가 거부됩니다.입력이 키보드 대신 Button.Content 인 경우 PasswordBox에 MaxLength를 설정하는 방법은 무엇입니까? (WPF)
나는 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 메서드를 구현하는 더 깨끗한 방법이 있습니까?
와우 .... 그 외계인 코드는 아무 것도 없었습니다. 내가 왜 이것을하지 않았는지 모르겠다. 고맙습니다. – IRGeekSauce
환영합니다. 내 뇌는 항상 그런 코드를 생성합니다. :디 – Jan