Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何将类中的文本附加到表单上的文本框中?_C#_Winforms - Fatal编程技术网

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

C#:如何将类中的文本附加到表单上的文本框中?,c#,winforms,C#,Winforms,我有一个名为“Form1.cs”的表单,它调用一个类,我们称之为“Class1.cs”,还有另一个表单名为“Form2.cs”。如果Form2中的文本框处于打开状态,则Class1中的子例程需要更新该文本框。文本需要在添加到文本框中的当前文本后显示,以便实时更新。我不知道该怎么做。我尝试了很多方法,他们没有给我错误,但是他们也没有把文本写入文本框 这里的每个请求都是我的当前代码。请记住,这是一个测试项目,用于在将其实现到实际项目中之前弄清楚这一点 Form1.cs中的代码 namespace T

我有一个名为“Form1.cs”的表单,它调用一个类,我们称之为“Class1.cs”,还有另一个表单名为“Form2.cs”。如果Form2中的文本框处于打开状态,则Class1中的子例程需要更新该文本框。文本需要在添加到文本框中的当前文本后显示,以便实时更新。我不知道该怎么做。我尝试了很多方法,他们没有给我错误,但是他们也没有把文本写入文本框

这里的每个请求都是我的当前代码。请记住,这是一个测试项目,用于在将其实现到实际项目中之前弄清楚这一点

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++;
                }
            }
    }
}
1类代码

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

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

EDIT:通过编写
newform2()
,您在
Class1
中的代码正在创建
Form2
的新实例
此实例与在实际可见的
Form1
(也通过写入
newform2()
)中创建的另一个实例没有任何关系。
您需要为
Class1
提供
Form2
的现有实例,可能需要使用静态属性(如下所述)


预编辑 要将文本追加到文本框中,应调用
AppendText
方法

要在
Form2
之外执行此操作,您应该在
Form2
上创建一个调用
AppendText
public
方法

例如:

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
(或其他任何地方)中,您可以编写

if (Form2.Instance != null)
    Form2.Instance.AppendMyText(someString);

请注意,您需要在UI线程上执行此操作;如果你在后台线程上运行,你可以调用
BeginInvoke

如果你有不起作用的代码,如果你把它放在你的帖子里,它会非常有用。。。最好是作为一个简短但完整的例子。我如何准确地将Form1打开的当前Form2赋给“Class1”类?@Bryan:您可以在Class1的构造函数中传递对它的引用,或者在Class1上设置属性,或者,正如SLaks建议的那样,有一个静态属性,其中包含对它的引用。同样,不理解您的意思,请给出示例。公共静态Form2实例{get;private set;}给我一个错误,说必须声明一个主体,因为它没有标记为抽象或外部。我应该在出发和出发后放什么?
if (Form2.Instance != null)
    Form2.Instance.AppendMyText(someString);