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++/CLI Discussion :

Appeler une fonction à partir d'un contrôle utilisateur


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par défaut Appeler une fonction à partir d'un contrôle utilisateur
    Bonjour à tous,

    J'ai enfin réussi à créer un contrôle utilisateur.

    Maintenant je butte sur un problème sûrement idiot ....

    Les boutons de mon contrôle font appel à des fonctions déclarées dans la Form principale et le compilo me dit :

    'ma_fonction'*: identificateur introuvable


    Pour mieux expliquer, j'ai écrit un petit exemple appelé "test_boutons" qui contient une Form Form1 et un contrôle utilisateur que j'ai appelé pupitre

    Le contrôle utilisateur est très simple, il contient :
    1- un numericUpDown pour sélectionner un appareil (une vanne dans ce cas)
    2- un bouton "Ouvrir"
    3 -un bouton "Fermer"



    Quand on sélectionne la vanne indexée i, si on appuie sur ouvrir on est censé ouvrir la vanne i.

    Les fonctions Ouvrir (int i) et Fermer (int i) sont déclarées dans Form1 car elles utilisent un port série qui est ouvert dans Form1.

    Voici le code

    pupitre.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "StdAfx.h"
    #include "pupitre.h"
    pupitre.h

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    #pragma once
     
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
     
     
    namespace test_boutons {
     
    	/// <summary>
    	/// Description résumée de pupitre
    	/// </summary>
    	public ref class pupitre : public System::Windows::Forms::UserControl
    	{
    	public:
    		pupitre(void)
    		{
    			InitializeComponent();
    			//
    			//TODO*: ajoutez ici le code du constructeur
    			//
    		}
     
    	protected:
    		/// <summary>
    		/// Nettoyage des ressources utilisées.
    		/// </summary>
    		~pupitre()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Button^  button1;
    	private: System::Windows::Forms::Button^  button2;
    	private: System::Windows::Forms::GroupBox^  groupBox1;
    	private: System::Windows::Forms::Label^  label1;
    	private: System::Windows::Forms::NumericUpDown^  numericUpDown1;
    	protected: 
     
    	private:
    		/// <summary>
    		/// Variable nécessaire au concepteur.
    		/// </summary>
    		System::ComponentModel::Container ^components;
     
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
    		/// le contenu de cette méthode avec l'éditeur de code.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			this->button2 = (gcnew System::Windows::Forms::Button());
    			this->groupBox1 = (gcnew System::Windows::Forms::GroupBox());
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->numericUpDown1 = (gcnew System::Windows::Forms::NumericUpDown());
    			this->groupBox1->SuspendLayout();
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->numericUpDown1))->BeginInit();
    			this->SuspendLayout();
    			// 
    			// button1
    			// 
    			this->button1->Location = System::Drawing::Point(151, 19);
    			this->button1->Name = L"button1";
    			this->button1->Size = System::Drawing::Size(75, 23);
    			this->button1->TabIndex = 0;
    			this->button1->Text = L"Ouvrir";
    			this->button1->UseVisualStyleBackColor = true;
    			this->button1->Click += gcnew System::EventHandler(this, &pupitre::button1_Click);
    			// 
    			// button2
    			// 
    			this->button2->Location = System::Drawing::Point(151, 57);
    			this->button2->Name = L"button2";
    			this->button2->Size = System::Drawing::Size(75, 23);
    			this->button2->TabIndex = 1;
    			this->button2->Text = L"Fermer";
    			this->button2->UseVisualStyleBackColor = true;
    			this->button2->Click += gcnew System::EventHandler(this, &pupitre::button2_Click);
    			// 
    			// groupBox1
    			// 
    			this->groupBox1->BackColor = System::Drawing::SystemColors::GradientInactiveCaption;
    			this->groupBox1->Controls->Add(this->label1);
    			this->groupBox1->Controls->Add(this->numericUpDown1);
    			this->groupBox1->Controls->Add(this->button1);
    			this->groupBox1->Controls->Add(this->button2);
    			this->groupBox1->Location = System::Drawing::Point(3, 3);
    			this->groupBox1->Name = L"groupBox1";
    			this->groupBox1->Size = System::Drawing::Size(237, 100);
    			this->groupBox1->TabIndex = 2;
    			this->groupBox1->TabStop = false;
    			this->groupBox1->Text = L"Commande vanne";
    			// 
    			// label1
    			// 
    			this->label1->AutoSize = true;
    			this->label1->Location = System::Drawing::Point(9, 41);
    			this->label1->Name = L"label1";
    			this->label1->Size = System::Drawing::Size(51, 13);
    			this->label1->TabIndex = 3;
    			this->label1->Text = L"Vanne n°";
    			// 
    			// numericUpDown1
    			// 
    			this->numericUpDown1->Location = System::Drawing::Point(66, 39);
    			this->numericUpDown1->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) {20, 0, 0, 0});
    			this->numericUpDown1->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) {1, 0, 0, 0});
    			this->numericUpDown1->Name = L"numericUpDown1";
    			this->numericUpDown1->Size = System::Drawing::Size(60, 20);
    			this->numericUpDown1->TabIndex = 2;
    			this->numericUpDown1->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) {1, 0, 0, 0});
    			// 
    			// pupitre
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->Controls->Add(this->groupBox1);
    			this->Name = L"pupitre";
    			this->Size = System::Drawing::Size(250, 111);
    			this->groupBox1->ResumeLayout(false);
    			this->groupBox1->PerformLayout();
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->numericUpDown1))->EndInit();
    			this->ResumeLayout(false);
     
    		}
    #pragma endregion
     
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			 int i = safe_cast <int> (numericUpDown1->Value);
    			 Ouvrir (i);
    		}
     
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			 int i = safe_cast <int> (numericUpDown1->Value);
    			 Fermer (i);
    		}
     
     
    };
    }
    Form1.h

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    #include "pupitre.h"
    #pragma once
     
     
    namespace test_boutons {
     
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
     
    	/// <summary>
    	/// Description résumée de Form1
    	///
    	/// AVERTISSEMENT*: si vous modifiez le nom de cette classe, vous devrez modifier la
    	///          propriété 'Nom du fichier de ressources' de l'outil de compilation de ressource managée
    	///          pour tous les fichiers .resx dont dépend cette classe. Dans le cas contraire,
    	///          les concepteurs ne pourront pas interagir correctement avec les ressources
    	///          localisées associées à ce formulaire.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO*: ajoutez ici le code du constructeur
    			//
    		}
     
    	protected:
    		/// <summary>
    		/// Nettoyage des ressources utilisées.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: test_boutons::pupitre^  pupitre1;
     
     
    	private: System::ComponentModel::IContainer^  components;
    	protected: 
     
    	protected: 
     
    	protected: 
     
    	private:
    		/// <summary>
    		/// Variable nécessaire au concepteur.
    		/// </summary>
     
     
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
    		/// le contenu de cette méthode avec l'éditeur de code.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->pupitre1 = (gcnew test_boutons::pupitre());
    			this->SuspendLayout();
    			// 
    			// pupitre1
    			// 
    			this->pupitre1->Location = System::Drawing::Point(16, 12);
    			this->pupitre1->Name = L"pupitre1";
    			this->pupitre1->Size = System::Drawing::Size(250, 111);
    			this->pupitre1->TabIndex = 0;
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(278, 227);
    			this->Controls->Add(this->pupitre1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->ResumeLayout(false);
     
    		}
    #pragma endregion
     
    		void Ouvrir (int i)
    			{
    				// mettre ici le code pour ouvrir la vanne i
    			}
     
    		void Fermer (int i)
    			{
    				// mettre ici le code pour fermer la vanne i
    			}
     
     
    	};
    }
    Le message d'erreur :

    error C3861: 'Ouvrir'*: identificateur introuvable
    error C3861: 'Fermer'*: identificateur introuvable
    J'ai essayé de mettre les fonctions ailleurs, de rajouter des include, rien à y faire ... C'est probablement tout bête mais ..

    Si je mets les deux lignes d'appel en commentaires ... ça compile nickel ...

    Et si j'appelle Ouvrir ou Fermer à partir d'un simple bouton positionné dans Form1 ... les fonctions marchent nickel ...

    Merci à ceux qui pourront m'aider

    Bonne soirée
    Jean-Louis

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Bonjours Jean-Louis,

    Il semble que ces deux fonction soient privées dans Form1, tu ne peut donc les appeler que depuis Form1.
    Essaye de les mettre en "public:" et de les appeler comme ça : "Form1::Ouvrir (i);" et "Form1::Fermer (i);" .

    dans pupitre.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			 int i = safe_cast <int> (numericUpDown1->Value);
    			 Form1::Ouvrir (i);
    		}
     
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			 int i = safe_cast <int> (numericUpDown1->Value);
    			 Form1::Fermer (i);
    		}
    et dans Form1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public:void Ouvrir (int i)
    			{
    				// mettre ici le code pour ouvrir la vanne i
    			}
     
    	public:void Fermer (int i)
    			{
    				// mettre ici le code pour fermer la vanne i
    			}
    Bertrand

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par défaut
    Citation Envoyé par bertry Voir le message
    Essaye de les mettre en "public:" et de les appeler comme ça : "Form1::Ouvrir (i);" et "Form1::Fermer (i);" .
    Bonsoir Bertrand,

    Merci, j'avais déjà essayé, mais ça ne marche pas ...

    Le compilo me dit :

    error C2653: 'Form1'*: n'est pas un nom de classe ni d'espace de noms


    J'ai aussi essayé de créer une classe vanne avec des méthodes Ouvrir() et Fermer()

    J'ai fait une liste de vannes déclarées dans Form1, je crois que le problème est là; il faudrait la déclarer ailleurs ou autrement mais où ou comment???

    Dans ce cas, les fonctions Ouvrir() et Fermer() sont reconnues mais pas la liste de vannes.

    Voici les bouts de codes :

    Dans Form1.h déclaration de la liste de vannes:

    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
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			l_vannes = gcnew List<Vanne^>();
    ................
    ................
    ...........
    #pragma endregion
     
    	private:
            List<Vanne^>^ l_vannes;
     
     
    	public:void Ouvrir (int i)
    			{
    				// mettre ici le code pour ouvrir la vanne i
    			}
     
    	public:void Fermer (int i)
    			{
    				// mettre ici le code pour fermer la vanne i
    			}
    dans pupitre.h appels aux méthodes Ovrir() et Fermer()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 int i_vanne = safe_cast <int> (numericUpDown1->Value);
    			 l_vannes[i_vanne]->Ouvrir();
    		 }
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 int i_vanne = safe_cast <int> (numericUpDown1->Value);
    			 l_vannes[i_vanne]->Fermer();
    		 }
    Et le noyau du .h de la classe vanne :

    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
    #include "stdafx.h"
    using namespace System;
     
    ref class Vanne 
    {
    public :
    	Vanne()
    	{
    	}
    	void Ouvrir ()
    	{
    		// code pour ouvrir
    		return;
    	}
    	void Fermer ()
    	{
    		// code pour fermer
    		return;
    	}
    private:
    };
    Cela me paraît normal que la liste étant déclarée dans Form1.h on ne puisse y accéder au niveau de pupitre.h

    Où la déclarer ou comment faire pour la rendre accessible? That is the question?

    J'ai essayé des tas de choses, mais je ne comprends pas grand'chose à ces variables managées ...

    Bonne soirée.

  4. #4
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Euh... Une question bête :

    Tu as pensé à mettre : au début de "pupitre.h" après avoir mis les deux fonctions en "public"?
    ( Je dis ça parce que je ne le vois pas au début du fichier "pupitre.h" )

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Par défaut
    Citation Envoyé par bertry Voir le message
    Euh... Une question bête :

    Tu as pensé à mettre : au début de "pupitre.h" après avoir mis les deux fonctions en "public"?
    ( Je dis ça parce que je ne le vois pas au début du fichier "pupitre.h" )
    Bonjour Bertrand,

    panel.h étant déjà inclus dans Form1.h, si j'inclus Form1.h dans panel.h le compilo tourne en rond et me jette avec un niveau d'inclusions trop grand

    J'ai lu un truc ici; ce n'est pas du C++/CLI , mais il se pourrait que l'idée soit la même!!
    Dès demain il faut que je me penche dessus ... L'utilisation d'un User Control n'a pas l'air triviale


    Je ne comprends pas cela ne fonctionne pas de la même façon qu'un contrôle classique comme un Button ou une Textbox, mais ce sont ces petits détails qui font les charmes de la programmation !!


    Bonne journée et merci

  6. #6
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Vous avez des difficultés parce que votre design n'est pas correct. Il y a plusieurs façons de modéliser les choses, en voici une :

    Le code qui gère le port série doit se trouver dans une classe :

    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
    //------------------------------------------------------------------------
    // cserie.h
    //------------------------------------------------------------------------
    #ifndef CSERIE_H
    #define CSERIE_H
     
    ref class CSerie{
     
      public:
     
    	CSerie(){}
    	~CSerie(){}
     
    	bool InitPortSerie();
            bool ClosePortSerie();
     
    	bool OpenVanne(const int iVanne);
    	bool CloseVanne(const int iVanne);
     
      private:
     
            // mes variables, fonctions, etc...
    };
     
    #endif
    C'est bien pour la logique et la maintenance du code, et de plus cette classe pourra être utilisé dans un autre programme tel quelle.

    Ainsi vous pourriez déjà utiliser cette classe directement dans pupitre.h :

    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
     
     
    ...
     
    public ref class pupitre : public System::Windows::Forms::UserControl
    	{
    	public:
    		pupitre(void)
    		{
    			InitializeComponent();
    			CSerie^ cserie = gcnew CSerie;
                            cserie->InitPortSerie();
    		}
                    ~pupitre()
                    {
                        cserie->ClosePortSerie();
                        ...
                    }
     
    ...
     
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			 int i = safe_cast <int> (numericUpDown1->Value);
    			 cserie->OpenVanne(i);
    		}
     
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
    		{
    			 int i = safe_cast <int> (numericUpDown1->Value);
    			 cserie->CloseVanne(i);
    		}
     
     
    };
    }
    Après je n'ai pas compris l'intérêt de faire une classe pupitre, alors que vous pouvez la designer directement dans la Form. Donc dans le cas où Form1 doit gérer la classe serie, Vous pouvez passez l'objet au constructeur de la classe pupitre :

    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
     
    ...
     
    public:
    		pupitre(CSerie^ cserie) : m_cserie(cserie)
    		{
    			InitializeComponent();
    			//
    			//TODO*: ajoutez ici le code du constructeur
    			//
    		}
     
    ...
     
    private: CSerie^ m_cserie;
     
    ...
     
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 int i = safe_cast <int> (numericUpDown1->Value);
    			 m_cserie->OpenVanne(i);
    		 }
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 int i = safe_cast <int> (numericUpDown1->Value);
    			 m_cserie->CloseVanne(i);
    		 }
    Vous aurez ici une référence supplémentaire. Peut-être un singleton serait tout aussi approprié, enfin tout dépends de l'ensemble de l'architecture de votre code et des objectifs sous-jacents.

    PS : lorsque vous avez une référence circulaire de classes qui doivent se connaître, vous pouvez utiliser la déclaration anticipée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public ref class Form1;
    public ref class pupitre;
     
    #include "Form1.h"
    #include "pupitre.h"
    J'ai déclaré les deux classes mais une seule suffirait ici.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] appeler une fonction à partir d'un répertoire
    Par miss_angel dans le forum Images
    Réponses: 2
    Dernier message: 01/11/2010, 23h39
  2. Réponses: 2
    Dernier message: 07/05/2010, 17h10
  3. Appeler une fonction à partir d'une autre fonction
    Par touta1 dans le forum Langage
    Réponses: 2
    Dernier message: 07/10/2009, 18h15
  4. Appeler une fonction à partir de son nom
    Par superpigeon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/05/2008, 09h56
  5. Appel à une fonction à partir d'une chaine de caractères
    Par becks dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/09/2007, 12h14

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