Во-первых, нет смысла сравнивать свойства объектов, когда вы можете сравнивать объекты, т.е. не делайте этого:
If DataGridName.Name = Dgv_1.Name Then
, а скорее делайте это:
If DataGridName Is Dgv_1 Then
Что касаетсятвой вопрос, то, что ты просишь, на самом деле не возможно.Если вы хотите вызвать такой конструктор, вы ДОЛЖНЫ указать тип данных.Есть способы несколько упростить ваш код.Например,
Dim grids = {Dgv_1, Dgv_2, Dgv_3, Dgv_4}
Dim gridNumber = Array.IndexOf(grids, DataGridName) + 1
Dim dialogue As Form
Select Case gridNumber
Case 1:
dialogue = New RightClickMenuDgv_1("Change", ValueMaster, ValueIdDgv(gridNumber))
Case 2:
dialogue = New RightClickMenuDgv_2("Change", ValueMaster, ValueIdDgv(gridNumber))
Case 3:
dialogue = New RightClickMenuDgv_3("Change", ValueMaster, ValueIdDgv(gridNumber))
Case 4:
dialogue = New RightClickMenuDgv_4("Change", ValueMaster, ValueIdDgv(gridNumber))
End Select
If dialogue.ShowDialog() = DialogResult.OK Then
RefreshDataGrids("Change")
End If
Невозможно обойтись без четырех отдельных строк для создания четырех отдельных типов диалогов, если только вы не захотите прибегнуть к использованию Reflection, которая кажется глупой для сохранения полдюжины строк кода.