从我的应用程序中的任何位置将文本附加到 RichTextBox
Append text to RichTexBox from anywhere in my application
我正在尝试 'Append' 将文本发送到我用作日志的 Richtextbox window 以显示来自我的 Winforms 应用程序和其他服务 classes 的事件。为了清楚起见,我想附加文本。
我已经尝试了这里建议的所有方法。我在表单中设置了一个 public 属性,我创建了一个委托,我创建了一个 class 来处理它。但它不会附加文本,它会清除 window (当我使用
var f = new Form1();
,我明白为什么会这样,因为它在内存中创建了一个新的表单)
我最接近让它工作的是下面的class我写的。
class RichTextBoxAppend
{
public static void AddNewText(string message, Form1 f)
{
f.richLogWindow.AppendText(DateTime.Now.ToString() + ": " + message + "\r\n");
}
}
我通过以下方式从另一个 class 方法调用它:
public SomeClass{
public SomeMethod(){
//Some stuff happens here
RichTextBoxAppend.AddNewText("Some message", Form1);
}
}
我收到的错误是
'Form1' is a type, which is not valid in the given context
我不想在内存中创建新表单,因为这会清除 Richtextbox。
总而言之,我想 "Append" 从应用程序中的任何位置输入文本,而不清除 Richtextbox。
TIA
您需要将 Form1 的实例从创建方式直接传递到使用方式。例如,
请相信您正在从您的 Form1 调用 SomeClass.SomeMethod(以防万一,您还有其他一些中间体 class,请按照此处所述继续传递 Form 实例)。
首先,您需要重写 SomeClass 和 RichTextAppend Class 如下。
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 事件中),您需要将 Form 实例传递给您的 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);
通过将表单实例从您的表单直接传递到需要它的 classes,您可以访问该实例。
我正在尝试 'Append' 将文本发送到我用作日志的 Richtextbox window 以显示来自我的 Winforms 应用程序和其他服务 classes 的事件。为了清楚起见,我想附加文本。
我已经尝试了这里建议的所有方法。我在表单中设置了一个 public 属性,我创建了一个委托,我创建了一个 class 来处理它。但它不会附加文本,它会清除 window (当我使用
var f = new Form1();
,我明白为什么会这样,因为它在内存中创建了一个新的表单)
我最接近让它工作的是下面的class我写的。
class RichTextBoxAppend
{
public static void AddNewText(string message, Form1 f)
{
f.richLogWindow.AppendText(DateTime.Now.ToString() + ": " + message + "\r\n");
}
}
我通过以下方式从另一个 class 方法调用它:
public SomeClass{
public SomeMethod(){
//Some stuff happens here
RichTextBoxAppend.AddNewText("Some message", Form1);
}
}
我收到的错误是
'Form1' is a type, which is not valid in the given context
我不想在内存中创建新表单,因为这会清除 Richtextbox。
总而言之,我想 "Append" 从应用程序中的任何位置输入文本,而不清除 Richtextbox。
TIA
您需要将 Form1 的实例从创建方式直接传递到使用方式。例如,
请相信您正在从您的 Form1 调用 SomeClass.SomeMethod(以防万一,您还有其他一些中间体 class,请按照此处所述继续传递 Form 实例)。
首先,您需要重写 SomeClass 和 RichTextAppend Class 如下。
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 事件中),您需要将 Form 实例传递给您的 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);
通过将表单实例从您的表单直接传递到需要它的 classes,您可以访问该实例。