对于项目,我试图使用来自不同类的方法更改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);
}
}
}
答案 0 :(得分:2)
尝试调试代码,您将看到addText
类中的RichTextBox文本已设置。只有...它是Form1
的另一个实例,而不是您当前显示的形式。在returnText
方法中添加以下行以查看:
f.Show();
将表单作为参数传递给类,然后这将起作用。在按钮单击事件中,将行更改为以下:
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;
}
答案 1 :(得分:1)
你的returnText方法正在创建一个新的Form1,它不应该。这里有几个选项,您可以更新签名以期望Form1实例 - returnText(Form1 f)
并将当前表单实例传递给方法(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);
}