【问题标题】:Append text to RichTexBox from anywhere in my application从我的应用程序的任何位置将文本附加到 RichTextBox
【发布时间】:2018-12-14 11:57:07
【问题描述】:

我正在尝试将文本“附加”到我用作日志窗口的 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

【问题讨论】:

  • 抱歉,这是我的打字错误。我已经更新了问题。
  • RichTextBoxAppend.AppendText("Some message", Form1); Form1 是一个类型,你需要传递你的 form1Instance 或者你命名你的 Form1 对象
  • 如果不创建新表单,我无法从另一个类传递表单,然后它会清除richtextbox 中的所有文本。
  • 您只需创建一次表单,然后将其传递给您可能需要的所有AppendText 调用
  • 就像一个注释一样,您不必将表单作为参数传递,因为您可以从 Application.OpenForms 访问它 - 假设只有一个,您可以使用类似 var form = Application.OpenForms.Cast<Form>().Single(f => f is Form1) 的东西RichTextBoxAppend

标签: c# winforms richtextbox appendtext


【解决方案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 事件中),您需要将 Form Instance 传递给您的 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);

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

【讨论】:

  • 谢谢你,我不知道为什么我有这样的心理障碍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
相关资源
最近更新 更多