Effacement de la console en Windows Form

Résolu
MGD Software Messages postés 188 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 4 juillet 2024 - 4 sept. 2018 à 14:11
pascal16m Messages postés 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020 - 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?
A voir également:

3 réponses

MGD Software Messages postés 188 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 4 juillet 2024 2
5 sept. 2018 à 18:14
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
0
pascal16m Messages postés 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020
5 sept. 2018 à 21:25
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.
0
pascal16m Messages postés 73 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 12 novembre 2020
5 sept. 2018 à 21:33
0
Rejoignez-nous