C# 如何在WindowsForm中更改来自不同类的textfield中的文本
对于一个项目,我试图使用不同类中的方法更改RichTextBox的文本。但是,当尝试传递字符串时,它不会更改文本,但当我写入C# 如何在WindowsForm中更改来自不同类的textfield中的文本,c#,winforms,C#,Winforms,对于一个项目,我试图使用不同类中的方法更改RichTextBox的文本。但是,当尝试传递字符串时,它不会更改文本,但当我写入Console.Writeline时,它会显示出来 我认为问题在于,我必须刷新WindowsForm,才能更改文本 namespace RichTextBox { public partial class Form1 : Form { public Form1() { InitializeCompone
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确实会从文本变为文本。因此我尝试返回哪个有帮助。为什么第二个更好?它更快还是只对简单阅读有用?要理解,最好阅读一些关于
单一责任原则
和关注点分离
的文章。