在c#中将值从一个表单传递到另一个表单

时间:2014-01-05 22:38:09

标签: c#

我有两种形式。

当我将表单2中的文本传递给表单1时,我做错了。

当我点击按钮时,表单2中的textbox2在我的初始form1(创建另一个form1)时没有改变,我该如何解决?我想只有2个表格,不多了。

Form1

Form2

代码:

public partial class Form1 : Form
{
    private string vas;

    public Form1()
    {
        InitializeComponent();
    }

    public string backsend
    {
        get { return vas; }
        set {vas = value; }
    }

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

public partial class Form2 : Form
{
    private string Mn;

    public string passValue
    {
        get { return Mn; }
        set { Mn = value; }
    }

    public Form2()
    {
        InitializeComponent();
    }

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

    private void button2_Click(object sender, EventArgs e)
    {//click for clear textbox1 from form 2.
        textBox2.Clear();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 f1 = new Form1(); i don't understand why is created another form,but not variable
        f1.backsend = textBox2.Text;
        f1.textBox2.Text = f1.backsend; //no exchange in my first form 1
        MessageBox.Show(f1.textBox2.Text);//it's correct
    }
}

2 个答案:

答案 0 :(得分:1)

您已经检测到错误,即行

  

Form1 f1 = new Form1();我不明白为什么要创建另一种形式,而不是变量

这会创建一个Form1类的新实例,您没有在任何地方显示,也不想。 您要做的是更改已实例化和显示的表单上的值。您可以通过将对实例化的Form1的引用传递给f2

来完成此操作

更改此代码

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

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

并为initatorForm添加适当的属性,或者您可以在Form2中使用.Parent,因为父级应该是您用来显示表单的表单,但我不是100%就可以了。

此外,通过这种方式,您只需更改变量vas,而不更改文本框的值。如果愿意,可以将其添加到setter中。

答案 1 :(得分:0)

我认为这个例子会对你有所帮助:

此示例将使用从Form1到Form2的字符串输入:

public partial class Form1 : Form
{
    private string vas;

    public Form1()
    {
        InitializeComponent();
    }

    public string Test { get;set; }

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

public partial class Form2 : Form
{
    private Form1 form1;

    public Form2(Form1 parentForm)
    {
        InitializeComponent();
        form1 = parentForm;
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        //you can use the public string from Form1 here like this:
        textBox1.Text = form1.Test;
    }
}