2013-05-29 5 views
1

Мне нужен метод, который может быть отправлен только форме формы для открытия, а затем открыть эту форму.Открыть общую форму

Это то, что я до сих пор:

private void OpenForm(Type t) 
{ 
    if (OpenedForm != null) 
    { 
     OpenedForm.Close(); 
    } 
     IList list = (IList)Activator.CreateInstance(
     typeof(List<>).MakeGenericType(t)); 
     OpenedForm.MdiParent = this; 
     OpenedForm.Show(); 
     OpenedForm.WindowState = FormWindowState.Maximized; 
} 

Я знаю, что могу сделать метод как это:

private void OpenForm(Form frm) 
{ 
    if (OpenedForm != null) 
    { 
     OpenedForm.Close(); 
    } 
    OpenedForm = frm; 
    OpenedForm.MdiParent = this; 
    OpenedForm.Show(); 
    OpenedForm.WindowState = FormWindowState.Maximized; 
} 

А потом просто называют это так:

Form newform = new TestForm(); 
OpenForm(newform); 

Но мне было бы интересно узнать, возможно ли это сделать, как я попытался в первом фрагменте кода, и что нужно сделать для ac приложите это.

ответ

2
private void OpenForm(Type t) 
{ 
    if(!typeof(Form).IsAssignableFrom(t)) 
     throw new ArgumentException("Required description of Form Type", "t"); 

    if (OpenedForm != null) 
     OpenedForm.Dispose(); //will also close a Form 

    OpenedForm = (Form)Activator.CreateInstance(t); 
    OpenedForm.Show(); 
    OpenedForm.WindowState = FormWindowState.Maximized; 
} 

Теперь вы можете передать только Type метаданные Form класса или его производным один. Так что если вы делаете:

OpenForm(typeof(Form)); 

Новая пустая форма будет создана и открыта

+0

Очень интересно! Благодаря! Работает как шарм. – Corne

Смежные вопросы