zhufusiji 2013-10-29 03:20 采纳率: 100%
浏览 2473
已采纳

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

    这个应该能解决你的问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?