IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Accès Variable, tableau


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Accès Variable, tableau
    Bonjour,

    je développe une petite application qui me permet d'installer des applications de manière silencieuse après avoir lu les paramètres stockés dans un fichier XML.

    Mon application :




    Main
    Je remplis dynamiquement un simple listview
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void MainFormLoad(object sender, EventArgs e)
    {
    	foreach (string subfolder in Directory.GetDirectories(".\\silent")) 
    	{
    		ListViewItem it=new ListViewItem();
    		it.SubItems[0].Text= Path.GetFileName(subfolder).ToString();
    		it.SubItems.Add("En attente...");
    		liste.Items.Add(it).Checked = true; 				
    	}
    }

    Bouton Install
    - J'initialise un tableau avec la liste des applications à installer
    - Je lis les paramètres d'install renseignés dans un fichier xml
    - je lance l'install
    - En suivant je souhaite supprimer la première application de ma liste pour lancer l'application suivante, UNIQUEMENT lorsque l'application précédente a été supprimée. Pour cela j'ai besoin d'accéder au tableau ins[] déclaré dans le code suivant, mais je n'y arrive pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    void Button1Click(object sender, EventArgs e)
    {		
    	// on récupère le type d'os
    	string os = GetOperatingSystemName()+Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
     
    	// on récupère la liste des applications à installer
    	String[] ins = new string[liste.CheckedItems.Count];
    	int index = 0;
     
    	foreach (ListViewItem lvi in liste.Items)
    	{
    		if (lvi.Checked == true)
    		{
    			ins[index] = lvi.Text;
    			index++;
    		}
    	}
     
    	// on récupère les informations d'installation
    	XPathDocument doc = new XPathDocument("silent\\" + ins[0] + "\\si.xml");
            XPathNavigator nav = doc.CreateNavigator();
            XPathNodeIterator iter = nav.Select("si/"+os);
            iter.MoveNext();
     
            // récupération des paramètres d'install
    	string exec = iter.Current.SelectSingleNode("exec").Value;
     
    	// on lance l'install
    	Process install = Process.Start("silent\\" + ins[0] + "\\" +  exec);
    	install.EnableRaisingEvents = true;
    	install.Exited += new EventHandler(nextapp);
    }
     
    void nextapp(object sender, EventArgs e)
    {
    	// ici accès au tableau ins
    }
    Voilou, je veux donc accéder au tableau ins[].

    Je démarre en C# et je suis un peu perdu du coup vu qu'à ce que j'ai compris il n'y a pas vraiment de variable globale dans ce langage.
    D'ailleurs si quelqu'un veut bien me préciser cette histoire de variables globales je lui en serais reconnaissant.

    Merci d'avance,

    Flexii

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 81
    Points : 92
    Points
    92
    Par défaut
    Bah en fait, soit tu déclare ta variable ins[] au niveau de la classe, ce qui la rendra donc accessible par toute les méthodes de la classe, par contre, il faudra que tu gère bien les changements de taille & cie de ton tableau.

    Dans le cas ou c'est 2 classes différentes qui doivent accéder à la même variable, donc en gros une variable globale, il faut la déclarer dans la classe comme "static".

    Tu peux trouver plein d'information dans la faq c# ici :
    http://faqcsharp.developpez.com/?pag...riable_globale

    [Edit] Je pense que l'utilisation de List<String> te simplifiera énormément les choses, car des String[] en global à gérer, c'est quand même plus chiant

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Deux solutions.

    La première, tu déclares le tableau non pas dans la méthode mais au niveau de la classe (ton formulaire dans le cas présent). C'est fonctionnel mais ce n'est pas très objet, donc à éviter si possible ^^

    Deuxième solution, tu crée une classe qui se charge de réaliser les installations. C'est cette classe qui récupérera les données XML et à qui tu passeras les applications à installer. Ce sera plus propre en procédant ainsi

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Coucou,

    désolé pour ma réponse tardive, je n'ai pas pris le temps de vous répondre

    Merci pour vos explications et solutions.

    @StormimOn
    Je ne comprends pas trop pourquoi le fait que mon tableau soit déclaré au niveau de la classe n'est pas très objet, pourrais tu développer ça m'intéresse.

    De même j'ai du mal à saisir pourquoi le fait de créer une 2ème classe dédié au lancement des installs est plus objet :o

    @jonathan3357
    Merci pour ton éclaircissement sur la déclaration de globales. Je vais regarder pour le tableau de string ça me paraît plus simple effectivement, du peu que je viens de regarder sur google.

Discussions similaires

  1. Réponses: 17
    Dernier message: 01/01/2013, 19h10
  2. Réponses: 2
    Dernier message: 03/11/2007, 11h24
  3. variables tableau dans requettes mysql ... et affichage
    Par mulbek dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/10/2005, 16h29
  4. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo