创建一个窗体的多个实例
本文关键字:实例 窗体 创建 一个 | 更新日期: 2023-09-27 18:26:06
考虑以下代码:
for (int i = 0; i < 10; i++)
{
Form1 frm = new Form1;
frm.Show();
}
问题是我如何管理这些已经创建的实例?
示例:创建这些实例后,我想获得每个实例的ID,然后用户将选择显示哪个实例
提前感谢!
只需将这些实例保存到某个集合中,就可以访问它们。
类似于:
var forms = new List<Form1>();
for (int i = 0; i < 10; i++)
{
var frm = new Form1();
forms.Add(frm);
frm.Show();
}
因此,稍后您可以获得所需的第i个表单forms[i]
。
但请注意,当不再需要表单时,您必须注意从该集合中删除表单,否则它将阻止垃圾收集器收集表单。
您说您想在用户选择"ID"
之后显示其中一个表单,但您为循环中的所有表单调用了Show
。所以你已经展示了所有的,而不仅仅是一个选择。我认为你应该删除对Show的调用
但在这种情况下,自动维护的OpenForms
集合是空的(或者至少不包含在循环中创建的表单),因此您需要这些表单的自定义集合。
最后,您需要为动态创建的表单设置一个ID,否则您将无法从用户输入中检索到它。
List<Form1> form1List = new List<Form1>();
for (int i = 0; i < 10; i++)
{
Form1 frm = new Form1();
frm.Name = "Form1_Instance_" + i.ToString();
frm.Text = frm.Name;
frm.Tag = i;
// Do not show it
// frm.Show();
// Add it to your list
form1List.Add(frm);
}
// Now suppose that your code has a TextBox from which your user types the ID of the form
string temp = TextBox1.Text;
int num;
if (Int32.TryParse(temp, out num))
{
if(num >= 0 && num <= 9)
{
Form1 f = form1List.FirstOrDefault(x => x.Tag.ToString() == num.ToString());
if(f != null)
f.Show();
}
}