在表单之间传递字符串返回null

时间:2016-06-29 23:11:52

标签: c# winforms

在您输入的程序中,使用从数据库带来的用户名。我需要将该用户名传递给另一个表单,但是当我这样做时,它会以第二种形式返回null,尽管它出现在第一种形式中。(" Jugador"是我带名字的类)。

public Usuario()
{
    InitializeComponent();
}
private string _Message;
public string Message
{
    get { return _Message; }
    set { _Message = strName; }
}
public string strName;

private void button1_Click(object sender, EventArgs e)
{
    if (textBox1.Text!="")
    {
        Jugador jug = new Jugador();
        jug.Traemelo(textBox1.Text);
        strName = textBox1.Text;
        elegirTipo us = new elegirTipo();
        us.Show();
        this.Hide();
    }


}

在我的另一种形式中,我有这个。(Usuario是第一种形式)

private void silabas_Load(object sender, EventArgs e)
{
    Usuario usu = new Usuario();
    juga.Traemelo(usu.Message);
}

我必须补充一点,在这些形式的中间我经过一个,但在那里需要变量。 谢谢您的帮助!我真的不知道发生了什么,因为我其他时间已经这样做了。

4 个答案:

答案 0 :(得分:1)

class X
{
public:
    X(int x) : _x(x) {};
    bool operator==(int y) { return _x == y; }
private:
    int _x;
};

....

X x(0);
if (x == 0) // OK
    ;
if (0 == x) // error
    ;

答案 1 :(得分:0)

乍一看:

     public string Message
     {
       get { return _Message; }
       set { _Message = value } // instead of strName;
     }

没有Message=something(永远不会调用set)

_Message似乎与strName竞争。一个变量就足够了。

编辑:结合这个:

    public Usuario()
    {
      InitializeComponent();
    }
     private string _Message;
     public string Message
     {
       get { return _Message; }
       set { _Message = value; }
     }
 private void button1_Click(object sender, EventArgs e)
 {
    if (!string.IsNullOrEmpty(textBox1.Text))
    {
        Jugador jug = new Jugador();
        jug.Traemelo(textBox1.Text);
        Message = textBox1.Text;
        elegirTipo us = new elegirTipo();
        us.Show();
        this.Hide();
    }
}

答案 2 :(得分:0)

问题是因为你正在创建一个新实例,即Usuario usu = new Usuario();对于另一个类中的对象,该值变为null。我会使用静态变量。在您的Usuario课程中使用

public static string strName{get;set;}

现在设置值Usuario.strName = textBox1.Text;

在你的其他课堂上说,

 private void silabas_Load(object sender, EventArgs e)
    {

        juga.Traemelo(Usuario.strName);

    }

答案 3 :(得分:0)

我个人会做的是创建一个静态类并保存其中的值。这也让我不会在每次需要使用它时实例化该类。

public static class Jugador 
{
    //ctor if needed
    public static string Username { get; set; }
}

现在,在您设置或获取用户名值的代码中:

//login process
Jugador.Username = "some username";

//in application (get)
textbox1.Text = Jugador.Username;

我相信这就是你要找的东西。