如何从另一种形式一般打开一个表单?

时间:2018-02-09 01:58:48

标签: c#

我总共有6个表格。在我的mainForm中,我有5个按钮来打开面板内的其他表单。我所知道的是这样的:

 form1 f1 = new form1();
 f1.TopLevel = false;
 f1.Dock = DockStyle.Fill;
 this.panelMid.Controls.Add(f1);
 f1.show();

现在,因为我还有其他5个表单,所以我想创建一个函数,让我打开表单而不必在每个按钮事件中重新键入这些代码。 我的问题是我不知道将表单作为参数传递给函数。

1 个答案:

答案 0 :(得分:3)

DRY 101,基于您的代码,其中包含一些泛型

public void MyAwesomeFormShower<TForm>()
   where TForm : Form, new()
{
   var form = new TForm();
   // common code here
   form.TopLevel = false;
   form.Dock = DockStyle.Fill;
   ///this.panelMid.Controls.Add(f1); // < who knows what this does, however don't do it
   form.Show();
}

用法

MyAwesomeFormShower<MyLovelyHorseForm>();

或者如果你想得到花哨的话

public void MyAwesomeFormShower<TForm>(Action<TForm> action = null) 
   where TForm : Form, new()   
{
   var form = new TForm();
   // common code here
   form.TopLevel = false;
   form.Dock = DockStyle.Fill;

   action?.Invoke();
   form.Show();
}

用法

MyAwesomeFormShower<MyLovelyHorseForm>();

// or

MyAwesomeFormShower<MyLovelyHorseForm>((form) => 
     {   
         // Specialised form stuff here
         // that is specific to MyLovelyHorseForm
     });