前言
在开发桌面应用程序时,将日志输出到UI界面是一种常见的需求,尤其是在调试和错误跟踪时。C#提供了多种方式来实现这一功能,包括使用TextBox、RichTextBox、ListBox等控件。本笔记将记录如何使用RichTextBox控件在WinForms应用程序中实现日志输出。
效果如图
一、 RichTextBox 控件
RichTextBox 控件是WinForms中用于显示和编辑富文本的控件。它支持多种文本格式,包括粗体、斜体、下划线等,并且可以包含文本和图像。在输出日志时,RichTextBox控件可以提供比TextBox控件更丰富的视觉体验。
二、创建WinForms项目
略
三、添加RichTextBox控件
从工具箱拖转RichTextBox控件到窗体,默认命名richTextBox1。
四、创建日志类
public class LogHelper
{
private RichTextBox _richTextBox;
public LogHelper(RichTextBox richTextBox)
{
this._richTextBox = richTextBox;
}
private void LogMessage(string message, LogLevel logLevel)
{
_richTextBox.SelectionStart = _richTextBox.TextLength;
_richTextBox.SelectionLength = 0;
switch (logLevel)
{
case LogLevel.Info:
_richTextBox.SelectionColor = Color.Green;
break;
case LogLevel.Error:
_richTextBox.SelectionColor = Color.Red;
break;
}
_richTextBox.AppendText(message);
_richTextBox.SelectionColor = _richTextBox.ForeColor;
_richTextBox.ScrollToCaret();
}
public void Log(string message, LogLevel logLevel = LogLevel.Info)
{
string logMessage = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {logLevel.ToString().ToUpper()} - {message}{Environment.NewLine}" ;
if (_richTextBox.InvokeRequired)
_richTextBox.Invoke(new MethodInvoker(() => LogMessage(logMessage, logLevel)));
else
{
LogMessage(logMessage, logLevel);
}
}
}
public enum LogLevel
{
Info,
Error
}
五、使用日志类
窗体上添加2个按钮模拟输出日志
private LogHelper _logHelper;
public Form1()
{
InitializeComponent();
_logHelper = new LogHelper(this.richTextBox1);
_logHelper.Log("程序启动");
}
private void button1_Click(object sender, EventArgs e)
{
_logHelper.Log("我是正常日志", LogLevel.Info);
}
private void button2_Click(object sender, EventArgs e)
{
//模拟异步调用
Task.Run(() => {
_logHelper.Log("我是异常日志(异步的)", LogLevel.Error);
});
}