2016-06-29 7 views
0

Im Programm geben Sie einen Benutzernamen ein, der aus einer Datenbank stammt. Ich muss diesen Benutzernamen an ein anderes Formular weitergeben, aber wenn ich es tue, gibt es null in der zweiten Form zurück, obwohl es in der ersten Form erscheint. ("Jugador" ist die Klasse, von der ich den Namen bringe).Die Übergabe der Zeichenfolge zwischen den Formularen gibt null zurück

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(); 
    } 


} 

Und in meiner anderen Form habe ich das. (Usuario ist die erste Form)

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

ich habe, dass in der Mitte dieser Formen von einem gebe ich hinzufügen, aber DOENS' Ich brauche die Variable dort. Danke für die Hilfe! Ich weiß wirklich nicht, was passiert, weil ich das schon oft gemacht habe.

+0

'Usuario usu = new Usuario();' Sie haben eine neue Instanz in 'silabas_Load', Sie haben die Werte mit einer neuen Instanz verloren. Füge eine String-Variable in 'Usario' hinzu und setze' strName', bevor du sie zeigst. – Berkay

Antwort

0

Was ich persönlich tun würde, ist eine statische Klasse zu erstellen und halten die Werte drin. Dies würde mir auch erlauben, die Klasse nicht jedes Mal zu instanziieren, wenn ich sie benutzen muss.

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

nun in Ihrem Code, wo Sie beide setzen oder die Werte des Benutzernamen erhalten:

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

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

Ich glaube, das ist das, was Sie suchen.

0

Auf den ersten Blick:

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

kein Message=something (Set wird nie genannt)

_message scheint mit strName zu konkurrieren. Eine Variable sollte ausreichen.

EDIT: Kombination dazu:

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(); 
    } 
} 
1
// Usuario.cs 
public string Message { get; set; } 
... 
Silabas silabas = new Silabas(this); 

// Silabas.cs 
public Silabas(Usuario usuario) 
{ 
    // Here you can access the usuario.Message 
} 
0

Problem ist, da sie eine neue Instanz d.h. Usuario USU = new Usuario() erzeugt wird; des Objekts in der anderen Klasse wird der Wert null. Ich würde eine statische Variable verwenden. In Ihrer Usuario Klasse

public static string strName{get;set;} 

nun den Wert sagen zu setzen verwenden Usuario.strName = textBox1.Text;

in der anderen Klasse hier sagen,

private void silabas_Load(object sender, EventArgs e) 
    { 

     juga.Traemelo(Usuario.strName); 

    }