使用字符串名称 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
我在表单 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