如何在WindowsForm中更改来自不同类的文本字段中的文本

时间:2017-12-07 09:41:04

标签: c# winforms

对于项目,我试图使用来自不同类的方法更改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);
        }
    }
}

2 个答案:

答案 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);
}