2017-04-24 16 views
1

3つのテキストボックスを持つWindowsフォームアプリケーションがあります。最初のテキストボックスのテキストが0の場合、他の2つのテキストボックスは読み取り専用に設定されます。最後のテキストボックスは読み取り専用で、2の場合はすべてのテキストボックスが編集可能です。他のテキストに依存するC#テキストボックス読み取り専用

私のコードは動作しますが、私は値を入力して、それをプログラムがクラッシュを変更した場合、どのように私はこの問題を解決することができますか?

ここでは、値に応じて(Tusk1Length)と(Tusk2Length)の読み取り専用プロパティを変更する最初のテキストボックス(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

ありがとう、素晴らしい作品 –

関連する問題