C# 将字符串传递给其他窗体时出错
当我尝试将值传递到表单2中的文本框时,它会说“异常已被调用的目标抛出。”C# 将字符串传递给其他窗体时出错,c#,winforms,C#,Winforms,当我尝试将值传递到表单2中的文本框时,它会说“异常已被调用的目标抛出。” 我也已将保护更改为public,但我没有成功地传递字符串。因为textboxt1在form2中不存在,所以无法访问 正如塞尔曼所说,您可以公开文本框并引用form1 但更好的方法是在构造函数上使用字符串 // Form1 // I have a text box and I want the value to pass onto a text box on form 2 private void button1_Click
我也已将保护更改为public,但我没有成功地传递字符串。因为textboxt1在form2中不存在,所以无法访问 正如塞尔曼所说,您可以公开文本框并引用form1 但更好的方法是在构造函数上使用字符串
// 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;
}
由于textboxt1在form2中不存在,因此无法访问 正如塞尔曼所说,您可以公开文本框并引用form1 但更好的方法是在构造函数上使用字符串
// 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;
}
据我所知,您希望将textbox的值从form1传递到form2 在Form2中添加以下代码
public Form2 (string theContent){
//your init here
}
在form1按钮事件中添加以下代码
private Form1 otherForm;
public Form2(Form1 formObj)
{
InitializeComponents();
otherForm = formobj;
}
private void Form2_Load(object sender, EventArgs e)
{
this.textbox1.Text = otherForm.textbox1.Text;
}
据我所知,您希望将textbox的值从form1传递到form2 在Form2中添加以下代码
public Form2 (string theContent){
//your init here
}
在form1按钮事件中添加以下代码
private Form1 otherForm;
public Form2(Form1 formObj)
{
InitializeComponents();
otherForm = formobj;
}
private void Form2_Load(object sender, EventArgs e)
{
this.textbox1.Text = otherForm.textbox1.Text;
}
打开
Form2
时,将文本框的值传递给Form2
的构造函数在
Form2
的构造函数中,将传递的值存储在全局级别的类变量中,并在Form2\u Load
事件中使用它。您也可以直接在Form2的构造函数中设置
Form2的textbox1,但在调用InitializeComponent
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(this);
form2.Show();
}
打开Form2
时,将文本框的值传递给Form2
的构造函数
在Form2
的构造函数中,将传递的值存储在全局级别的类变量中,并在Form2\u Load
事件中使用它。
您也可以直接在Form2的构造函数中设置Form2的textbox1,但在调用InitializeComponent
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(this);
form2.Show();
}
实现这一点的最简单方法是将信息传递给第二个表单的构造函数。这样你就不需要公开文本框了
在表格2中
:
// 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;
}
}
在表格1
中:
// Constructor
public Form2 (string message)
{
InitializeComponent(); // Call this first, as it creates the forms controls
textBox1.Text = message;
}
顺便说一句,您正在将字符串从Form2
传递到Form1
(根据需要以相反的方式)并且从不初始化变量otherForm
。它将始终具有其默认值null
实现这一点的最简单方法是将信息传递给第二个表单的构造函数。这样你就不需要公开文本框了
在表格2中
:
// 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;
}
}
在表格1
中:
// Constructor
public Form2 (string message)
{
InitializeComponent(); // Call this first, as it creates the forms controls
textBox1.Text = message;
}
顺便说一句,您正在将字符串从Form2
传递到Form1
(根据需要以相反的方式)并且从不初始化变量otherForm
。它总是有它的默认值null
,我要提醒您,这样做会导致显示元素(表单)之间的代码耦合。这通常由控制器对象(查找MVC(WEB)/MVVM(WPF))处理。这里有两种方法可以做到这一点
选项1-添加属性
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(textbox1.Text);
form2.Show();
}
选项2-调用一个方法
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();
}
我要提醒大家,这样做会导致显示元素(表单)之间的代码耦合。这通常由控制器对象(查找MVC(WEB)/MVVM(WPF))处理。这里有两种方法可以做到这一点
选项1-添加属性
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(textbox1.Text);
form2.Show();
}
选项2-调用一个方法
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();
}
什么是otherForm
它是Form1吗?如果不是,你在哪里创建它?看看这个帖子:我忘了在op中添加它,对不起。我有另一种形式的私人形式;我已经内联了您的评论(下次请编辑帖子,而不是在评论中添加代码),但您仍然需要显示如何创建/初始化otherForm
字段。请让我理解。您有一个带有文本框的Form1。用户点击Form1的按钮打开Form2。加载Form2时,是否要更改Form1上文本框的值?这似乎有点奇怪,因为用户无法在form2仍处于加载状态时更改其值。什么是otherForm
它是Form1?如果不是,你在哪里创建它?看看这个帖子:我忘了在op中添加它,对不起。我有另一种形式的私人形式;我已经内联了您的评论(下次请编辑帖子,而不是在评论中添加代码),但您仍然需要显示如何创建/初始化otherForm
字段。请让我理解。您有一个带有文本框的Form1。用户点击Form1的按钮打开Form2。加载Form2时,是否要更改Form1上文本框的值?这似乎有点奇怪,因为即使我不同意,用户也无法在form2仍处于加载状态时更改其值。这里最好的选择是在调用show之前通过属性或公共方法设置表单2上的值。@Geek为什么这是一个更好的选择?@Geek不同意。如果您这样做,您可能会忘记设置必要的参数,最终导致代码失败。没有人说这是必需的参数。像这样打开表单通常也不是最佳做法,因为如果这样做,很可能会得到多个必需的值。此外,如果未设置值,则可以对类进行参数/值检查以确保其正确。如果我用一个空字符串初始化这个类呢?它会给你和以后不设置一样的结果。我不同意。这里最好的选择是在调用show之前通过属性或公共方法设置表单2上的值。@Geek为什么这是一个更好的选择?@Geek不同意。如果您这样做,您可能会忘记设置必要的参数,最终导致代码失败。没有人说这是必需的参数。像这样打开表单通常也不是最佳做法,因为如果这样做,很可能会得到多个必需的值。此外,如果未设置值,则可以对类进行参数/值检查以确保