Объявление объекта условного типа с помощью System.Type
Я пытаюсь запустить конкретную форму в зависимости от выбранного узла дерева в событии двойного клика. Код, который мне нужно использовать для запуска формы, немного громоздкий, потому что я должен убедиться, что форма не удалена и форма еще не открыта, прежде чем запускать новый экземпляр. Я хотел бы, чтобы вся эта проверка происходила в одном месте в конце функции, что означает, что я должен иметь возможность передавать правильный тип формы в код в конце. Я пытаюсь сделать это с System. Type, но, похоже, это не работает. Может ли кто-нибудь указать мне правильное направление, пожалуйста?
With TreeView.SelectedNode
Dim formType As Type
Select Case .Text
Case "Email to VPs"
formType = EmailForm.GetType()
Case "Revise Replacers"
formType = DedicatedReplacerForm.GetType()
Case "Start Email"
formType = EmailForm.GetType()
End Select
Dim form As formType
Dim form As formType
Try
form = CType(.Tag, formType)
If Not form.IsDisposed Then
form.Activate()
Exit Sub
End If
Catch ex As NullReferenceException
'This will error out the first time it is run as the form has not yet
' been defined.
End Try
form = New formType
form.MdiParent = Me
.Tag = form
CType(TreeView.SelectedNode.Tag, Form).Show()
End With
1 ответ
Ты не можешь new
тип. Тип - это информация типа времени выполнения, new
должен знать тип во время компиляции.
Используйте либо отражение (активатор), либо дженерики.
Извините, я не знаю VB, я не могу дать вам пример кода на VB.
пример C#:
T CreateForm<T>() where T : Form, new()
{
return new T();
}
или же
Form CreateForm(Type t)
{
return (Form)Activator.CreateInstance(t);
}