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

时间:2017-06-22 11:37:08

标签: vb.net controls

我对表单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

但是,在每个子设备中,控件名称都是硬编码的,可以调用.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

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

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

1 个答案:

答案 0 :(得分:1)

如果它们都是同一个类(或基类),那么只需转换为该类。如果它们都是不同的类但具有相同的方法Load and Loaded,那么我建议你创建一个接口。

Interface ISomeName

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

End Interface

确保所有类都实现它,然后只需转换为该接口。

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