我从我的主表单中调用一个带有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);
}
}
请帮我解释如何更正此代码。谢谢。
答案 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();
}