2 zhufusiji zhufusiji 于 2013.10.29 11:20 提问

VB.net根据类的名字动态使用某个类

我想实现类似于Java中Class.ForName(XXX)这个功能。具体说明如下

我现在有一个变量存放Form的名称,然后我想根据这个变量直接判断该调用哪个Form的ShowDialog方法

如果无法根据名字获取的话,我只能这样写:

Select Case vFormName
  Case "frm001"
      frm001.ShowDialog
  Case "frm002"
      frm002.ShowDialog
...

那有没有某种方法可以实现如下:

DirectCast(XXXXXX(vFormName), Form).ShowDialog

补充说明:不能用new的形式,比如 vForm = new XXXX(vFormName),因为项目中有功能要求是要全局使用frm001这个东西的。因为是改造项目,所以不能更改这种处理逻辑。

哪位知道,请指教,谢谢啦!

1个回答

playandhappy
playandhappy   2013.10.30 22:30
已采纳

Public Class MyForm
Inherits System.Collections.CollectionBase
Private Lists() As FormIndexAndName
Default Public ReadOnly Property Item(ByVal Name As String) As System.Windows.Forms.Form
Get
Dim i As Int32
For i = 0 To Lists.Length - 1
With Lists(i)
If .Name = Name Then
Return Me.List.Item(.Index)
End If
End With
Next
Return Nothing
End Get
End Property

Public Sub AddItem(ByVal btnItem As System.Windows.Forms.Form, Name As String)
    ReDim Preserve Lists(Lists.Length)
    Lists(Lists.Length).Name = Name
    Lists(Lists.Length).Index = Me.List.Count
    Me.List.Add(btnItem)
End Sub

Private Structure FormIndexAndName
    Dim Index As Int32
    Dim Name As String
End Structure

Sub New()
    ReDim Lists(-1)
End Sub

End Class

这个应该能解决你的问题

Csdn user default icon
上传中...
上传图片
插入图片