3 votes

diviser une console en deux parties pour deux sorties

Je suis en train de créer une application console dans laquelle je voudrais avoir deux sorties et une entrée. La raison en est qu'une sortie est toujours visible.

This is the first output
Text flows upwards just like a regular console application, however...

---------
This is a second output
This is placed at the bottom of the console // also input goes here.

Je pensais l'appeler comme ça

 Console.Out.Writeline("This is the first output");
 Console.Out.Writeline("Text flows upwards just like a regular console application, however...");
 MyTextWriter.WriteLine("This is a second output");
 MyTextWriter.WriteLine("This is placed at the bottom of the console");

Mais comment faire pour diviser la console en deux parties ? Est-ce même possible ?

7voto

Gabriel Brookman Points 163

Si je comprends bien, vous pouvez utiliser Console.SetCursorPosition pour dessiner le texte où vous le souhaitez. Voici un exemple rudimentaire qui divise la console en deux zones avec du texte s'écoulant vers le haut lorsqu'il est ajouté à celles-ci.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static List<string> area1 = new List<string>();
        static List<string> area2 = new List<string>();
        static int areaHeights = 0;

        static void Main(string[] args)
        {
            // Number of rows for each area
            areaHeights = (Console.WindowHeight - 2) / 2;

            drawScreen();

            int i = 0;
            while (true)
            {
                i++;

                // jumb between areas
                if (i % 2 == 0)
                    AddLineToBuffer(ref area1, Console.ReadLine());
                else
                    AddLineToBuffer(ref area2, Console.ReadLine());

                drawScreen();
            }
        }

        private static void AddLineToBuffer(ref List<string> areaBuffer, string line)
        {
            areaBuffer.Insert(0, line);

            if (areaBuffer.Count == areaHeights)
            {
                areaBuffer.RemoveAt(areaHeights - 1);
            }
        }

        private static void drawScreen()
        {
            Console.Clear();

            // Draw the area divider
            for (int i = 0; i < Console.BufferWidth; i++)
            {
                Console.SetCursorPosition(i, areaHeights);
                Console.Write('=');
            }

            int currentLine = areaHeights - 1;

            for (int i = 0; i < area1.Count; i++)
            {
                Console.SetCursorPosition(0, currentLine - (i + 1));
                Console.WriteLine(area1[i]);

            }

            currentLine = (areaHeights * 2);
            for(int i = 0; i < area2.Count; i++)
            {
                Console.SetCursorPosition(0, currentLine - (i + 1));
                Console.WriteLine(area2[i]);
            }

            Console.SetCursorPosition(0, Console.WindowHeight - 1);
            Console.Write("> ");

        }

    }
}

Je suppose que vous voulez remplir chaque zone non seulement avec l'entrée de l'utilisateur ? Si c'est le cas, vous devez configurer le dessin de la console dans un thread séparé et laisser ce thread mettre à jour l'écran lorsque cela est nécessaire.

1voto

MTs Points 162

Si je vous ai bien compris, ceci peut vous aider :

Console.WriteLine("Head");
Console.WriteLine("Message");
Console.ReadKey();
Console.SetCursorPosition(0, 1);
Console.WriteLine("Message2");

0voto

Timwi Points 30896

La console standard de Windows ne fournit aucune fonctionnalité de ce type. Vous devrez écrire votre propre type de fenêtre qui fait cela.

0voto

C_Rance Points 428

Idée unique, mais jusqu'à présent je n'ai pas remarqué quelque chose de similaire en utilisant une simple application console.

Alors qu'est-ce qui vous empêche d'utiliser un formulaire d'application et de diviser le programme en 2 parties différentes ?

Un autre moyen que vous pourriez essayer est de sortir sur deux consoles différentes, ce que vous ne voulez probablement pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X