我在做什么错误的数组

时间:2014-02-13 17:48:42

标签: c#

我试图在c#中将字符串数组从一个表单传递给另一个表单 我从表单1中尝试了这段代码:

 Form f2 = new Form2(Val);

 f2.Show();

以下是第二种形式的代码:

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
    private string[] _vals;
    public Form2(string[] vals) 
    {
        _vals = vals;
        Form Form2 = new Form2();
        Form2.Show();

    }

    private void Form2_Load(object sender, EventArgs e)
    {
        String BoxText="";
        for (int i = 1; i < 11; ++i)
        {
            BoxText = BoxText + _vals[i];
        }

        MessageBox.Show(BoxText);
    }
}

代码的最后一部分只是检查值是否实际传递。但它说我需要对实例进行某种对象引用。 如果我想要的是将字符串数组传递给下一个表单,那么我做错了什么。

4 个答案:

答案 0 :(得分:4)

这应该有助于您的自定义ctor:

public Form2(string[] vals) 
{
     InitializeComponent();
     _vals = vals;
}

你在哪里(主要)遇到的是缺少表单初始化(initializecomponent),然后你用默认的ctor调用了form2,它没有初始化数组。

答案 1 :(得分:3)

摆脱这些界限:

Form Form2 = new Form2();
Form2.Show();

在构造函数中。当您在Form1中执行这两行时,您正在加载Form2的实例,但您不希望在Form2创建并加载另一个实例时构建Form2

澄清一下,问题是正在创建的Form2第二个实例是抛出异常,因为在第一个实例的构造函数中你是'使用默认构造函数重新构建第二个实例

正如评论中所述,文本框为空的原因是因为您实际上没有将BoxText string分配给文本框的Text属性在表格上。

正如许多其他答案中所述,您需要将InitializeComponent();作为第二个构造函数中的第一行。

答案 2 :(得分:1)

你有两个Form2

的构造函数

1)

public Form2()
{
    InitializeComponent();
}

2)

public Form2(string[] vals) 
{
    _vals = vals;
    Form Form2 = new Form2();
    Form2.Show();

}

首先,您在第二个构造函数中使用string[]参数New Form2(Vals)调用contructor,再次创建Form2新实例并调用Show()方法,然后在{{1方法调用,Show()事件处理程序被调用,而Form2_Load当时是_vals,这就是为什么它将一个错误对象引用设置为对象的实例并将其作为一个实例。

我建议你从第二个构造函数中删除新的Form2对象,并像这样定义你的构造函数并删除第一个构造函数,

NULL

最终代码应该是这样的

public Form2(string[] vals) 
{
    InitializeComponent();
    _vals = vals;

}

或者你可以这样做,

Form f2 = new Form2(Val);
f2.Show();


public partial class Form2 : Form
{

    private string[] _vals;
    public Form2(string[] vals) 
    {
        InitializeComponent();
        _vals = vals;

    }

    private void Form2_Load(object sender, EventArgs e)
    {
        String BoxText="";
        for (int i = 1; i < 11; ++i)
        {
            BoxText = BoxText + _vals[i];
        }

        MessageBox.Show(BoxText);
    }
}

此处Form f2 = new Form2(Val); f2.Show(); public partial class Form2 : Form { private Form2() { InitializeComponent(); } private string[] _vals; public Form2(string[] vals): this() { _vals = vals; } private void Form2_Load(object sender, EventArgs e) { String BoxText=""; for (int i = 1; i < 11; ++i) { BoxText = BoxText + _vals[i]; } MessageBox.Show(BoxText); } }

此语法允许您在同一个类中调用另一个构造函数。因此,没有参数构造函数的: this()将首先调用,然后Form2()构造函数将调用。

答案 3 :(得分:0)

public Form2(string[] vals) 
    {
        _vals = vals;
        Form Form2 = new Form2();
        Form2.Show();

    }

你试图只从它的构造函数中显示表单,你不应该这样做 相反,你可以初始化

public Form2(string[] vals) 
{
     InitializeComponent();
    _vals = vals;
}