0

我首先要说的是,在表单之间传递数组时,我对这个概念非常陌生。

目前我有以下情况:

  1. 用户单击一个按钮,该按钮会生成一个显示用户详细信息的网格视图

  2. 用户可以单击一个单元格,然后将数据添加到文本框和数组列表中

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

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

目前我没有收到任何错误,但只是生成了一个空白表格。以下屏幕截图将显示情况:

用户单击第一个表单的“添加”按钮 - Form1

在此处输入图像描述

然后用户选择将地址放入文本框中的“电子邮件”单元格。此电子邮件地址也会添加到后台代码中的列表数组中。

在此处输入图像描述

单击“添加联系人”时,应显示第一个表单(第一张图片中的那个),但会生成一个新表单:

在此处输入图像描述

这是代码。我目前认为这个问题出在我的 Form1 类中的第二个构造函数上,该构造函数用于设置返回的数组 List:

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

用于设置 List 的 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;
    }

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

4

3 回答 3

3

您从未实际初始化任何控件,因此从未实际创建表单。利用:

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

或者

public Form1(List<string> a)
{
    Form1();
    myCollection = a;
}
于 2013-03-21T21:28:32.240 回答
1

无需传递列表并创建新的Form1,只需从第二种形式返回选定的值:

Form1中(当您需要显示Form2时):

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

于 2013-03-21T21:31:43.840 回答
0

在第二个构造函数中调用 InitializeComponent。

于 2013-03-21T21:30:09.960 回答