2013-03-21 105 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