从我的应用程序中的任何位置将文本追加到RichTexBox中

时间:2018-12-14 11:57:07

标签: c# winforms richtextbox appendtext

我正在尝试将文本“附加”到我用作日志窗口的Richtextbox中,以显示来自Winforms应用程序以及其他服务类的事件。为了清楚起见,我想添加文字。

我已经尝试了这里提出的所有建议。我已经在表单中设置了一个公共属性,我创建了一个委托,我创建了一个类来处理它。但是它不会附加文本,它会清除窗口(当我使用 var f = new Form1();,我确实理解为什么会在内存中创建新表单时发生这种情况

最接近使它起作用的是我编写的以下课程。

class RichTextBoxAppend
    {        
        public static void AddNewText(string message, Form1 f)
        {
            f.richLogWindow.AppendText(DateTime.Now.ToString() + ": " + message + "\r\n");
        }
    }

我通过以下方法从另一个类方法调用它:

public SomeClass{
    public SomeMethod(){
        //Some stuff happens here
        RichTextBoxAppend.AddNewText("Some message", Form1);
    }
}

我得到的错误是

  

“ Form1”是一种类型,在给定的上下文中无效

我不想在内存中创建新表单,因为这会清除Richtextbox。

总而言之,我想在应用程序中的任何位置“附加”文本,而无需清除Richtextbox。

TIA

1 个答案:

答案 0 :(得分:1)

您需要将Form1的实例从创建方式直接传递到使用位置。例如,

相信您正在从Form1调用SomeClass.SomeMethod(以防万一,您还有其他中间类,请按照此处所述继续传递Form Instance)。

首先,您需要按如下方式重写SomeClass和RichTextAppend类。

class RichTextBoxAppend
{
    public static void AddNewText(string message, Form1 f)
    {
         f.RichText.AppendText(DateTime.Now.ToString() + ": " + message + "\r\n");
     }
}

public class SomeClass
{
    public void SomeMethod(Form1 form)
    {
        //Some stuff happens here
        RichTextBoxAppend.AddNewText("Some message", form);
    }
}

然后,从您调用SomeClass.SomeMethod的位置(在这种情况下,假设它发生在Button Click事件中),您需要将表单实例传递给SomeMethod。

public partial class Form1 : Form
{
public RichTextBox RichText => richLogWindow;
private void button1_Click_1(object sender, EventArgs e)
{
   var someclass = new SomeClass();
   someclass.SomeMethod(this);
}
}

在下面的行中,您将Form1的实例传递给SomeMethod(因为您在Form1中引用了“ this”,所以它引用了Form1的实例)

someclass.SomeMethod(this);

通过将表单实例从您的表单传递到需要它的类,您可以访问该实例。