2016-03-30 18 views
-1

このコードについて何か怪しいものがあり、解決方法がわかりません。c#TextBoxの問題、引数を取得できません

基本的player.Nameが変更テキストボックスから引数を取得し、それに挿入するが、それはそのような何かをdoesntのようだ...それともイムはそれを間違った方法を確認する...

private void textBox1_TextChanged(object sender, EventArgs e) 
     { 
      Player player = new Player(); 
      player.Name = textBox1.Text; //Problematic line 
     } 

     private void Button_Start_Click(object sender, EventArgs e) 
     { 
      Player player = new Player(); 

      switch (player.Name.ToUpper()) 
      { 
       case "N/A": Label_Question.Text = "Please set your name!"; break; 
       default: Label_Question.Hide(); goto QuizStart; 
      } 
      QuizStart: 
      { 

      } 

     } 
必要があります
+2

あなたは、それは常にデフォルト値を持つことになりますPlayer'毎回 'の新しいインスタンスを作成しています。プライベートなクラスメンバーにしましょう。私は役に立たない 'goto'や単に' if'( 'String.Equals()'を使ったBTWの文字列比較)という 'switch' /' case'を言及していません。 –

+1

問題は、あなたの 'Player'インスタンスをクラススコープではなくメソッド/イベントスコープにすることです。また、*** GOTOを使用しないでください!!!! *** – Ian

+0

@AdrianoRepettiをちょうどポストは答えとしてある... –

答えて

0

私はではなく、単一のButton_Start_Clickにすべてを詰め込む方法を抽出勧め:

private Boolean IsPlayerValid(Player player) { 
    if (null == player) 
     return false; 

    if (String.Equals("N/A", player.Name, StringComparison.OrdinalIgnoreCase)) { 
     Label_Question.Text = "Please set your name!"; 

     return false; 
    } 

    //TODO: you may want add up conditions here 

    return true; 
    } 

    private void Button_Start_Click(object sender, EventArgs e) { 
    Player player = new Player() { 
     player.Name = textBox1.Text // you may want this - assign a player's Name 
    }; 

    if (!IsPlayerValid(player)) 
     return; 

    Label_Question.Hide(); 

    // Quiz Start 
    } 
+0

わずかな問題があり、クラッシュし、このエラーが発生しました 'System.NullReferenceException'型の未処理の例外がQuiz.exeで発生しました 追加情報:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 –

+0

心配しないで!できます!おかげで仲間に! <3 –

2

問題は、textchangedイベントとbutton pressイベントの両方で "Player"の新しいインスタンスを作成していることです。つまり、ボタンを押すプレーヤーは常に空です。このような

何かがあなたのために物事を修正する必要があります。

Player player; 

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     player = new Player(); 
     player.Name = textBox1.Text; //Problematic line 
    } 

    private void Button_Start_Click(object sender, EventArgs e) 
    { 
     switch (player.Name.ToUpper()) 
     { 
      case "N/A": 
       Label_Question.Text = "Please set your name!"; 
       return; 
      default: 
       Label_Question.Hide(); 
       break; 
     } 
    } 

か、なぜ(あなたがここでは示されていないコードに他の何かをしたい場合を除き)すべて一緒にtextchangedスキップしない:

Player player; 

    private void Button_Start_Click(object sender, EventArgs e) 
    { 
     player = new Player(); 
     player.Name = textBox1.Text; 

     switch (player.Name.ToUpper()) 
     { 
      case "N/A": 
       Label_Question.Text = "Please set your name!"; 
       return; 
      default: 
       Label_Question.Hide(); 
       break; 
     } 
    } 

EDIT:厄介なGOTO文も取り除くためのコードを変更しました。

+0

私はgotoを削除しました(私の悪い、それについてはあまり敬遠しませんでした。 – JaggenSWE

+1

うわー!おかげで仲間になりました! –

関連する問題