我有两种形式form1和form2。我想在form1上单击一个按钮时从form2的文本框中获取文本。我在form1上使用:
private void but_Click(object sender, EventArgs e)
{
Form2 f2=new Form2();
txtonform1=f2.fo;
}
并在form2
上我有这个方法从文本框中返回文本:
public string fo
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
现在的问题是它返回null
。是什么问题我是新来的c#可以请任何人帮助我!
答案 0 :(得分:1)
您必须使用一个表单,否则每次都创建新实例:
Form2 f2 = new Form2();
private void but1_Click(object sender, EventArgs e)
{
f2.fo=txtonform1.Text;
}
private void but2_Click(object sender, EventArgs e)
{
MessageBox.Show(f2.fo);
}
答案 1 :(得分:0)
您正在此处创建新的表单实例:
Form2 f2=new Form2();
并且您的fo
属性返回此新表单的textBox1
,因此textBox1不包含任何文本,并且您将获得null。
我猜你正在从Form1显示form2,如果它是正确的,只需在类级别定义一个Form2 intance:
public partial class Form1 : Form
{
Form2 f2 = new Form2();
}
当你想要展示时,请使用:
f2.Show(this);
如果您想立即更改TextBox值,可以使用:
txtonform1.Text = f2.fo;
但要做到这一点,请确保在form2中更改textBox1.Text。
答案 2 :(得分:0)
您应该在form2
中保留已显示的form1
的引用,然后使用相同的变量来访问该值。
我不知道form2
是如何创建和显示的,但假设它已创建并通过某个按钮显示,请点击form1
然后form1
类看起来像,
private Form f2 = null;
private void buttonShowForm2_Click(object sender, EventArgs e)
{
if(f2 == null)
f2 = new form2();
f2.Show();
}
private void but_Click(object sender, EventArgs e)
{
if(f2 == null) //If this form was not already displayed display it to get the input from user
buttonShowForm2_Click(null, null);
else
txtonform1=f2.fo;
}
答案 3 :(得分:0)
第一个解决方案:
1。)转到Form2然后双击它。在代码类型中。
public Form2(string sTEXT)
{
InitializeComponent();
textBox1.Text = sTEXT;
}
2.) Goto Form1 then Double click it. At the code type this.
//At your command button in Form1
private void button1_Click(object sender, EventArgs e)
{
Form2 sForm = new Form2(textBox1.Text);
sForm.Show();
}
第二个解决方案:
1。)转到Form1然后双击它。在代码类型中。
public string CaptionText
{
get {return textBox1.Text;}
set { textBox1.Text = value;}
}
注意:textbox1.text = sayre;
的值2。)转到Form2然后双击它。在代码类型中。
// At your command button In Form2
private void button1_Click(object sender, EventArgs e)
{
Form1 sForm1 = new Form1();
textBox1.Text = sForm1.CaptionText;
}