创建一个窗体的多个实例

本文关键字:实例 窗体 创建 一个 | 更新日期: 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();
    }
}