Variables entre formulaires (deux fichiers distincts)

Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015 - 10 juin 2013 à 11:08
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 18 juil. 2013 à 10:14
Bonjour,

Encore une fois, je sollicite votre aide amis Csharpeurs.

Je dispose de deux formulaires bien distincts, Couveuse.cs (form principal) et Param.cs.

Ce que je souhaite obtenir est plutôt simple. Le formulaire principal dispose de variables pour gérer plusieurs paramètres de l'application. Étant une gestion de couveuse, je m'occupe de la température, de la durée d'incubation et autres petites choses du genre. J'ai ajouté un toolstripmenu par lequel je passe pour appeler ma form secondaire "Param.cs" qui devrait, si c'était fonctionnel, me permettre de modifier les variables de la form principale citée avant.

Voici ma Form Param.cs :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Couveuse
{
    public partial class Param : Form
    {
        public Param()
        {
            InitializeComponent();
        }

        #region Variables de paramétrage de l'application

        int iTemperatureIncubation, iTempsIncubation;
        int iPremierRetournement, iSecondRetournement;
        int iIntervalleVentilation;

        #endregion

        private void btnAppliquerParam_Click(object sender, EventArgs e)
        {
            iTemperatureIncubation = Convert.ToInt32(this.tbxSeuilTemp.Text);
            iTempsIncubation = Convert.ToInt32(this.tbxTempsIncubation.Text);
            iPremierRetournement = Convert.ToInt32(this.tbxPremierRetournement.Text);
            iSecondRetournement = Convert.ToInt32(this.tbxSecondRetournement.Text);
            iIntervalleVentilation = Convert.ToInt32(this.tbxIntervalleVentilation.Text);
        }
    }
}


Et puis maintenant, le début de la form principale :

namespace Couveuse
{
    public partial class Couveuse : Form
    {
        public Couveuse()
        {
            InitializeComponent();
        }


Le reste du code étant un pavé, je préfère éviter de coller absolument tout. Cela dit, n'hésitez pas à me demander de rajouter la suite s'il vous manque quelque chose.

Bref, maintenant la question que je me pose est "comment faire pour transmettre ces paramètres à mon formulaire principal au moment où l'utilisateur clique sur le bouton du formulaire Param.cs ?"

Auriez-vous une idée ou deux ?

D'avance, merci :)


Cordialement, Gaedarr.

8 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
10 juin 2013 à 15:17
C'est simple : Couveuse doit avoir une référence sur Param, et tes paramètres doivent être disponibles en lecture depuis une autre classe du même assembly (donc public ou internal).

Exemple :
// Dans Param
public int TemperatureIncubation
{ get { return iTemperatureIncubation; } }

// Dans Couveuse
private Param parametres;
private void OpenParam()
{
    parametres = new Param();
    parametres.ShowDialog();
    MessageBox.Show(parametres.TemperatureIncubation.ToString());
}


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
10 juin 2013 à 15:45
Bonjour, tu as différentes méthodes exposées ou

Whismeril
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
10 juin 2013 à 15:53
Tout d'abord, merci pour la réponse plutôt rapide :)

Dans mon formulaire Couveuse, j'ai des variables publiques en global (j'en ai encore d'autres), donc normalement accessibles.
        #region Variables Chauffage

        public int iSeuil = 217;
        public int iTemperature = 0;

        #endregion


Ensuite, ce que je cherche à faire, c'est modifier le contenu des variables du formulaire Couveuse.cs en passant par le formulaire Param.cs.

Par exemple, l'utilisateur entre 38 dans le textbox tbxSeuilTemp de Param.cs, il faudrait qu'au moment où il clique sur le bouton appliquer, que la valeur récupérée du textbox soit envoyée à la variable iSeuil de Couveuse.cs.

Donc si je ne me plante pas, ce serait ainsi ? :
// Dans Couveuse
public int SeuilTemperature
{
   get
   { 
      return iSeuilTemperature;
   }
}

// Dans Param
private Couveuse parametres;

private void OpenCouveuse()
{
    parametres = new Couveuse();
    parametres.ShowDialog();
    return parametres.TemperatureIncubation;

    // possible ?
}



Cordialement, Gaedarr.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
10 juin 2013 à 16:48
Déjà, ne mets jamais un champ en public. Passe toujours par une propriété.

Ton scénario tel que je l'ai compris :
Tu lances ton application
Le formulaire Couveuse s'ouvre
Sur ce formulaire, tu cliques sur un bouton pour ouvrir une popup Param.
Là, tu as des textBox que tu remplis pour définir tes valeurs.
Ensuite, lorsque tu cliques sur Appliquer, tu fermes le formulaire Param et les valeurs sont mises à jour sur Couveuse.

Si c'est bien ça, il faut utiliser mon code. Sinon, merci d'expliquer clairement ton scénario.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
10 juin 2013 à 18:59
C'est bien ça Krimog, je vais voir pour implémenter ce que tu m'as proposé, je donne des nouvelles dès que possible :)


Cordialement, Gaedarr.
0
cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
11 juin 2013 à 09:36
Bonjour,

Tu pourrais aussi passer tes variables en référence (et non en copie) à l'instanciation de Param.cs. Les modifications apportées dans Param.cs devraient donc impacter directement les variables instanciées dans Couveuse.cs
Ensuite il suffit de créer un événement (bouton clic, form fermé) sur Couveuse.cs et de mettre à jour tes champs à ce moment la.
0
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
17 juil. 2013 à 22:24
Bonsoir,

Tu peux également utiliser une classe static pour centraliser et stocker tes paramètres tout le long de ton application (cela t’évitera de devoir faire communiquer tes deux classes).

++

../\_/\..
.( o.o ). ~ ElGuevel ~
..> - <..
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
18 juil. 2013 à 10:14
@elguevel : les propriétés static sont à éviter. Si des données n'ont pas besoin d'être accessibles depuis n'importe où dans l'application, elles ne doivent pas l'être.
En plus, si tu veut gérer plusieurs fenêtres indépendantes, tu ne peux pas utiliser de classe static.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous