c# - 如何将类似控制台的元素添加到 c# winforms 程序

标签 c# .net winforms

我有一个监视调试消息的程序,我尝试使用 TextBox 并将消息附加到它,但它不能很好地扩展,并且当消息数量变大时速度会变慢。然后,我尝试了一个 ListBox,但在添加新消息时,滚动会快速移动到顶部。它也不允许像文本框那样进行剪切和粘贴。

在 winforms 窗口中实现类似控制台的元素的更好方法是什么。

编辑: 我仍然希望能够嵌入像 visual studio 这样的输出窗口,但由于我无法找到一种简单的方法,因此我使用了两种解决方案。 除了使用有效的 RichTextBox 之外,您还必须时不时地清除它。我使用 pinvoke 的控制台。这是我为处理此问题而编写的一个小包装类。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Con
{
   class Ext_Console 
   {
      static bool console_on = false;

      public static void Show(bool on,string title)
      {
         console_on = on;
         if (console_on)
         {
            AllocConsole();
            Console.Title = title;
            // use to change color
            Console.BackgroundColor = System.ConsoleColor.White;
            Console.ForegroundColor = System.ConsoleColor.Black;

         }
         else
         {
            FreeConsole();
         }
      }

      public static void Write(string output)
      {
         if (console_on)
         {
            Console.Write(output);
         }
      }

      public static void WriteLine(string output)
      {
         if (console_on)
         {
            Console.WriteLine(output);
         }
      }

      [DllImport("kernel32.dll")]
      public static extern Boolean AllocConsole();
      [DllImport("kernel32.dll")]
      public static extern Boolean FreeConsole();
   }
}


// example calls
Ext_Console.Write("console output  ");
Ext_Console.WriteLine("console output");
Ext_Console.Show(true,"Title of console");


最佳答案

RichTextBox 有一个快速的 AppendText 方法。 并且它可以很好地处理大文本。
我相信它是满足您需求的最佳选择。

关于c# - 如何将类似控制台的元素添加到 c# winforms 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/252323/

相关文章:

c# - 如何找出文件是否存在于 C#/.NET 中?

c++ - 在使用 C++ 和 .NET 的 Windows 系统编程中,如何进行 System.Diagnostics::Process.Start() 调用并在原始窗口中输出?

winforms - 更改 ListView.ShowItemToolTips 会引发 ItemChecked 事件

C# Visual Studio 使用资源文件

c# - 字符串转换器获取标准值集合

c# - 如何判断 datagridview 列是图像列还是复选框列?

c# - 去掉 HTML 标签?

c# - 在 Singleton 服务中使用 IOptionsMonitor 在运行时从 appsettings 重新加载值

.net - 如何在启动时运行一次单击一次部署的应用程序?

c# - BindingSource.查找多个列