2016-09-18 9 views
1

전화 번호에 대해 자동 서식을 구현하려고하는 텍스트 상자가 있습니다.C# 텍스트 상자에서 마지막 두 문자 제거

사용자가 삭제 키를 누르고 텍스트 상자의 문자열의 마지막 문자가 '-' 인 경우 텍스트 상자의 마지막 두 문자를 제거하고 싶습니다.

부분 문자열 제거를 통해이 작업을 시도했지만 행운이 없습니다. 감사합니다.

private void phoneNumberTextBox_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.Back) 
      { 
       if (phoneNumberTextBox.Text.Length != 0) 
       { 
        if (Convert.ToChar(phoneNumberTextBox.Text.Substring(phoneNumberTextBox.Text.Length - 1)) == '-') 
        { 
         phoneNumberTextBox.Text.Substring(0, phoneNumberTextBox.Text.Length - 2); 
        } 
       } 
      }  
+1

http://www.visual-basic-tutorials.com/Tutorials/Controls/MaskedTextBox.html – Slai

답변

2

Substring()은 현재 문자열 인스턴스를 반환하고 현재 인스턴스는 변경하지 않습니다. 이 때문에, 당신의 전화는 단지 새로운 임시 문자열을 생성하지만 당신이 그것으로 아무것도하지 않기 때문에, 즉시 폐기됩니다. 당신이 짧은 문자열을 처리하는 문제를 방지하기 위해 먼저 문자열의 길이를 확인해야합니다

phoneNumberTextBox.Text = phoneNumberTextBox.Text.Substring(0, 
    phoneNumberTextBox.Text.Length - 2); 

:

당신이 텍스트 상자에 다시 Substring()의 결과를 할당과 같이 할 필요가 변경 스틱을 만들려면 (2 자 미만).

또한 텍스트 상자의 문자 수를 제한하려면 MaxLength 속성을 대신 사용하십시오. 길이를 처리하고 그런 식으로 타이핑 할 필요가 없습니다. 2 문자 제거를위한

+0

이것은 매력처럼 작동했습니다! 감사. 이제 작업이 완료 될 때 텍스트 커서가 텍스트 상자의 시작 부분으로 이동하는 문제가 있습니다. –

+0

@AlexEdwards 문자열 길이를 줄이면 발생합니다. 캐럿은 유효하지 않은 위치에 있으므로 문자열의 시작 부분으로 이동합니다. 왜 그냥 텍스트 상자의 'MaxLength' 속성을 설정하지 않습니까? – xxbbcc

+0

@AlexEdwards'MaxLength'에 대한 링크를 추가했습니다 - 당신을 위해 더 잘 작동 할 것입니다. – xxbbcc

2

은 할 수 :

phoneNumberTextBox.Text = phoneNumberTextBox.Text.Remove(phoneNumberTextBox.Text.Length - 2, 2); 

을 키 누름의 경우 당신은 당신이 양식의 KeyPreview 수 있도록해야한다는 수 있습니다.

와우는 실수로 편집을하고 있습니다.

관련 문제