从不同的类中写入窗体中的RichTextBox

本文关键字:窗体 RichTextBox | 更新日期: 2023-09-27 18:13:01

我使用的是RichTextBox,这是在Form,我基本上使用作为日志窗口,而程序执行各种功能-很像一个调试窗口。各种方法在对各种文件执行任务时写入窗口。这个简单的类看起来像这样:

public partial class ValidationWindow : Form
    {
        public ValidationWindow()
        {
            InitializeComponent();
        }
        public void writeToWindow(string text)
        {
            if (richTextBoxValidationWindow.TextLength > 0)
            {
                richTextBoxValidationWindow.AppendText(Environment.NewLine + text);
            }
            else
            {
                richTextBoxValidationWindow.Text = text;
            }
        }
}

我已经实例化了包含文本框的表单,从一个类中以通常的方式,即ValidationWindow valWindow = new ValidationWindow(),然后调用show()方法来显示窗口,然后我可以使用上面的类中称为writeToWindow的方法来写入它。所有好。

我现在需要能够继续从其他类写入相同的窗口。显然,我不想为同一个Validation Window创建更多实例。那么,最好的方法是什么呢?

从不同的类中写入窗体中的RichTextBox

听起来您需要从其他表单和类访问此表单。换句话说,您需要这个表单是全局可访问的。

要做到这一点,最简单的方法是向应用程序添加一个全局变量,并在该变量中保存对日志窗口的引用。然后,如果任何其他类需要记录日志,它可以通过全局变量访问日志窗口。

然而,这可能不是最好的方法,因为您将日志记录绑定到该窗口。如果您决定以不同的方式记录会发生什么?您必须更改对窗口的每个引用,这意味着整个应用程序都要更改。您最好看看消息之类的东西,它允许调用代码发送一条请求记录某些内容的消息,但不需要知道接收消息并执行实际记录的类的任何信息。我知道WOF支持MVVM,但我不确定你会如何在WinForms中做到这一点(假设这是你正在使用的)。也许你可以在"winforms messages"上搜索一下,看看会出现什么。

希望有帮助