zhufusiji
zhufusiji
采纳率100%
2013-10-29 03:20 阅读 2.4k
已采纳

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 14: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

    这个应该能解决你的问题

    点赞 1 评论 复制链接分享

相关推荐