// Form1
// I have a text box and I want the value to pass onto a text box on form 2
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
// Form2
private Form1 otherForm;
private void Form2_Load(object sender, EventArgs e)
{
string test = textBox1.Text;
otherForm.textBox1.Text = test;
}
当我尝试将值传递到表单2上的textBox时,它会显示“调用目标已抛出异常。”
我已经将保护更改为公开,但是我没有成功传递字符串。
答案 0 :(得分:2)
实现此目的的最简单方法是将信息传递给第二种形式的构造函数。这样您就不需要公开文本框了。
在Form2
:
// Constructor
public Form2 (string message)
{
InitializeComponent(); // Call this first, as it creates the forms controls
textBox1.Text = message;
}
在Form1
:
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(textbox1.Text);
form2.Show();
}
顺便说一句,您将字符串从Form2
传递给Form1
(与需要的方式相反),您永远不会初始化变量otherForm
。它始终具有默认值null
。
答案 1 :(得分:1)
据我所知,您希望将textbox的值从form1传递给form2。
在Form2中添加以下代码。
private Form1 otherForm;
public Form2(Form1 formObj)
{
InitializeComponents();
otherForm = formobj;
}
private void Form2_Load(object sender, EventArgs e)
{
this.textbox1.Text = otherForm.textbox1.Text;
}
在form1按钮事件中添加以下代码
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(this);
form2.Show();
}
答案 2 :(得分:1)
当您打开Form2
时,您将文本框的值传递给Form2
的构造函数。
在Form2
的构造函数中,将传递的值存储在全局级别类变量中,并在Form2_Load
事件中使用它。
您也可以直接在Form2的构造函数中设置Form2
的textbox1但是在调用InitializeComponent
之后
// In Form1
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(textbox1.Text);
form2.Show();
}
// in Form2
public class Form2:Form
{
private string textFromOtherForm;
public void Form2(string fromForm1)
{
InitializeComponent();
textFormOtherForm = fromForm1;
}
private void Form2_Load(object sender, EventArgs e)
{
this.textBox1.Text = textFromOtherForm;
}
}
答案 3 :(得分:0)
由于textboxt1在form2中不存在,因此无法访问。
你可以像selman所说的那样公开文本框并引用form1。
但更好的方法是在构造函数
上使用字符串public Form2 (string theContent){
//your init here
}
答案 4 :(得分:0)
我会谨慎地开发这种方式,因为它会导致显示元素(表单)之间的耦合代码。这通常用控制器对象处理(查找MVC(WEB)/ MVVM(WPF))。这里说的有两种方法可以做到。
选项1 - 添加属性
public string Form1Text1Text { get; set; }
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var f2 = new Form2();
f2.Form1Text1Text = textBox1.Text;
f2.ShowDialog();
}
选项2 - 调用方法
private string _mytext;
public void SetText(string text)
{
_mytext = text;
}
private void button1_Click(object sender, EventArgs e)
{
var f2 = new Form2();
f2.SetText(textBox1.Text);
f2.ShowDialog();
}