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 :

Appel de main par un xaml.cs


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 64
    Points : 44
    Points
    44
    Par défaut Appel de main par un xaml.cs
    Bonjour,

    J'ai un xaml.cs
    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
     
    namespace WpfApplication2 
    {
        public partial class MainWindow : Window
        {
            private  string _instrument;
     
            public string Instrument
            {
                get { return _instrument; }
            }
            public MainWindow()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                _instrument= combobox1.Text;
            }
        }
    }
    quand je clique le bouton, la méthode button_click() doit être appelée, le string _instrument va obtenir l'option qu'on a choisi par combobox. Ensuite, je voudrais appeler le main dans l'espace de nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    namespace Com.Lmax.Api
    public static void Main(string[] args)
            {
                MyTradingBot myTradingBot = new MyTradingBot();
                MainWindow nw = new MainWindow();
     
                LmaxApi lmaxApi = new LmaxApi("https://testapi.lmaxtrader.com");
                lmaxApi.Login(new LoginRequest("sheninparis", "20141123p", ProductType.CFD_DEMO), myTradingBot.Login, FailureCallback("log in"));
                if (args.Length != 5)
                {
                    Console.WriteLine("Usage MarketDataClient <url> <username> <password> [CFD_DEMO|CFD_LIVE] instrumentId");
                    Environment.Exit(-1);
                }
    Je ne sais pas comment il peut appeler ce main parce qu'ils ont des noms d'espace différents.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 35
    Points : 47
    Points
    47
    Par défaut
    Salut à toi,

    pour appeler une méthode publique située dans un namespace différent, il suffit d'ajouter une directive "using" dans la classe appelante.
    Avant ta classe "MainWindow : Window", tu dois ajouter "using Com.Lmax.Api;".

    Cependant, comme j'ai répondu sur ton précédent topic, si l'interface qui appelle le "Main()" de Com.Lmax.Api est elle même appelée par un Main(), il va y avoir conflit sur les points d'entrées du programme. Il faudrait donc que tu appelles cette méthode autrement!


    Arnaud DS

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 64
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par ArnaudDS Voir le message
    Salut à toi,

    pour appeler une méthode publique située dans un namespace différent, il suffit d'ajouter une directive "using" dans la classe appelante.
    Avant ta classe "MainWindow : Window", tu dois ajouter "using Com.Lmax.Api;".

    Cependant, comme j'ai répondu sur ton précédent topic, si l'interface qui appelle le "Main()" de Com.Lmax.Api est elle même appelée par un Main(), il va y avoir conflit sur les points d'entrées du programme. Il faudrait donc que tu appelles cette méthode autrement!


    Arnaud DS
    salut, merci de votre réponse. J'ai déjà ajouté using namespace, mais dans le main, quand l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MainWindow nw = new MainWindow();
    appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            public MainWindow()
            {
                InitializeComponent();
            }
    il s'affiche encore l'erreur.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 35
    Points : 47
    Points
    47
    Par défaut
    Je ne comprends pas bien...

    C'est la fenêtre MainWindow qui appelle ton Main(), et ton Main() créé une nouvelle fenêtre MainWindow ?

    Tu veux peut-être dire que tu veux:
    -Lancer ton Main()
    -Que le Main() appelle une fenêtre.
    -Une fois le paramètre renseigné dans la fenêtre, continuer l’exécution de ton Main() tout en ayant récupéré le paramètre ?

    Dans ce cas tu peux utiliser par exemple un listener.


    Arnaud DS

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 64
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par ArnaudDS Voir le message
    Je ne comprends pas bien...

    C'est la fenêtre MainWindow qui appelle ton Main(), et ton Main() créé une nouvelle fenêtre MainWindow ?

    Tu veux peut-être dire que tu veux:
    -Lancer ton Main()
    -Que le Main() appelle une fenêtre.
    -Une fois le paramètre renseigné dans la fenêtre, continuer l’exécution de ton Main() tout en ayant récupéré le paramètre ?

    Dans ce cas tu peux utiliser par exemple un listener.


    Arnaud DS
    Oui, exactement! Mais, je ne sais pas comment utiliser un listener, est-ce que vous avez un exemple de listener sur un bouton ou une fenêtre?

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 35
    Points : 47
    Points
    47
    Par défaut
    J'ai ça sous la main. Je t'invite en revanche (mais ça dépend de ton projet) à faire une classe indépendante de ton Main(), appelée par ce dernier, c'est plus propre en général.

    Considérons donc, que tu aies ta classe contenant ton Main() (appelons la 'ClassMain') et ta classe 'MainWindow'.

    Dans ta 'ClassMain', tu définis une fonction d'écoute que tu déclares dans ton Main():
    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
     
    public static void Main(string[] args)
            {
                MyTradingBot myTradingBot = new MyTradingBot();
                MainWindow nw = new MainWindow();
                //Tu place ta méthode qui va écouter ta fenêtre, et plus précisément ton bouton ok
                EcouterMaFenetre(nw);
     
                LmaxApi lmaxApi = new LmaxApi("https://testapi.lmaxtrader.com");
                lmaxApi.Login(new LoginRequest("sheninparis", "20141123p", ProductType.CFD_DEMO), myTradingBot.Login, FailureCallback("log in"));
                if (args.Length != 5)
                {
                    Console.WriteLine("Usage MarketDataClient <url> <username> <password> [CFD_DEMO|CFD_LIVE] instrumentId");
                    Environment.Exit(-1);
                }
     
     
        public void EcouterMaFenetre(MainWindow uneMainWindow)
            {
                // La méthode-event 'RecupererMesInfosEvent' est celle que tu appelleras dans ta classe MainWindow, dans la méthode correspondant au bouton de validation
               // L'Handler 'InfosBaseHandlerOK' est celui que tu déclareras dans ta méthode MainWindow, avec les objets que tu veux ramener (en l'occurence ton string_Instrument)
              // La méthode 'RécuperationDeMesInfos' est celle que tu définiras dans cette classe (voir ci-dessous), avec en paramètre les mêmes que ceux de ton Handler (ton string_Instrument)
                nw.RecupererMesInfosEvent += new MainWindow.InfosBaseHandlerOK(RecuperationDeMesInfos);
     
            }
     
     public void RecuperationDeMesInfos(string unStringInstrument )
            {
                //Tu fais les opérations que tu veux, comme assigner cette variable à un objet local de la classe pour pouvoir le réutiliser...
            }

    Dans ton 'MainWindow' :

    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
     public partial class MainWindow : Window
        {
            private  string _instrument;
           //Tu déclares un event que tu 'type' avec le même nommage que l'Handler de ta classe Main, et tu lui donnes le nom de la méthode-event de la classe Main.
       public event InfosBaseHandlerOK RecupererMesInfosEvent;
          // Tu déclares ton Handler avec le même nom que le type de l'event, et en paramètre ce que tu veux retourner (ton string_Instrument)
            public delegate void InfosBaseHandlerOK(String unStringInstrument);
     
     
            public string Instrument
            {
                get { return _instrument; }
            }
            public MainWindow()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                _instrument= combobox1.Text;
               //Tu appelles ta méthode-event dans laquelle tu mets ton string
               RecupererMesInfosEvent(_instrument); 
            }
        }

    Voilà j'espère que ça va t'aider!

    Arnaud DS

Discussions similaires

  1. appeler une page par un bouton
    Par ph_anrys dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/06/2006, 17h04
  2. [VB6] Appeler une procedure par son nom.
    Par kenn dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 24/05/2006, 09h29
  3. Réponses: 5
    Dernier message: 15/09/2005, 14h05
  4. Réponses: 6
    Dernier message: 15/09/2005, 14h04
  5. Appel de procédure par contenu de variable
    Par lil_jam63 dans le forum Langage
    Réponses: 9
    Dernier message: 13/09/2004, 08h05

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