C# 如何传递列表<;字符串>;对象从对话框到主窗体?
我使用ShowDialog()从主窗体调用窗体。我不想从对话框表单中逐个传递值,而是希望传递一个值列表,以便主表单可以使用它们(根据主表单上的选项,对话框表单上的字段数量会有所不同) 但是,这段代码会使我的程序崩溃,但不会引发任何异常。问题一定出在列表上,因为此方法处理简单变量 对话框窗体的类包含以下内容:C# 如何传递列表<;字符串>;对象从对话框到主窗体?,c#,winforms,C#,Winforms,我使用ShowDialog()从主窗体调用窗体。我不想从对话框表单中逐个传递值,而是希望传递一个值列表,以便主表单可以使用它们(根据主表单上的选项,对话框表单上的字段数量会有所不同) 但是,这段代码会使我的程序崩溃,但不会引发任何异常。问题一定出在列表上,因为此方法处理简单变量 对话框窗体的类包含以下内容: List<string> valuesToReturn; public List<string> ValuesToReturn { get => ValuesT
List<string> valuesToReturn;
public List<string> ValuesToReturn { get => ValuesToReturn; set => ValuesToReturn = value; }
请帮助我如何更正此代码。谢谢。使用表格2的
对话框result
值来确定是否需要刷新表格1
。另外,HandleList()
方法将填充列表中的所有文本框.text
从Form1
调用Form2
:
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
上的另一个按钮中,如果您不想刷新Form1,则可以执行该代码:
private void button2_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
查看我的双表单项目:我没有遇到问题,是因为它能够将值从对话框表单传递到主表单,还是您希望通过foreach循环将值添加到valuesToReturn列表?我希望将所有文本框(对话框表单)的文本添加到列表中,然后在主表单中检索该列表。我想访问列表中的元素。有人知道为什么我的代码不起作用吗?我怀疑是列表的访问者造成了这个问题,我搞不清楚“获取列表”和“设置列表”是什么意思,它指的是整个列表还是它的元素。
ValuesToRetun.Add
(带大写的访问器)和valuesToReturn.Add
(变量本身是私有的)之间有什么区别
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...
}
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);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}