日期:2014-05-18  浏览次数:20757 次

请教高手这种显示窗口的函数怎么写?
我想打开一个窗口,如果窗口已经打开,再按按钮则只是将它激活。
我一般是这样写的代码:
Form1 form;
void func()
{
  if(form==null || form.IsDisposed)
  {
  form=new Form1();
  form.Show();
  }
  else
  {
  form.Activate();
  }
}

但如果我有很多个窗体类:Form1, Form2, Form3.....这样显然非常不方便

怎么才能成一个函数。只需要传入窗体类名就能做到呢?
如:ShowForm(欲显示的窗体类)

------解决方案--------------------
C# code

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void showForm<T>(params object[] args)
            where T:Form
        {
            Form form = null;
            IEnumerable<T> forms = Application.OpenForms.OfType<T>();
            if (forms.Any())
                form = forms.First();
            if (form == null)
               form =(Form) Activator.CreateInstance(typeof(T), args);

            if (form.WindowState == FormWindowState.Minimized)
                form.WindowState = FormWindowState.Normal;
            else
                form.Show();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.showForm<Form2>();
        }
    }