Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串传递给其他窗体时出错_C#_Winforms - Fatal编程技术网

C# 将字符串传递给其他窗体时出错

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

当我尝试将值传递到表单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(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不同意。如果您这样做,您可能会忘记设置必要的参数,最终导致代码失败。没有人说这是必需的参数。像这样打开表单通常也不是最佳做法,因为如果这样做,很可能会得到多个必需的值。此外,如果未设置值,则可以对类进行参数/值检查以确保