Effacement de la console en Windows Form [Résolu]

MGD Software 93 Messages postés vendredi 1 septembre 2006Date d'inscription 21 septembre 2018 Dernière intervention - 4 sept. 2018 à 14:11 - Dernière réponse : pascal16m 54 Messages postés jeudi 19 juin 2003Date d'inscription 21 septembre 2018 Dernière intervention
- 5 sept. 2018 à 21:33
Bonjour,

Je développe une application de bureau (Windows Forms) comprenant des calculs très complexes, et je sors beaucoup de résultats intermédiaires dans le panneau "Sortie" avec l'instruction Console.WriteLine().

Pour que la lecture soit claire, je dois effacer manuellement le panneau Sortie avant chaque lancement du calcul. J'aimerais pouvoir disposer d'une procédure qui effectue ce travail, que j'appellerais au début de chaque calcul.

Tout ce que j'ai trouvé sur le net (beaucoup d'articles pourtant) ne concerne que les applications console.

Tenter d'utiliser l'instruction Console.Clear() provoque une exception :
System.IO.IOException : 'Descripteur non valide'


Quelqu'un pourrait-il m'indiquer si c'est possible et comment faire?
Afficher la suite 

Votre réponse

3 réponses

MGD Software 93 Messages postés vendredi 1 septembre 2006Date d'inscription 21 septembre 2018 Dernière intervention - 5 sept. 2018 à 18:14
0
Merci
J'ai trouvé !
En navigant pour autre chose, j'ai trouvé cette discussion chez StackOverflow (avec des mots clés ne contenant pas console !) :
https://stackoverflow.com/questions/17095975/how-to-clear-debugger-output-window-visual-studio-2012

Pour vous éviter de naviguer, voici le code de la fonction :
    /// <summary>
    /// Clear the Output window-pane of Visual Studio.
    /// Note: Causes a 1-second delay.
    /// </summary>
    public static void ClearOutputWindow()
    {
        if (!Debugger.IsAttached)
        {
            return;
        }

        //Application.DoEvents();  // This is for Windows.Forms.
        // This delay to get it to work. Unsure why. See http://stackoverflow.com/questions/2391473/can-the-visual-studio-debug-output-window-be-programatically-cleared
        Thread.Sleep(1000);
        // In VS2008 use EnvDTE80.DTE2
        EnvDTE.DTE ide = (EnvDTE.DTE)Marshal.GetActiveObject("VisualStudio.DTE.10.0");
        if (ide != null)
        {
            ide.ExecuteCommand("Edit.ClearOutputWindow", "");
            Marshal.ReleaseComObject(ide);
        }
    }

Personnellement, j'ai décommenté le DoEvents mais supprimé le sleep (donc plus besoin du using System.Threading). Ça marche bien.

Il faut penser à ajouter la référence à EnvDTE, et déclarer le using System.Runtime.InteropServices
Commenter la réponse de MGD Software
pascal16m 54 Messages postés jeudi 19 juin 2003Date d'inscription 21 septembre 2018 Dernière intervention - 5 sept. 2018 à 21:25
0
Merci
Wello,
j'ai essayé de reproduire l'erreur et je l'ai eu aussi.

Dans les options du projet, sortie=console et ça marche sans erreur.
Sinon, je pense qu'il est possible de "récupérer" un pointeur vers la console pour faire un .Clear sur un pointeur vers la console.
Commenter la réponse de pascal16m
pascal16m 54 Messages postés jeudi 19 juin 2003Date d'inscription 21 septembre 2018 Dernière intervention - 5 sept. 2018 à 21:33
Commenter la réponse de pascal16m

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.