Как я могу динамически получить доступ к методу из всех открытых форм с опцией строго по - PullRequest
0 голосов
/ 16 января 2020

Итак, у нас есть приложение с несколькими формами, у большинства форм есть метод 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
Public Class ExampleForm_1
   Public Sub recol()
       BTN1.backcolor = My.Settings.examplecolor1
       BTN2.backcolor = My.Settings.examplecolor2
   End Sub
End Class

...

Public Class ExampleForm_N
   Public Sub recol()
       SomeCustomControl1.linecolor = My.Settings.examplecolor12
       BTN1.backcolor = My.Settings.examplecolor3
   End Sub
End Class

Имена классов форм не следуют за SomeName_number, т.е. ExampleForm_1, ExampleForm_2… et c

1 Ответ

0 голосов
/ 16 января 2020

Если вы хотите применить стандартное форматирование (цвета в вашем случае) к указанным c типам элементов управления (т. Е. К одному и тому же цвету на всех кнопках во всех формах), вы можете попробовать добавить расширение к типу формы.

Например, поместите следующий код в модуль:

<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

Затем метод ReCol будет автоматически добавлен к каждой форме в вашем проекте, а затем вы сможете изменить свою функцию ReColorAll примерно так:

 Public Shared Sub RecolorAll()
    For Each win As Form In My.Application.OpenForms
        win.ReCol()
    Next
 End Sub

Конечно, вы можете легко изменить этот код, чтобы загрузить определенные c настройки для указанного c элемента управления в указанной c форме из настроек, если вы sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...