分成两部分控制台的两个输出 [英] split a console in two parts for two outputs

查看:281
本文介绍了分成两部分控制台的两个输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建一个控制台应用程序,我想有两个输出和一个输入。之所以会如此,一个输出始终是可见的。

I'm creating a console application where I would like to have two outputs and one input. The reason would be so that one output is always 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.



我想调用它像这样

I was thinking of calling it something like this

 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");



不过,我将如何去两部分分裂控制台?它甚至有可能?

But how would I go about splitting the console in two parts? Is it even possible?

推荐答案

如果我理解正确,你可以使用Console.SetCursorPosition你希望它绘制文本。 。下面是在两个方面与当添加到他们的文本向上流动分裂控制台粗例如

If I understand you correctly you can use Console.SetCursorPosition to draw text where you want it. Here's a crude example that split the console in two areas with text flowing upward when added to them.

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("> ");

        }

    }
}

我假设你要填充每个区域不仅与用户输入的?如果是这样你需要设置控制台的绘制在一个单独的线程,并让需要的时候该线程更新屏幕。

I assume you want to fill each area not only with user input? If so you need to set up the drawing of the console in a separate thread and let that thread update the screen when needed.

这篇关于分成两部分控制台的两个输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆