2017-01-08 4 views
-1
if (int.Parse(q.textBoxNumberOfEmployees.Text) < 15) 
     { 
      Rect1.Fill = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)); 
     } 

シナリオ出た後、型「にSystem.FormatException」の未処理の例外:メインウィンドウと子ウィンドウを、mainWindowButtonは、子ウィンドウを開き、ユーザーが情報を入力すると、ユーザが情報を入力したとき、子ウィンドウが閉じ、メインウィンドウには四角形が表示されます。すべてが動作します! しかし、子ウィンドウの「x」をクリックしてウィンドウを手動で閉じると、このエラーが表示されます。私は私のような以前の質問で答えを探しましたが、まったく問題はありません。アプリ

すべてのコードは、ユーザがq.textBoxNumberOfEmployeesに整数を入力していないので、あなたがそれを処理する必要がある可能MainWindowButton_ClickEvent

+1

だけあなたは上記の持っているものに基づいて推測 - 最初の容疑者は '想定される'ユーザエントリが 'int'として解析できない' int.Parse'でしょう。 'int.TryParse'を見てください。 Hth – EdSF

+0

はい、これは正しい方向に進んでいます。これは、ユーザーが空白を解析できない番号(情報が必要)を入力していないためです。しかし、私はそれを修正して、これ以上のものが11個あるので、すべてを変更することはできません! – AlexDev

+0

if文をtry/catchブロックでラップしてみてください。私はあなたの子供のウィンドウint.TryParseから抜け出すときに賭けているnull値を解析しようとしている、整数はnullにすることはできません。 –

答えて

1

私はあなたのOPで行われたコメントを受けて、私はそれを使用するために実際にはかなり簡単です、あなたのためにそれを書き出してみますが:

try 
    { 
     if (int.Parse(q.textBoxNumberOfEmployees.Text) < 15) 
     { 
      Rect1.Fill = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)); 
     } 
    } 
    catch(System.FormatException ex) //This code will be executed because a System.FormatException was thrown 
    { 
     //write the error message to the console (optional) 
     Console.WriteLine(ex.Message); 

     //You can write whatever code you'd like here to try and combat the error. 
     //One possible approach is to just fill Rect1 regardless. Delete the 
     //code below if you would not like the exception to fill Rect1 
     //if this exception is thrown. 

     Rect1.Fill = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)); 
    } 
+0

この例でtry/catchでエラーが発生しても、入力文字列が不正な形式であると言われています。 私はちょうど情報を入力せずに手動でウィンドウを閉じることができるようにしたい。たぶん私はエラーセンターでDateTime – AlexDev

+0

について "DateTimeに文字列を変換すると..."と言わなければならないでしょう。 – AlexDev

+0

元の投稿に投稿したコードのように聞こえるのは実際問題ではありません。問題が文字列をDateTimeに変換している場合は、コード内の別の場所で発生している必要があります。あなたはそのコードを投稿できますか? –

2

です。

アプローチ2

のみthis回答に示すように、ユーザは、テキストボックスに数字を入力することを可能にする1つの

var numOfEmployees; 

if (!int.TryParse(q.textBoxNumberOfEmployees.Text, out numOfEmployees)) 
{ 
    // What do you want to do? The user did not enter an integer. 
} 

// Proceed normally because user entered integer and it is stored in numOfEmployees 

アプローチ。あなたは複数の場所でそのチェックをしているので、私はこれだけのために番号を許可するためのユーザーコントロールを作成します。その後、必要な場所ごとにそのユーザーコントロールを使用します。どのアプローチを使いたいかはあなた次第です。

+0

大丈夫、これを試してif文私はq.Close()をタイプしました。 qが子ウィンドウで、例外がまだポップアップしている、多分私は別のものを入力する必要がありますか? – AlexDev

+0

申し訳ありませんあなたの質問を理解できませんか?あなたがq.CLose()をタイプしたらどういう意味ですか? – CodingYoshi

+0

あなたが私がif文で私に与えたコードは、子ウィンドウを閉じるためにclose()メソッドを使用しました。これは、ユーザーが「x」に当たってウィンドウを閉じる情報 – AlexDev