2017-09-03 86 views
-1

我最初在我的程序(form1)中声明了一个空的公共字符串数组,并且当单击一个按钮时,将datagridview单元格中的字符串放入数组中!不过,我觉得困难在得到该数组的长度为另一种形式的类(窗口2)获取从一个窗体类到另一个窗体类的数组长度#

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(); 
    } 
} 

的分配字符串值,以使用分割功能数组是成功的! 在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"; 
      }     
    } 
} 

但是当我运行程序出现错误“对象引用不设置到对象的实例”在对窗口2的循环!我该如何解决这个问题?

+0

叫它您在Form2_Load创建Form1的新实例。该实例与您打开Form2的实例不同。这就是你得到这个例外的原因。您需要将Form1的当前实例或数组本身发送到Form2,同时将其打开。 than,但在_form = form处; –

回答

0

看起来您正在重新初始化Form1

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

在窗体2:

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(); 
} 
+0

Thanx this works –

+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(); 

PS:这是最小的变化只是一种方式,我不鼓励过多的使用,因为它可以在更大的范围内变得混乱。

+0

;我收到一个错误“名称表单在当前上下文中不存在”! –

相关问题