2012-03-26 3 views
-2

Possible en double:
How to Pass String to another forms from one form in c#Passant chaîne à une autre forme d'une forme en C#

C# Question: Lorsque je me connecte à mon logiciel, je sélectionne le nom d'utilisateur souhaité à l'aide combobox. Après je me connecte, je veux voir le texte du nom d'utilisateur dans la fenêtre principale sur la barre d'outils.

J'ai essayé la méthode get et set mais quelque chose ne va pas. Pouvez vous me donner un coup de main? Merci d'avance.

Formule 1:

public partial class login : Form 
{ 
    public login() 
    { 
     InitializeComponent(); 
    } 

    public string username 
    { 
     get{ 
      return a.ToString();} 
    } 

    public string a; 

    private void button1_Click(object sender, EventArgs e) 
    { 
     a = comboBox1.Text; 
     Form main1 = new main(); 
     main1.Show(); 
    // rest is the code for login. 
    } 
} 

Formule 2:

public partial class main : Form 
{ 
    public main() 
    { 
     InitializeComponent(); 
    } 
    public string username 
    { 
     set { toolStripLabel1.Text = value; } 
    } 
    private void main_Load(object sender, EventArgs e) 
    { 
     Form home = new home(); 
     home.MdiParent = this; 
     home.WindowState = FormWindowState.Maximized; 
     home.Show(); 
    } 
} 

ici Accueil est un Form3 ChildForm qui ouvre sous forme principale. à l'événement de chargement du formulaire principal lui-même.

+0

Vous n'ouvrez le formulaire 2 du formulaire 1. Ils font d'aucune façon à "parler". Où ouvrez-vous le formulaire 2? –

+0

@ Fire-Dragon-DoL - formulaire 2 est déjà ouvert, c'est la forme principale. –

+0

Aucun formulaire 2 n'est déjà ouvert .. J'ai édité n corrigé d question .. jeter un oeil –

Répondre

1

Remplacez le code main_Load avec ceci:

private void main_Load(object sender, EventArgs e) 
{ 
    login home = new login(); 
    home.MdiParent = this; 
    home.WindowState = FormWindowState.Maximized; 
    home.ShowDialog(); // waits for the home form to be closed 

    this.username = home.username; 
} 
+0

Vous devez définir la visibilité de home.username au public pour que cela fonctionne – BlackBear

+0

La visibilité de home.username est déjà définie sur public (dans la classe de connexion) – Ove

+0

yup, ne l'a pas remarqué;) – BlackBear

3

Quelqu'un vient de répondre à cette question pour vous il y a quelques minutes !? Et pour autant que je puisse dire, c'était une réponse parfaitement appropriée, alors pourquoi ne pas simplement l'implémenter?

https://stackoverflow.com/a/9872043/1017882

+0

Hey je dint obtenir le précédent, je pensais au partage le code aussi ... –

+0

Devrait avoir vraiment partagé dans l'autre thread à mon avis. "Quelque chose ne va pas." Que voulez-vous dire? Quelle est l'erreur? Au lieu de déclarer un formulaire appelé home, vous devez déclarer un login (également reconsidérer le nom en ce qui concerne les lettres majuscules), puis retirer la chaîne de nom d'utilisateur de ce formulaire de connexion. –

+0

Erreur est la valeur ne se passe pas en utilisant la méthode ci-dessus .. je veux savoir où je me trompe .. aimablement aider avec le même –

0

Im ne savez pas où vous appelez votre classe de connexion. Mais vous pouvez passer une instance de votre formulaire principal et définir la valeur à partir de là.

public login(main mainInstance) 
{ 
    //... login etc. 

    mainInstance.UserName = comboBox1.Text; 
} 

ou que la méthode de connexion renvoie un objet utilisateur ou une chaîne.

+0

Pouvez-vous s'il vous plaît upvote ma question .. Je ne suis pas en mesure de poser de nouvelles questions à cause de cela .. Merci à l'avance ... –

0

Je ne peux pas poster cela comme un commentaire, sinon il serait illisible, mais à moins que je me trompe:

Form home = new home() 

compilerions même pas considérer les deux classes seulement sont main et login

Alors que vous pourriez corriger le code et déclarer le formulaire de la bonne manière

login home = new login(); 

Il semble plus facile d'utiliser un static variable dans un cas comme celui-ci.

0

Je crois que le meilleur moyen est d'utiliser des événements:

Form1:

public partial class login : Form 
{ 
    public delegate void sendStringDelegate(string s); 
    public event sendStringDelegate sendString; 

    public login() 
    { 
     InitializeComponent(); 
    } 

    public string username 
    { 
     get{ 
      return a.ToString();} 
    } 

    public string a; 

    private void button1_Click(object sender, EventArgs e) 
    { 
     a = comboBox1.Text; 
     sendString(a); 
    // rest is the code for login. 
    } 
} 

Form2:

public partial class main : Form 
{ 
    login log = new login(); 

    public main() 
    { 
     InitializeComponent(); 
     log.sendString += new login.sendStringDelegate(setString); 
    } 

    public void setString(string s) 
    { 
     whatever.text = s; 
    } 

    public string username 
    { 
     set { toolStripLabel1.Text = value; } 
    } 
    private void main_Load(object sender, EventArgs e) 
    { 
     Form home = new home(); 
     home.MdiParent = this; 
     home.WindowState = FormWindowState.Maximized; 
     home.Show(); 
    } 
} 
Code

pas testé donc il pourrait y avoir quelques erreurs

Aussi, vous pourrait utiliser l'événement statique:

changement public event sendStringDelegate sendString; à public static event sendStringDelegate sendString;

supprimer login log = new login();

changement log.sendString += new login.sendStringDelegate(setString); à login.sendString += new login.sendStringDelegate(setString);

Questions connexes