2013-03-21 116 views
0

我会先说一下,当涉及到在表单之间传递数组时,这个概念非常新。在表单之间传递一个arrayList

目前我有sollowing情况:

  1. 一个用户点击一个按钮,它会产生一个gridview显示用户的详细信息

  2. 用户可以点击一个细胞,这将反过来将数据添加到文本框和数组列表

  3. 然后用户单击一个按钮以返回到先前的表单,其中数组列表元素被访问并显示在第一个表单上的文本框中。

目前我已经为我的第一个窗体(Form1)创建了一个新的构造器,它应该从第二个窗体中设置声明的arrayList。

目前我没有得到任何错误,但只是一个空白的形式是简单的产生。下面的截图将显示情况:

的用户点击“添加”第一种形式的按钮 - Form1中

enter image description here

然后,用户选择其地址放置到“电子邮件”细胞文本框。该电子邮件地址也被添加到后台代码中的列表数组中。

enter image description here

当“添加联系人”被点击第一形式应当被显示(一个在所述第一图片),而是一个新的生产:

enter image description here

这里是代码。目前,我相信这个问题在于用来设置返回数组列表在我的Form1类我的第二个构造:

List<string> myCollection = new List<string>(); 

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 

     string add = dataGridView1.CurrentRow.Cells[3].Value.ToString(); 

     myCollection.Add(add); 

     txtCCAdd.Text += add + ", "; 

    } 



private void btnSetCC_Click(object sender, EventArgs e) 
    { 
     Form1 form = new Form1(myCollection); 
     form.Show(); 
    } 
用于设置列表

Form1构造:

string attachment; 
    List<string> myCollection = new List<string>(); 


    public Form1() 
    { 
     InitializeComponent(); 


    } 

    **** Second constructor used to set the List array **** 
    public Form1(List<string> a) 
    { 
     myCollection = a; 
    } 

希望有人能告诉我在哪里出错了!

回答

3

你永远不会初始化任何控件,因此表单实际上从未被创建过。使用方法:

public Form1(List<string> a) 
{ 
    InitializeComponent(); 
    myCollection = a; 
} 

public Form1(List<string> a) 
{ 
    Form1(); 
    myCollection = a; 
} 
+0

非常感谢您的回答。你是对的。 – user1352057 2013-03-21 21:30:34

0

呼叫的InitializeComponent在你的第二个构造函数。

1

不是传递名单,并且创造新的Form1中的,只是返回从第二种形式选定值:

Form1中(当你需要显示窗体2):

using(Form2 form2 = new Form2()) 
{ 
    if (form2.ShowDialog() != DialogResult.OK) 
     return; 

    myCollection.Add(form2.SelectedValue); // add value to list here 
} 

Form2

public string SelectedValue { get; private set; } 

void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    SelectedValue = dataGridView1.CurrentRow.Cells[3].Value.ToString(); 
} 

private void btnSetCC_Click(object sender, EventArgs e) 
{ 
    DialogResult = DialogResult.OK; 
} 

即使您想从Form2返回若干选定值,然后使用本地值列表,并将该列表返回到Form1Form2不应该知道你将如何使用这些值。考虑一下FileOpenDialog。它只是返回选定的文件名,这是该对话框的责任。你不需要通过FileOpenDialog填写的一些列表或对象。

+1

+1 a在我看到您的答案时回答相同,这是合乎逻辑的事情 – Steve 2013-03-21 21:35:39

+0

@Steve谢谢,并同意。不是在表单之间传递整个数据,而是使用数据子集(单个责任) – 2013-03-21 21:37:29