【问题标题】:Console.SetWindowSize() and Console.Clear() not working as expectedConsole.SetWindowSize() 和 Console.Clear() 未按预期工作
【发布时间】:2023-02-22 16:19:29
【问题描述】:

我正在编写一个相当简单的控制台应用程序,我想将控制台窗口设置为特定大小。我一直在尝试 Console.SetWindowSize() 和 Console.WindowHeight/WindowWidth,但似乎都没有改变实际的窗口大小。从实验来看,他们所做的似乎是改变窗口内可以绘制文本的区域,这与我所期望的不太一样。

此外,似乎 Console.Clear() 也不太有效。结果似乎难以预料。有时以前的输出会被清除,有时不会,新的输出只是写在上面(旧的偶尔可见)。

我注意到,如果我通过用鼠标四处拖动来手动“弄乱”窗口大小,输出会变得非常乱码。看起来当前和旧数据或多或少随机地相互覆盖。

public TestScreen()
      {
            Console.WindowHeight = 20;
            Console.WindowWidth = 20;
            Console.WriteLine("Test 1");
            Console.WriteLine("Max height: " + Console.LargestWindowHeight.ToString());
            Console.WriteLine("Max width: " + Console.LargestWindowWidth.ToString());
            Console.ReadKey();
            Console.Clear();
            Console.SetWindowSize(10, 10);
            Console.WriteLine("Test 2");
            Console.WriteLine("Max height: " + Console.LargestWindowHeight.ToString());
            Console.WriteLine("Max width: " + Console.LargestWindowWidth.ToString());
            Console.ReadKey();
            Console.Clear();
      }

结果: 1 , 2 (after pressing any key), 3 (after playing around with the window size)

【问题讨论】:

    标签: c# windows-console


    【解决方案1】:
    1. Console.SetWindowSize() 设置控制台缓冲区的大小,而不是实际的窗口大小。如果要设置控制台窗口大小,可以结合使用 Console.SetWindowSize() 和 Console.SetBufferSize()。例如,您可以使用以下代码将窗口大小设置为 20x20:

      控制台.SetWindowSize(20, 20); Console.SetBufferSize(20, 20);

    2. Console.Clear() 清除控制台缓冲区,但并不总是清除整个控制台窗口。如果要确保清除整个控制台窗口,可以在调用Console.Clear() 之前使用Console.SetCursorPosition() 将光标位置设置到控制台窗口的左上角。例如:

      Console.SetCursorPosition(0, 0); 控制台.清除();

    3. 手动调整控制台窗口大小时,控制台缓冲区大小可能与窗口大小不匹配,这会导致输出出现乱码。为避免此问题,请使用 Console.SetBufferSize() 确保控制台缓冲区大小与窗口大小匹配。

      这是设置控制台窗口大小并清除控制台的代码的更新版本:

      public TestScreen()
      {
          Console.SetWindowSize(20, 20);
          Console.SetBufferSize(20, 20);
          Console.WriteLine("Test 1");
          Console.WriteLine("Max height: " + Console.LargestWindowHeight.ToString());
          Console.WriteLine("Max width: " + Console.LargestWindowWidth.ToString());
          Console.ReadKey();
          Console.SetCursorPosition(0, 0);
          Console.Clear();
          Console.SetWindowSize(10, 10);
          Console.SetBufferSize(10, 10);
          Console.WriteLine("Test 2");
          Console.WriteLine("Max height: " + Console.LargestWindowHeight.ToString());
          Console.WriteLine("Max width: " + Console.LargestWindowWidth.ToString());
          Console.ReadKey();
          Console.SetCursorPosition(0, 0);
          Console.Clear();
      }
      

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2022-01-24
      • 2015-05-11
      相关资源
      最近更新 更多