我有两种形式。
当我将表单2中的文本传递给表单1时,我做错了。
当我点击按钮时,表单2中的textbox2在我的初始form1(创建另一个form1)时没有改变,我该如何解决?我想只有2个表格,不多了。
代码:
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
}
}
答案 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;
}
}