2017-11-14 7 views
1

私はwinformsアプリケーションを作成しようとしています。何かがクリックされたときに、Webページの応答をチェックします。C#else if文を無視する

私はそれがPHPエラーであるかどうかを確認するためにウェブページをテストしましたが、それはその側からうまく動作します。

else if文を完全に無視し、応答が "未割り当て"であってもその下のelse文にスキップします。

private void button1_Click(object sender, EventArgs e) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://fms.psrpc.co.uk/apiconfirmD.php?" + ApiKey); 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

     using (response) 
     { 
      StreamReader reader = new StreamReader(response.GetResponseStream()); 
      if (reader.ReadToEnd() == "Changed") 
      { 
       label2.Visible = false; 
       button1.Enabled = false; 
       button2.Enabled = true; 
       button3.Enabled = true; 
       button4.Enabled = true; 
       button5.Enabled = true; 
       button6.Enabled = true; 
       button7.Enabled = true; 
       button8.Enabled = true; 
       timer1.Enabled = true; 
      } 
      else if (reader.ReadToEnd() == "Unassigned") 
      { 
       string message = "Error Code: [email protected]@Error booking [email protected] make sure you have been assigned to a [email protected]@If this error persists please contact K.McCrudden."; 
       message = message.Replace("@", "" + System.Environment.NewLine); 
       string title = "Error!"; 

       MessageBoxButtons buttons = MessageBoxButtons.OK; 
       DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2); 
      } 
      else 
      { 
       string message = "Error Code: [email protected]@Error booking [email protected] make sure you have booked a shift and have been [email protected]@If this error persists please contact K.McCrudden."; 
       message = message.Replace("@", "" + System.Environment.NewLine); 
       string title = "Error!"; 

       MessageBoxButtons buttons = MessageBoxButtons.OK; 
       DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2); 
      } 
     } 
    } 
+3

文が場合はスキップされない単純ではありません。私は 'reader.ReadToEnd()==" Unassigned "が実際に何を評価しているかを再確認してほしい。 – Carcigenicate

+8

'ReadToEnd()'を一度呼び出した後、2回目の呼び出しが何を返すと思いますか?ヒント:あなたは読者の最後まで読んでいます*。それ以外に何があるのでしょうか? 2番目のヒント:たぶんあなたは 'ReadToEnd()'を一度呼び出す必要があり、結果を文字列変数に格納する必要があります。 –

+0

@JonSkeet Doh。私はそれをキャッチしていない恥ずかしいです。 – Carcigenicate

答えて

4

いいえ、それは無視されていない:

は、ここに私のコードです。最初のifブロック内のすべてのデータを読むには、reader.ReadToEnd()を呼び出してください。このようにして、else ifステートメントで読み取ることができるデータはありません。空の文字列を返します。したがって、条件が一致せず、最後のブロックelseが実行されます。

コードを次のように変更します。以下のコードで一時的なdata変数に注目してください。

StreamReader reader = new StreamReader(response.GetResponseStream()); 
string data = reader.ReadToEnd();//Read the data in temp variable. 
//Use this variable to check the conditions further. 
if (data == "Changed") 
{ 
    //Your code here 
} 
else if (data == "Unassigned") 
{ 
    //Your code here 
} 
else 
{ 
    //Your code here 
} 
+0

これは完璧に働いてくれてありがとうございます:) – KjayCopper

+0

私は、タイマーがあると思います.2分後にそれを受け入れるように制限しています。 – KjayCopper

2

一般的なロジックに誤りがあります。最初のif文を入力すると、コードreader.ReadToEnd()でストリームの終わりまで読み込みます。次のステートメント(else)では、ストリームをもう一度読み込んでいますが、すでに読み込まれているため、空の文字列が返されるため、最後のelseステートメントが効果的にヒットします。

また、MSDN:StreamReader.ReadToEnd() Methodでこれについて読むことができます。戻り値の

定義:最後まで現在位置から文字列としてストリームの

残り、。現在の位置がストリームの終わりにある場合、空の文字列( "")を返します。

あなたのコードは次のようになります。

StreamReader reader = new StreamReader(response.GetResponseStream()); 
var result = reader.ReadToEnd(); 

if(result == "Changed") 
{ 
    label2.Visible = false; 
    button1.Enabled = false; 
    button2.Enabled = true; 
    button3.Enabled = true; 
    button4.Enabled = true; 
    button5.Enabled = true; 
    button6.Enabled = true; 
    button7.Enabled = true; 
    button8.Enabled = true; 
    timer1.Enabled = true; 
} 
else if(result == "Unassigned") 
{ 
    string message = "Error Code: [email protected]@Error booking [email protected] make sure you have been assigned to a [email protected]@If this error persists please contact K.McCrudden."; 
    message = message.Replace("@", "" + System.Environment.NewLine); 
    string title = "Error!"; 

    MessageBoxButtons buttons = MessageBoxButtons.OK; 
    DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2); 
} 
else 
{ 
    string message = "Error Code: [email protected]@Error booking [email protected] make sure you have booked a shift and have been [email protected]@If this error persists please contact K.McCrudden."; 
    message = message.Replace("@", "" + System.Environment.NewLine); 
    string title = "Error!"; 

    MessageBoxButtons buttons = MessageBoxButtons.OK; 
    DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2); 
}