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("> "); } } } 我假设你想要用户输入来填充每个区域?如果是这样,您需要在单独的线程中设置控制台的绘图,并让该线程在需要时更新屏幕. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |