加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将控制台分成两部分,用于两个输出

发布时间:2020-12-16 01:37:22 所属栏目:百科 来源:网络整理
导读:我正在创建一个控制台应用程序,我希望有两个输出和一个输入.原因是一个输出始终可见. This is the first outputText flows upwards just like a regular console application,however...---------This is a second outputThis is placed at the bottom of th
我正在创建一个控制台应用程序,我希望有两个输出和一个输入.原因是一个输出始终可见.

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.

我想把它称为这样的东西

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

但是我如何将控制台拆分为两部分呢?它甚至可能吗?

解决方法

如果我理解正确,您可以使用Console.SetCursorPosition在您想要的地方绘制文本.这是一个粗略的例子,它将控制台分成两个区域,文本在向上移动时向上流动.

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

        }

    }
}

我假设你想要用户输入来填充每个区域?如果是这样,您需要在单独的线程中设置控制台的绘图,并让该线程在需要时更新屏幕.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读