2017-04-24 1 views
1

3 개의 텍스트 상자가있는 Windows 양식 응용 프로그램이 있습니다. 첫 번째 텍스트 상자의 텍스트가 0이면 다른 두 개의 텍스트 상자는 읽기 전용으로 설정되고 1이면 마지막 텍스트 상자는 읽기 전용이고, 2이면 모든 텍스트 상자를 편집 할 수 있습니다.다른 텍스트에 의존하는 C# 텍스트 상자 읽기 전용

내 코드가 작동하지만 값을 입력 한 다음 프로그램을 변경하면 프로그램이 어떻게 종료됩니까?

여기는 (Tusk1Length) 및 (Tusk1Length)의 읽기 전용 속성과 값에 따라 읽기 전용 속성을 변경하는 첫 번째 텍스트 상자 (NumberOfTusks)에 대한 코드입니다.

private void NumberOfTuskstxt_TextChanged(object sender, EventArgs e) 
    {    
      if (int.Parse(NumberOfTuskstxt.Text) == 0) 
      { 
       Tusk1Lengthtxt.Text = "N/A"; 
       Tusk1Lengthtxt.ReadOnly = true; 
       Tusk2Lengthtxt.Text = "N/A"; 
       Tusk2Lengthtxt.ReadOnly = true; 
      } 
      else if (int.Parse(NumberOfTuskstxt.Text) == 1) 
      { 
       Tusk1Lengthtxt.Text = ""; 
       Tusk1Lengthtxt.ReadOnly = false; 
       Tusk2Lengthtxt.Text = "N/A"; 
       Tusk2Lengthtxt.ReadOnly = true; 
      } 
      else 
      { 
       Tusk1Lengthtxt.Text = ""; 
       Tusk1Lengthtxt.ReadOnly = false; 
       Tusk2Lengthtxt.Text = ""; 
       Tusk2Lengthtxt.ReadOnly = false; 
      } 
    } 

나는 NumberOfTusks에 1 입력 한 다음, 2 코드 충돌 값을 변경하고 나에게 충돌 "이" " 'System.FormatException이'가 mscorlib.dll에서 발생 유형의 처리되지 않은 예외"를 제공하는 경우 내가 백 스페이스를 치면 일어난다. 어떻게하면 값을 변경하면 충돌하지 않도록 수정할 수 있습니까?

+1

숫자가 아닌 다른 값으로 변경 하시겠습니까? 그게 당신에게 확실히 문제가 될 것입니다. 당신은 적어도 당신의 입력이 매번 정수가 될 것이라고 가정하는 대신에'int.TryParse'를 사용해야합니다. –

+0

입력은 int로 유지됩니다. 1에서 2로 변경하면 충돌이 발생합니다. –

+0

아니요, 댓글이 잘못되었습니다. 입력이 int를 유지하지 않습니다. 프로세스에서 문자를 삭제하고 있으므로 입력을 2로 설정하기 전에' ""'가됩니다. –

답변

1

그것은 당신이 백 스페이스를 명중하고 효과적으로 형식의 예외를 던지고 어떤 것

if (int.Parse("") == 0) 

을 수행 할 때 오류가 발생한처럼 들린다. 난 당신이 아마 또한 숫자가 아닌 사용자의 입력을 방지하기 위해 TryParse보다는 구문 분석을 사용할 수 있습니다 DangerZone's 의견을 피기 백하려면

if (!string.IsNullOrEmpty(NumberOfTuskstxt.Text)) 
{ 
    //Your existing code goes here 
} 
else 
{ 
    //Handle the blank textbox 
} 

뭔가를 확인하시기 것입니다.

+0

감사합니다. 훌륭한 작품입니다. –

관련 문제