c#文本框问题,无法获取参数

c#文本框问题,无法获取参数,c#,C#,这段代码似乎有些可疑,我不知道如何解决它 基本上,player.Name应该更改文本框中的参数并将其插入其中,但它似乎没有这样做。。。或者也许我查错了方向 private void textBox1_TextChanged(object sender, EventArgs e) { Player player = new Player(); player.Name = textBox1.Text; //Problematic lin

这段代码似乎有些可疑,我不知道如何解决它

基本上,player.Name应该更改文本框中的参数并将其插入其中,但它似乎没有这样做。。。或者也许我查错了方向

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:
            {

            }

        }

问题是,您正在textchanged和button press事件上创建一个新的“Player”实例,这意味着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;
        }
    }
或者为什么不一起跳过文本更改(除非您想在代码中执行此处未显示的其他操作):

编辑:更改了代码以摆脱讨厌的GOTO语句。

我建议提取一个方法,而不是将所有内容塞进单个
按钮\u Start\u单击

  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
  }

每次创建
Player
的新实例时,它将始终具有默认值。使其成为私人类成员。我没有提到无用的
goto
开关
/
大小写
,它只是一个
if
(顺便说一句,使用
string.Equals()
)进行字符串比较。问题是你没有将
播放器
实例设置为类范围,而是将方法/事件范围设置为类范围。另外,不要使用GOTO@AdrianoRepetti刚刚发布的帖子就是答案…你也可能不需要每次用户按下一个新的播放器key@FeDe只有几行,我认为这个问题在将来对任何人都没有帮助…我删除了goto(我的错,没有考虑太多,尽管它“没用”)。只是一个小问题,它崩溃了,并且我收到了此错误。quick.exe中发生了类型为“System.NullReferenceException”的未处理异常。其他信息:对象引用未设置为对象的实例。
  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
  }