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 :

Afficher la console en Windows form [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut Afficher la console en Windows form
    Bonjour

    J'ai cree un programme en console, et je souhaite le lancer a partir d'un windows form, mais le texte de la console doit s'afficher dans une listebox comment faire ceci, c'est possible au moins ?

    PS : le programme en console doit absolument rester en console.

    Merci d'avance de vos reponse

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Par défaut
    Bonjour,

    je te conseille de jeter un oeil aux propriétés ProcessStartInfo.RedirectStandardOutput et ProcessStartInfo.RedirectStandardError

    ... allé, vu que ça m'intéressait de savoir comment ça pouvait marcher j'ai testé.

    Voici ce que j'ai vite pondu. A adapter évidement. J'ai utiliser une textbox ici.

    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
            private void ButtonClick(object sender, EventArgs e)
            {
                Process consolProgram = new Process();
                consolProgram.StartInfo.FileName = "C:\\temp\\Console.exe";
     
                consolProgram.StartInfo.UseShellExecute = false; 
                consolProgram.StartInfo.RedirectStandardOutput = true;
                consolProgram.StartInfo.RedirectStandardError = true;
     
                consolProgram.OutputDataReceived += new DataReceivedEventHandler(ConsoleOutputDataReceived);
                consolProgram.ErrorDataReceived += new DataReceivedEventHandler(ConsoleOutputDataReceived); 
                consolProgram.Start();
                consolProgram.BeginOutputReadLine();
                consolProgram.BeginErrorReadLine();
            }
     
            private void ConsoleOutputDataReceived(object sender, DataReceivedEventArgs e)
            {
                m_textBox.Invoke(new MethodInvoker(() => { m_textBox.AppendText(e.Data); }));
            }


    Attention que si il y a un readkey() dans ton programme console, il faut traiter l'exception

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Par défaut
    J'arrive a afficher la console dans la liste box mais il a pas une autre méthode plus simple, je comprend pas très bien ces commandes.
    Pouvez vous me les expliquer ?

    Merci

  4. #4
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Je pense qu'il serait difficile de faire plus court et plus facile que le code que mkl238 nous a fait.

    Je vais donc me permettre de te donner quelques explications en essayant d'être complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    consolProgram.StartInfo.UseShellExecute = false;
    la propriété UseShellExecute doit être à false pour permettre de rediriger les flux d'entrée de sortie et d'erreur.

    Les 2 lignes suivantes permettent de spécifier que tu désires rediriger le flux de sortie ainsi que celui-des erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    consolProgram.StartInfo.RedirectStandardOutput = true;
    consolProgram.StartInfo.RedirectStandardError = true;
    Les 2 lignes suivantes permettent de définir des événements qui seront déclenchés lorsqu'il y aura des modifications sur le flux de sortie et d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    consolProgram.OutputDataReceived += new DataReceivedEventHandler(ConsoleOutputDataReceived);
    consolProgram.ErrorDataReceived += new DataReceivedEventHandler(ConsoleOutputDataReceived);
    La fonction "ConsoleOutputDataReceived" que tu vois à la fin sera donc appelée à chaque déclenchement des 2 événements. C'est à cet endroit que tu placeras les fonctions de remplissage de ta liste.

    Les 2 dernière lignes de la fonction principale permettent de lancer la lecture sur les flux cités plus haut de manière asynchrone. Ce système permet de ne pas "freezer" ton interface utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    consolProgram.BeginOutputReadLine();
    consolProgram.BeginErrorReadLine();
    Je pense que les autres lignes se comprennent d'elles même

    J'espère avoir été assez clair dans mes explications. Pour plus d'information tu peux aller lire la documentation du msdn concernant la classe Process.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Par défaut
    Tu m'as devancé Infosam, j'avais commenté mon code en vue de répondre après le boulot :p .

    je le mets malgré tout, même si tu as tout dit ^^...

    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
            private void ButtonClick(object sender, EventArgs e)
            {
                Process consolProgram = new Process();
     
                // Initialise les infos de démarrage du processus
                consolProgram.StartInfo.FileName = "C:\\temp\\Console.exe";
     
                consolProgram.StartInfo.UseShellExecute = false; // indique que le shell ne doit pas créer le process, c'est le programme qui le fait
                consolProgram.StartInfo.RedirectStandardOutput = true; // indique que le flux standard de sortie du process (à savoir ici, l'affichage sur la console) sera redirigé
                consolProgram.StartInfo.RedirectStandardError = true; // idem pour la sortie des erreurs
     
                // Abonne la méthode ConsoleOutputDataReceived à l'évènement OutputDataReceived (à chaque fois que le process aura un évènement d'output, la méthode ConsoleOutputDataReceived sera appelée)
                consolProgram.OutputDataReceived += new DataReceivedEventHandler(ConsoleOutputDataReceived);
     
                // Abonne la méthode ConsoleOutputDataReceived à l'évènement ErrorDataReceived
                consolProgram.ErrorDataReceived += new DataReceivedEventHandler(ConsoleOutputDataReceived); 
     
                // Démarrage du processus
                consolProgram.Start();
     
                // on signale qu'on commence a lire le flux standard de sortie et d'erreur
                consolProgram.BeginOutputReadLine();
                consolProgram.BeginErrorReadLine();
            }
     
            private void ConsoleOutputDataReceived(object sender, DataReceivedEventArgs e)
            {
                // on appelle la méthode m_textBox.AppendText(e.Data);, mais vu que l'évènement appelant la méthode est lancée par le processus console (un autre thread) on doit utiliser Control.Invoke (Form courant ou textbox, tant que c'est un controle du thread principal)
                // c'est écrit avec MethodInvoker parce que j'étais trop fade que pour faire un delegate
                Invoke(new MethodInvoker(() => { m_textBox.AppendText(e.Data); }));
            }
    Il n'y a effectivement pas plus simple pour faire ce que tu souhaites. C'est déjà très simple.

  6. #6
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    désolé mkl238
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. [Interaction] Comment afficher une application Windows Form dans une WPF ?
    Par Lookoum dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 08/09/2008, 16h50
  2. Réponses: 6
    Dernier message: 04/08/2008, 16h36
  3. Comment afficher le concepteur Windows Forms ?
    Par tost dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 13/11/2007, 21h06
  4. [C++ .NET] Disposer d'une console de déboguage en Windows Form
    Par pierre.chatelier dans le forum C++/CLI
    Réponses: 4
    Dernier message: 04/09/2007, 14h31
  5. [C++ .NET] Disposer d'une console de déboguage en Windows Form
    Par pierre.chatelier dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 04/09/2007, 13h18

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