Как конвертировать строку в Generic Of T? - PullRequest
0 голосов
/ 06 мая 2019

Как я называю универсальный Of T суб-выбрать строку формы?
Как улучшить код, как это?

Sub ShowAddfrm(Of T As {Form, New})()
     dim frm as new T 'New Form
     frm.Show()
End Sub
Private Sub btnAddProblemfrm_Click(sender As Object, e As EventArgs)
    Dim keys As String = CType(sender, Button).Name.Replace("btnAdd", "")

    If keys = "frmShowProblem" Then
        ShowAddfrm(Of frmShowProblem)()
    End If

    If keys = "frmUser" Then
        ShowAddfrm(Of frmUser)()
    End If
End Sub

1 Ответ

0 голосов
/ 07 мая 2019

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

ShowAddfrm(Form2)

или название формы:

ShowAddfrm("Form2")

или с использованием свойства Tag элемента управления (или любого другого источника) в обработчике событий:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ShowAddfrm(DirectCast(sender, Control).Tag.ToString())
End Sub

Есть разница:

  • если вы передадите экземпляр Form, будет создан только этот экземпляр. Это означает, что если вы используете кнопку для отображения формы и нажимаете кнопку несколько раз, новые экземпляры не будут создаваться. Если вы закроете форму, появится новый экземпляр.
  • Если вы используете строковую версию, каждый раз, когда вы вызываете этот метод, будет отображаться новый экземпляр формы, так что вы можете иметь несколько форм на экране.

Версия string использует Activator.CreateInstance для создания нового экземпляра формы с использованием его имени.

Sub ShowAddfrm(Of T As {Form, New})(ByVal form As T)
    form.Show()
End Sub
Sub ShowAddfrm(formName As String)
    Dim appNameSpace = Assembly.GetExecutingAssembly().GetName().Name
    Dim form = CType(Activator.CreateInstance(Type.GetType($"{appNameSpace}.{formName}")), Form)
    ShowAddfrm(form)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...