代码之家  ›  专栏  ›  技术社区  ›  default

将控制台分成两部分以获得两个输出

  •  3
  • default  · 技术社区  · 15 年前

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

    4 回复  |  直到 15 年前
        1
  •  7
  •   Merrimack    15 年前

    如果我理解正确,你可以用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("> ");
    
            }
    
        }
    }
    

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

        2
  •  1
  •   MTs    15 年前

    如果我理解正确,这可能会有帮助:

    Console.WriteLine("Head");
    Console.WriteLine("Message");
    Console.ReadKey();
    Console.SetCursorPosition(0, 1);
    Console.WriteLine("Message2");
    
        3
  •  0
  •   Timwi    15 年前

    标准Windows控制台不提供任何此类功能。你将不得不写你自己的窗口,这样做。

        4
  •  0
  •   C_Rance    15 年前

    独特的想法,但到目前为止,我还没有注意到类似的东西使用一个普通的控制台应用程序。

    您可能希望尝试的另一种方法是输出到2个不同的控制台中,这很可能是您不希望的。

    推荐文章