从Form2(textbox2)传输数据到Form1(textbox1)?

3

可能重复的问题:
我想从Form2控制Form1

我是一个C#新手,我在谷歌上找不到我要找的答案,所以我希望这里有人能帮助我。我只是练习将数据从一个窗体传输到另一个窗体。

这是我的情况:

我有两个窗体 - Form1Form2
Form1包含一个文本框(名为txtForm1)和一个按钮(名为btnForm1)。
Form2包含一个文本框(名为txtForm2)和一个按钮(名为btnForm2)。

运行应用程序后,通过单击按钮btnForm1,用户打开Form2。用户在文本框中写入的文本(txtForm2)应该被传输到Form1中的文本框txtForm1中(该按钮被禁用)。

我该如何进行此次传输?

编辑:
好的,我需要明确这是我所有的代码:

Form1(打开Form2的按钮):

    private void btnForm1_Click(object sender, EventArgs e)
    {
        new Form2().Show();
    }

表单2(关闭 表单2 的按钮):

    private void btnForm2_Click(object sender, EventArgs e)
    {
        this.Close();
    }

我一无所有。(我是一个完全的新手)


这是一个WinForms还是WPF应用程序? - Claudio Bernasconi
4个回答

0
创建一个公共变量,将其赋值为来自文本框的值,然后传递到您的第二个表单中。
public static string myVar;   
myVar = txtForm2.Text;

当你返回到第一个表单时: txtForm1.Text = Form2.myVar;


@Rotem 我只是为了方便而这样做。我不应该吗? - The_Cthulhu_Kid
将其设为“public”应该使其在拥有实例引用的情况下从任何地方都可以访问。将其设为“static”意味着该值将在所有“Form2”实例之间共享。 - Rotem
将静态(static)修饰后,我可以通过 form2. 这样的表示方式访问它,对吗?我觉得这样更容易记住。 - The_Cthulhu_Kid
3
这句话的意思是,通过类名(可能是Form2)而不是实例来访问它。但你需要注意它可能带来的其他影响。虽然在某些情况下这样做可能没问题,但除非Form2是单例模式,否则这不是一个很好的做法。 - Rotem

0
在你的 Form2 中应该有类似以下的代码:
private void btnForm2_Click(object sender, EventArgs e)
 {          
   this.Hide();       
 }


public String GettxtForm2()
{
    return txtForm2.Text;
}

现在在“form1”中,您可以通过类似以下方式访问“txtForm2”:

Form2 form2 = new Form2();
 //on click btnForm1 show that form2 where you can edit the txtForm2
 private void btnForm1_Click(object sender, EventArgs e)
     {                
       form2.Show();       
     }
   //after you save the txtForm2 when you will focus back to form1 the txtForm1 will get the value from txtForm2
   private void Form1_Enter(object sender, EventArgs e)
        {
             txtForm1.Text = Form2.GettxtForm2();
        }

您可以轻松修改事件,以便在所有这些逻辑发生的地方进行操作...


0

Form1 中:

public void SetTextboxText(String text)
{
    txtForm1.Text = text;
}

private void btnForm1_Click(object sender, EventArgs e)
{
    var frm = new Form2(this); // pass parent form (this) in constructor
    frm.Show();
}

Form2 中:

Form _parentForm;

public Form2(Form form)
{
    _parentForm = form;
}

private void txtForm2_TextChanged(object sender, EventArgs e)
{
    _parentForm.SetTextboxText(txtForm2.Text); // change Form1.txtForm1.Text
}

-1

试试这个 ;)

在 Form1 上:

private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(textBox1.Text);
        frm2.Show();
        this.Hide();
    }

在form2上:

public partial class Form2 : Form
{
    public string textBoxValue;
    public Form2()
    {
        InitializeComponent();
    }

    public Form2(string textBoxValue)
    {
        InitializeComponent();
        this.textBoxValue = textBoxValue;
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        textBox2.Text = textBoxValue;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接