Решение "Ближайший к вашему вопросу".
Вы можете сделать делегатов из этих отчетов и вызвать их, просмотрев соответствующую строку в Hashtable:
Public Sub New()
'...
ReportTable.Add("Security", New ReportDelegate(AddressOf ShowSecurityReport))
ReportTable.Add("Config", New ReportDelegate(AddressOf ShowConfigReport))
ReportTable.Add("RoleUsers", New ReportDelegate(AddressOf ShowRoleUsersReport))
'...
End Sub
Private Sub ShowSecurityReport()
'...
End Sub
Private Sub ShowConfigReport()
'...
End Sub
Private Sub ShowRoleUsersReport()
'...
End Sub
Private Delegate Sub ReportDelegate()
Private ReportTable As New Dictionary(Of String, ReportDelegate)
Private Sub ShowReport(ByVal reportName As String)
Dim ReportToRun As ReportDelegate
If ReportTable.TryGetValue(reportName, ReportToRun) Then
ReportToRun()
Else
pnlMessage.Visible = True
litMessage.Text = "The report name """ + reportName + """ is invalid."
End If
End Sub
Таким образом, вы можете добавить столько отчетов, сколько захотите, и ваша способность их отражать, а также удачное отражение, не проблема.