如何将List <string>对象从对话框传递到主窗体?

时间:2017-05-20 09:45:14

标签: c# winforms

我从我的主表单中调用一个带有ShowDialog()的表单。我不想从对话框表单中逐个传递值,而是要传递一个值列表,以便主窗体可以使用它们(取决于主窗体上的选项,对话框中的字段数量)形式不同)。

然而,这段代码会崩溃我的程序,但不会抛出任何异常。问题必须在列表中,因为此方法适用于简单变量。

对话框表格的类包含:

List<string> valuesToReturn;
public List<string> ValuesToReturn { get => ValuesToReturn; set => ValuesToReturn = value; }

对话框表单的构造函数创建了一个新的列表实例:

valuesToReturn = new List<string>();

然后在事件处理程序中(按Enter键时)我想将所有NoEnterTextBox-es的值添加到列表中:

foreach (object item in this.Controls)
{
    if(item is NoEnterTextBox) {
        valuesToReturn.Add((item as NoEnterTextBox).Text);
    }
}

请帮我解释如何更正此代码。谢谢。

1 个答案:

答案 0 :(得分:0)

使用表单2的DialogResult值来确定是否需要刷新Form1。另外,HandleList()方法会将所有文本框.text填充到列表中。

Form2调用Form1

 private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            if (f2.ShowDialog() == DialogResult.OK)

            {
                // refresh form
               AddItemsFromListInForm2(f2.valuesToReturn);
            } 
        }

 private void AddItemsFromListInForm2(List<string> valuesToReturn)
 {
     // do something with valuesToReturn...
 }   

用户在form2上按下(确定\保存)按钮:

  private void button1_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
            HandleList();
            this.Close();
        }

   private void HandleList()
   {

        foreach (Control c in this.Controls)
        {
            if(c is TextBox)
            {
                valuesToReturn.Add(c.Text);
            }
        }
   }       

Form2上的另一个按钮中,你可以执行那段代码,如果有一个你不想刷新Form1的情况:

 private void button2_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.Cancel;
                this.Close();
            }