C#:如何将文本附加到类的表单上的文本框中?

时间:2010-01-26 15:50:59

标签: c# winforms

我有一个名为“Form1.cs”的表单,它调用一个我们称之为“Class1.cs”的类,以及另一个名为“Form2.cs”的表单。如果该窗体打开,则Class1中的子例程需要更新Form2中的文本框。在将文本附加到文本框中的当前文本后,文本需要显示,以便实时更新。我无法弄清楚如何使这项工作。我尝试了很多东西,他们没有给我错误,但他们也没有把文字写入文本框。

这里的每个请求是我当前的代码。请记住,这是一个测试项目,用于在将其实现到真实之前进行计算。

Form1.cs中的代码

namespace Test
{
    public partial class Form1 : Form
    {
        Form2 cs_form2 = new Form2();
        Class1 cs_class1 = new Class1();
        public Form1()
        {
            InitializeComponent();

        }
        public void button1_Click(object sender, EventArgs e)
        {
            cs_class1.Writelog();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            cs_form2.Show();
        }
        public void writeToTextbox()
            {
                i = 0;
                while(i<=10)
                {
                    cs_form2.testTextBox.AppendText("still works");
                    i++;
                }
            }
    }
}

Form2.cs中的代码

namespace Test
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void clear_Click(object sender, EventArgs e)
        {

            testTextBox.Text = "";
        }

        public void AppendText()
        {
            testTextBox.AppendText("asklvhslieh");
        }
    }
}

Class1中的代码

namespace Test
{
    class Class1
    {
        Form2 cs_form2 = new Form2();

        public void Writelog()
        {
            cs_form2.testTextBox.AppendText("asg");
        }
    }
}

1 个答案:

答案 0 :(得分:4)

编辑:通过撰写new Form2()Class1中的代码正在创建Form2的新实例。 此实例与Form1中创建的其他实例(也通过编写new Form2())无关,实际上可见。
您需要Class1现有的Form2实例,可能使用静态属性(如下所述)。


预修改

要将文字附加到文本框,您应该调用AppendText方法。

要在Form2之外执行此操作,您应该在调用public的{​​{1}}上设置Form2方法。

例如:

AppendText

要在partial class Form2 : Form { ... public void AppendMyText(string text) { myTextbox.AppendText(text); } ... } 中调用此方法,您需要引用Class1对象。
如果您一次只有一个Form2,则可以创建一个静态属性,如下所示:

Form2

partial class Form2 : Form { static Form2 instance; public static Form2 Instance { get { return instance; } } protected override void OnShown(EventArgs e) { base.OnShown(e); instance = this; } protected override void OnClosed(EventArgs e) { base.OnClosed(e); instance = null; } (或其他任何地方),您可以写

Class1

请注意,您需要在UI线程上执行此操作;如果您在后台线程上运行,则可以调用if (Form2.Instance != null) Form2.Instance.AppendMyText(someString);