C# Winforms阻止打开相同的动态表单

C# Winforms阻止打开相同的动态表单,c#,winforms,forms,dynamic,C#,Winforms,Forms,Dynamic,如果我点击按钮,我下面的代码工作得很好 if (Application.OpenForms["StockCardForm"] == null) { var stockCardForm = new StockCardForm(); stockCardForm.MdiParent = this; stockCardForm.Show(); } else Application.OpenForms["StockCa

如果我点击按钮,我下面的代码工作得很好

if (Application.OpenForms["StockCardForm"] == null)
  {
            var stockCardForm = new StockCardForm();
            stockCardForm.MdiParent = this;
            stockCardForm.Show();
  }
  else
  Application.OpenForms["StockCardForm"].Focus();
如何使用动态表单名称或如何防止再次打开与动态表单相同的表单,而不是“StockCardForm

任何帮助都将不胜感激。


谢谢。

您可以检查是否有某种类型的表单已经打开,然后做任何您想做的事情

if (!Application.OpenForms.OfType<StockCardForm>().Any())
{
    var  form  = new StockCardForm();
    form.Show();
}
else
    Application.OpenForms.OfType<StockCardForm>().First().Focus();
if(!Application.OpenForms.OfType().Any())
{
var form=新的StockCardForm();
form.Show();
}
其他的
Application.OpenForms.OfType().First().Focus();

我需要一个类,类参数将是表单名称,对吗?不确定我是否理解您的问题。你能详细说明一下吗?我如何编写一个类泛型并给出formname和使用/运行你的代码?如果我理解正确,你想要的是打开一些表单,并且要打开的表单是动态确定的?例如,有两个按钮,每个按钮运行相同的代码,但打开不同的表单?尝试调试并查看OpenForms集合,您将看到代码之间的主要区别。另外,使用我的代码很容易创建一个通用方法,比如OpenForm,只需将OfType替换为OfType,它就可以用于您可能拥有的所有其他表单。有更多的不同,但我认为,通过一点调试和研究,您将很容易找到它们是什么。