Vb.net 我如何在option strict打开时从所有打开的窗体动态访问方法
因此,我有一个多表单应用程序,大多数表单都有一个方法Vb.net 我如何在option strict打开时从所有打开的窗体动态访问方法,vb.net,Vb.net,因此,我有一个多表单应用程序,大多数表单都有一个方法recol(),我想对所有打开的表单应用一个应用程序范围的主题。但是,我也要严格要求。我不必单独调用每个表单的recol()方法 我现在拥有的示例: Public Class Theme Public Shared Sub RecolorAll() For Each win As Form In My.Application.OpenForms If win.Name.ToString <>
recol()
,我想对所有打开的表单应用一个应用程序范围的主题。但是,我也要严格要求。我不必单独调用每个表单的recol()
方法
我现在拥有的示例:
Public Class Theme
Public Shared Sub RecolorAll()
For Each win As Form In My.Application.OpenForms
If win.Name.ToString <> meloadscreen.Name Then
#Disable Warning BC42017 ' Late bound resolution
win.recol()
#Enable Warning BC42017 ' Late bound resolution
End If
Next
End Sub
End Class
表单类名不跟随SomeName\u编号,即
ExampleForm\u 1
,ExampleForm\u 2
…等如果您希望对特定类型的控件(即所有表单中的所有按钮都使用相同的颜色)应用标准格式,则可以尝试向表单类型添加扩展名
例如,在模块中放置以下代码:
<System.Runtime.CompilerServices.Extension>
Public Sub ReCol(ByRef MyForm As Form)
For Each Ctl As Control In MyForm.Controls
If Ctl.GetType.Equals(GetType(Button)) Then
Ctl.BackColor = My.Settings.examplecolor1
End If
Next
End Sub
当然,如果您愿意,您可以轻松地修改此代码,以从settings(设置)加载特定表单中特定控件的特定设置。您可以在所有表单中实现一个接口,需要使用
recal()
方法。使用Sub-recol()
方法命名接口,例如IRecall
。然后,您可以为My.Application.OpenForms中的每个f As表单编写如下内容:如果GetType(IRecall).IsAssignableFrom(f.GetType()),则编写DirectCast(f,IRecall).Recl()如果next(下一步),则结束。sub必须声明为公共sub RECL(),实现IRecall.RECL
,当然。@Jimi谢谢,这似乎有效recol
对于该方法来说是个坏名字。方法应该使用Pascal大小写,并且应该使用完整的单词进行描述。命名方法Recolor
。特别是对于Intellisense,额外的几个字符不会杀死你,它会提高代码的清晰度。代码清晰性应该是您的最高优先级之一。然后我会倾向于将接口命名为IRecolorable
。考虑到IDisposable
接口有一个Dispose
方法,这样的命名是一致的,一致性有助于清晰。谢谢你的指点。
Public Class ExampleForm_N
Public Sub recol()
SomeCustomControl1.linecolor = My.Settings.examplecolor12
BTN1.backcolor = My.Settings.examplecolor3
End Sub
End Class
<System.Runtime.CompilerServices.Extension>
Public Sub ReCol(ByRef MyForm As Form)
For Each Ctl As Control In MyForm.Controls
If Ctl.GetType.Equals(GetType(Button)) Then
Ctl.BackColor = My.Settings.examplecolor1
End If
Next
End Sub
Public Shared Sub RecolorAll()
For Each win As Form In My.Application.OpenForms
win.ReCol()
Next
End Sub