Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 我如何在option strict打开时从所有打开的窗体动态访问方法_Vb.net - Fatal编程技术网

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