Passage de variable a une form par reference [Résolu]

DiJiTooL 78 Messages postés samedi 4 août 2001Date d'inscription 29 mars 2007 Dernière intervention - 25 mars 2007 à 13:20 - Dernière réponse : Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention
- 27 mars 2007 à 12:46
Bonjour!
J'aimerai passer des variables provenant d'une de mes classe à une form par référence, afin que lorsque la personne remplisse les champs de la form, les variables soit modifier, et que lorsque la form se ferme ma classe puisse donc enregistrer les valeurs.
Voici un peu plus en détail le fonctionnement :


___________________________________________________________________________

//Application principale
Main(){
            string ip;
            string typeCN;
            int port;
           
//Creation du gestionnaire machine :
leGestionnaireDeMachines = new CGestionnaireMachines(fichierMachinesXml);

//Le gestionnaire machine creer la fenetre ChoixMachine en lui passant par reference les variables
leGestionnaireDeMachines.FenetreChoixMachine(out ip, out port, out typeCN);
//Une fois la variables modifié par la form, on creer le gestionnaire de transfert :
 leGestionnaireDeTransfert = new CCommunicationFagor(ip, port);
 
}

___________________________________________________________________________

//Constructeur de la fenetre choix machine
  public CfrmChoixMachine(out string retIP, out int retPort, out string retTypeCN)
        {
            InitializeComponent();
        }
       
//Si je modifie retIP dans le constructeur il est bien modifié dans l'appli principal, cependant le but n'est pas d'effectuer la modification des variables dans le constructeur mais dans une fonction de la form :

  private void btnConnect_Click(object sender, EventArgs e)
        {
            selectedIP = lblAdresseIn.Text;
            selectedPort = Int32.Parse(lblPortIn.Text);
            selectedCN = lblCommandeIn.Text;
            Close();
        }


___________________________________________________________________________

Voilà donc j'aimerai que ce ne soit pas les variables selectedIP, selectedPort, selectedCN qui soit modifiées mais les variables retIP, retPort, retTypeCN, afin que ma classe puisse connaitre l'ip, le port et le type de commande numérique séléctionné par l'utilisateur.

Avec des pointeurs celà aurrait était trés simple, j'aurrais simplement enregistrer l'adresse des variables ip, port et typeCN, dans ma form et j'aurrais attribué une valeur lors de l'appui sur le boutton. Le problème est que le C# ne m'autorise pas à utiliser les pointeurs avec des arguments de type string....
En esperant que quelqu'un puisse m'aider.
Merci d'avance.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 25 mars 2007 à 14:13
3
Merci
Salut,

Sinon une classe dédiée a contenir les valeurs c'est sympa aussi, il suffira d'en passer une instance en paramètre.
Autre avantage de la chose : évolution du contenu sans briser le code existant.

/*
coq
MVP Visual C#
CoqBlog
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 25 mars 2007 à 13:25
0
Merci
Salut,
Tu peux jeter un coup d'oeil à cette source

<hr />
-Blog-
Commenter la réponse de cs_Bidou
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 25 mars 2007 à 14:07
0
Merci
Salut, le int 'port' étant sur la pile on peux utiliser les pointeurs, pour les chaines aussi mais faudrait les fixer en mémoire ce qui là dans ce cas va donner un code vraiment mal foutu..Les chaines sont bien des types références mais elles sont aussi immuables ce qui leur donne un comportement de type valeur, on peut les remplacer par des StringBuilder par exemple. Là le plus simple pour toi à mons avis c'est de mettre les variables qui sont dans Main en static dans la classe.
Commenter la réponse de Lutinore
DiJiTooL 78 Messages postés samedi 4 août 2001Date d'inscription 29 mars 2007 Dernière intervention - 25 mars 2007 à 15:01
0
Merci
Merci tout le monde, j'ai finallement opté pour la solution de coq, j'ai créé une classe CMachineAttributs et je passe l'objet en paramètre au constructeur de ma form qui l'enregistre

Merci encore
Commenter la réponse de DiJiTooL
DeAtHCrAsH 2674 Messages postés vendredi 25 janvier 2002Date d'inscription 6 février 2013 Dernière intervention - 25 mars 2007 à 15:05
0
Merci
Pourquoi ne pas tout simplement surcharger le constructeur de la classe, puis lui passer en param "out" les variables nécéssaire.

Sinon une autre solution est de créer une classe singleton crée et initialisée dans le main. 

Shell
Commenter la réponse de DeAtHCrAsH
DiJiTooL 78 Messages postés samedi 4 août 2001Date d'inscription 29 mars 2007 Dernière intervention - 25 mars 2007 à 15:08
0
Merci
Car ce n'est pas ma form qui creer la classe mais l'inverse...
Commenter la réponse de DiJiTooL
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 25 mars 2007 à 15:43
0
Merci
coq> C'est exactement ce que je fais dans la source que je proposais.... héhé

<hr />
-Blog-
Commenter la réponse de cs_Bidou
DiJiTooL 78 Messages postés samedi 4 août 2001Date d'inscription 29 mars 2007 Dernière intervention - 25 mars 2007 à 15:49
0
Merci
Oui bidou j'avais remarqué :) mais est-ce que les events sont trés recommandés dans ce genre de situation?
Commenter la réponse de DiJiTooL
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 25 mars 2007 à 16:02
0
Merci
Euh, ya un exemple avec les events, et un exemple en passant par le constructeur si je me souviens bien...

<hr />
-Blog-
Commenter la réponse de cs_Bidou
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 25 mars 2007 à 16:15
0
Merci
Désolé, je n'ai pas fait attention

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
DeAtHCrAsH 2674 Messages postés vendredi 25 janvier 2002Date d'inscription 6 février 2013 Dernière intervention - 25 mars 2007 à 18:54
0
Merci
Raison de plus. Si c'est ta classe qui crée ta form, tu peux tout a fait surcharger le constructeur de ta form pour lui passer en paramètres les variables souhaités.

De plus cette manipulation est vraie dans les deux sens.

J'en profite aussi pour rappeller que dans un projet C# il est possible de spécifier le fichier de démarrage à condition que le main y soit défini!

Shell
Commenter la réponse de DeAtHCrAsH
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 27 mars 2007 à 12:46
0
Merci
DeAtHCrAsH dans son premier code il utilise déja le passage par référence 'out' dans le ctor de sa forme, ça ne l'aide pas plus que ça, puisque ce n'est pas dans le constructeur qu'il veut modifier ses variables.
Commenter la réponse de Lutinore

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.