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

Signaler
Messages postés
182
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
19 juillet 2020
-
Messages postés
69
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
22 décembre 2019
-
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?
A voir également:

3 réponses

Messages postés
182
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
19 juillet 2020

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
Messages postés
69
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
22 décembre 2019

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.
Messages postés
69
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
22 décembre 2019