使用字符串名称 VB.NET 获取表单控件

Get form control using string name VB.NET

我在表单 UserNameCtrl 上有一个控件,该控件有一个名为 LoadCtrl

的子控件

我基本上有很多这些用于点击的子程序,所以我想将它们全部放入一个事件处理程序中

Private Sub NewsletterBtn_Click(sender As Object, e As EventArgs) Handles NewsletterBtn.Click, NewsletterImage.Click
    If Not MainNewsletterCtrl.Loaded() Then MainNewsletterCtrl.Load()
End Sub

然而,在每个 sub 中,控件名称都被硬编码为调用 .loaded.load 功能。

我写了一个新版本

Private Sub GenericNavItem_Click(sender As Object, e As EventArgs)
        Dim ctrl As Control = Controls.Find(sender.tag, True).FirstOrDefault

       'Want to do the Controlname.Load here           

    End Sub

使用标签(我命名为控件名称)我得到了相应的控件。但它把它作为控件带回来,而不是我想要的类型。

我知道我将其声明为控件,但我不知道如何将其转换为 ControlName.Load 而不是通用控件。

如果它们都相同 class(或基数 class),则只需转换为那个 class。如果都是不同的class但是Load和Loaded的方法是一样的,那么我建议你创建一个接口

Interface ISomeName

    Sub Load()
    Function Loaded() As Boolean()

End Interface

确保你所有的 class 实现它,然后只转换到那个接口。

Private Sub GenericNavItem_Click(sender As Object, e As EventArgs)
    Dim ctrl As Control = Controls.Find(sender.tag, True).FirstOrDefault
    Dim ctrlInterface As ISomeName = CType(ctrl, ISomeName)

    If Not ctrlInterface.Loaded() Then ctrlInterface.Load()

End Sub