C# 如何在WindowsForm中更改来自不同类的textfield中的文本

C# 如何在WindowsForm中更改来自不同类的textfield中的文本,c#,winforms,C#,Winforms,对于一个项目,我试图使用不同类中的方法更改RichTextBox的文本。但是,当尝试传递字符串时,它不会更改文本,但当我写入Console.Writeline时,它会显示出来 我认为问题在于,我必须刷新WindowsForm,才能更改文本 namespace RichTextBox { public partial class Form1 : Form { public Form1() { InitializeCompone

对于一个项目,我试图使用不同类中的方法更改RichTextBox的文本。但是,当尝试传递字符串时,它不会更改文本,但当我写入
Console.Writeline
时,它会显示出来

我认为问题在于,我必须刷新
WindowsForm
,才能更改文本

namespace RichTextBox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
             addText.returnText();
         }

        public void addData(string s)
        {
            richTextBox1.AppendText(s);
            Console.WriteLine(s);
        }
    }
}
另一类:

namespace RichTextBox
{
    class addText
    {
        public static void returnText()
        {
            string s = "test test;";
            Form1 f = new Form1();
            f.addData(s);
        }
    }
}

您的returnText方法正在创建一个新的Form1,它不应该这样做。这里有几个选项,您可以更新签名以期望一个Form1实例-
returnText(form1f)
并将当前表单实例传递给方法(
addText.returnText(this);

或者,最好是让
returnText
方法完全按照它所说的做-返回文本,调用代码可以更新富文本框。它使职责分离且更清晰

public static string returnText()
{
 string s = "test test;";
 return s;
}
呼叫代码:

private void button1_Click(object sender, EventArgs e)
{
var s = addText.returnText();
addData(s);
}

尝试调试您的代码,您将看到
addText
类中RichTextBox的文本已设置。仅…它是
Form1
的另一个实例,而不是当前显示的表单。在
returnText
方法中添加以下行以查看此内容:

f.Show();
将表单作为参数传递给类,然后这将起作用。在button click事件中,将行更改为以下内容:

addText.returnText(this);
returnText
方法如下所示:

public static void returnText(Form1 form)
{
    string s = "test test;";
    form.addData(s);
}
但最好是从类返回一个值,并在窗体类的richtextbox中设置该值:

private void button1_Click(object sender, EventArgs e)
{
    richTextBox1.AppendText(addText.returnText());
    // OR
    addData(addText.returnText());
}

public static string returnText()
{
    string s = "test test;";
    return s;
}

是的,我刚刚发现在button1_click()中,richtextbox确实会从文本变为文本。因此我尝试返回哪个有帮助。为什么第二个更好?它更快还是只对简单阅读有用?要理解,最好阅读一些关于
单一责任原则
关注点分离
的文章。