我正在创建一个控制台应用程序,我希望有两个输出和一个输入。原因是一个输出始终可见。
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");
但是我如何将控制台拆分为两部分呢?它甚至可能吗?
答案 0 :(得分:6)
如果我理解正确,您可以使用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("> ");
}
}
}
我假设你想要用户输入来填充每个区域?如果需要,您需要在一个单独的线程中设置控制台的绘图,并让该线程在需要时更新屏幕。
答案 1 :(得分:1)
如果我理解正确,这可能会有所帮助:
Console.WriteLine("Head");
Console.WriteLine("Message");
Console.ReadKey();
Console.SetCursorPosition(0, 1);
Console.WriteLine("Message2");
答案 2 :(得分:0)
标准Windows控制台不提供此类功能。你必须编写自己的窗口才能做到这一点。
答案 3 :(得分:0)
独特的想法,但到目前为止,我还没有注意到使用普通控制台应用程序的类似内容。
那么是什么阻止你使用表单应用程序并将程序分成两个不同的部分?
您可能想尝试的另一种方法是输出到2个不同的控制台,这很可能是您不想要的。