获取从一个表单类到另一个表单类的数组长度c#

时间:2017-09-03 13:25:01

标签: c# arrays string forms runtime-error

我最初在我的程序(form1)中声明一个空的公共字符串数组,当单击一个按钮时,datagridview单元格中的字符串被放入数组中!但我发现难以将该数组的长度转换为另一个表单类(form2)

public partial class Form1 : Form
{
     public string[] strarray; 
     public string order;

     public Form1()
     {
         InitializeComponent();
     }

     public void button2_Click(object sender, EventArgs e)
     {
         var new1=dataGridView2.Rows[0].Cells[2].Value; 
         ordernew = new1.ToString();
         strarray = ordernew.Split(',');
         Form2 f2 = new Form2();        
         f2.Show();
     }
}

使用split函数为数组赋值字符串值成功! 在form2代码如下!

public partial class Form2 : Form
{
     public Form2()
     {
          InitializeComponent();
     }

     private void Form2_Load(object sender, EventArgs e)
     {
          Form1 f1 = new Form1();
          for (int m = 0; m < f1.strarray.Length; m++)
          {
               label.Text="Hello";
          }                
     }
}

但是当我运行程序时,我得到了错误&#34;对象引用未设置为对象的实例&#34;在form2的for循环中!我怎么能纠正这个?

2 个答案:

答案 0 :(得分:0)

Form1 f1 = new Form1();

这就是导致问题的原因。你创建了一个不使用旧窗口的新窗口,因此新窗口仍然没有一个strarr,最简单的解决方法就是使Form2构造获取Form1参数并保存它在一个领域然后使用它。

public partial class Form2 : Form
{
    private Form1 _form;
    public Form2(Form1 form)
    {
        InitializeComponent();
        _form = form;
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        for (int m = 0; m < _form.strarray.Length; m++)
        {
           label.Text="Hello";
        }

    }
}

在Form1的事件处理程序中,您将this作为参数传递:

Form2 f2 = new Form2(this);
f2.Show();
P.S:这只是改变微乎其微的一种方式,我不鼓励使用它,因为它可能会在更大的范围内引起混淆。

答案 1 :(得分:0)

您似乎正在重新初始化Form1

您可以做的是为Form2添加另一个属性,然后在调用Form2时为其分配值。

在Form2中:

public partial class Form2 : Form
{
    public string[] strarray { get; set; } //add this.

    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        //You can also use foreach to avoid out of bound index
        foreach(var strItem in strarray)
        {
            label.Text = "Hello " + strItem;
        }
    }
}

然后在Form1

中调用它
public void button2_Click(object sender, EventArgs e)
{
    var new1=dataGridView2.Rows[0].Cells[2].Value; 
    order = new1.ToString();

    Form2 f2 = new Form2();
    f2.strarry = ordernew.Split(','); //surprise!! I don't know where you get ordernew variable but anyways, assign your values HERE...
    f2.Show();
}