2014-10-24 4 views
1

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

Private Sub ParametresEtablissement(ByRef frmmain As Form, ByRef frmparametablissement As Form, ByRef OpenedForms As FormCollection, ByVal TypeOfFrmEtablissement As Type) 
      If (frmparametablissement Is Nothing) Then 
       frmparametablissement = New TypeOfFrmEtablissement 
       frmparametablissement.MdiParent = frmmain 
       frmparametablissement.Show() 
      Else 
End Sub 

Но у меня есть ошибка в этой строке:

frmparametablissement = New TypeOfFrmEtablissement 

ошибка Type TypeOfFrmEtablissement is not defined

Так что мне нужно знать:

  1. Каковы причины этой ошибки?
  2. Как это исправить?

ответ

2

Что такое TypeOfFrmEtablissement? Имеет ли он конструктор по умолчанию?

Возможно, вы захотите посмотреть Activator.CreateInstance. Вы можете передать тип объекта в качестве параметра, и он вернет экземпляр, используя конструктор по умолчанию этого типа.

Dim instance As IExample = DirectCast(Activator.CreateInstance(theType), IExample) 

Вы также можете посмотреть на Generics для создания объектов, но я думаю, что было бы излишним для ваших требований.

Public Function f(Of T)() As T 
    Dim tmp As T = GetType(T).GetConstructor(New System.Type() {}).Invoke(New Object() {}) 
    Return tmp 
End Function 

Обновления следовать комментарию Lamloumi в:

Я создал новый проект, добавил новую форму (Form2) и назвал это из конструктора Form1 и нового экземпляра Form2 было создана и отображаются.

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim frmparametablissement As Form = CreateFormInstance(Form2) 
    frmparametablissement.Show() 
End Sub 

Private Function CreateFormInstance(Of T As Form)(type As T) As T 
    Return Activator.CreateInstance(GetType(T)) 
End Function 
+0

В моем случае тип передается как аргумент: TypeOfFrmEtablissement - это форма окна –

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