我对表单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
而不是通用控件。
答案 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