C# 从表单创建实例时如何更改textbox.text?

C# 从表单创建实例时如何更改textbox.text?,c#,winforms,C#,Winforms,我从myclass中调用了一个方法,该方法位于我的表单和我设置的方法textbox.text=“xyz”中,但我的textbox的文本不变。 此外,form2显示我调用aa()。 我的错在哪里 class a { private void aa() { Form2 f2 = new Form2(); f2.b(); } } public partial class Form2 : form { public void b() {

我从myclass中调用了一个方法,该方法位于我的表单和我设置的方法
textbox.text=“xyz”
中,但我的textbox的文本不变。 此外,form2显示我调用aa()。 我的错在哪里

class a
{
   private void aa()
   {
       Form2 f2 = new Form2();
       f2.b();
   }
}

public partial class Form2 : form
{
    public void b()
    {
       textbox1.text= "xyz";
    }
}

首先,在调用
f2.b()之前
要更新某些控件,请确保已创建窗口句柄:

 f2.Show();
如果您从另一个
表单调用函数
aa()
(比如从
Form1
),请进行
线程安全调用
,该调用包括在需要时调用线程

class a
{
    private void aa()
    {
        Form2 f2 = new Form2();
        f2.Show();
        f2.b();
    }
}

public partial class Form2 : Form
{
    public void b()
    {
        Action a = delegate
        {
            UpdateControls();
        };

        MethodInvoker Invoker = new MethodInvoker(a);

        if (InvokeRequired)
            this.Invoke(Invoker);
        else
            a();
    }

    public void UpdateControls()
    {
        textbox1.Text = "xyz";
    }
}
试试这个:

class a
{
    Form f1;
    a(Form f){
        f1 = f;
    }
   private void aa()
   {
       f1.b();
   }
}
public partial class Form2 : form
{
    public void b()
    {
       textbox1.text= "xyz";
    }
    private void button1.Clicked(args, events){
        a obj = new a(this.Form);
        obj.aa();
    }
}

试试这个:form2f2=newform2();f2.show();f2.b();在
aa()
方法中,您正在创建一个新的
表单2
,但您在其中调用
Show()
ShowDialog()
的是什么?您没有显示新表单。很难理解为什么你认为文本框没有改变,因为它甚至不应该是可见的。@LosPollosHermanos你还在做生意吗?现在谁在主持这个节目猜测一下,也许你已经有了一个不同的Form2副本,它已经是可见的了?但是您已经创建了一个新的副本,并且您的代码更新了该副本,而不是任何以前的版本?您应该解释代码与原始代码之间的差异,以便人们知道它为什么有用。