Установите фоновый цвет для каждой формы в vb.net

#vb.net

#vb.net

Вопрос:

Как я могу установить BackColor для каждой формы, которая существует в моем vb.net (fw 4.7.2) проект?
И да, я мог бы сделать

 Form1.BackColor = ...  
Form2.BackColor = ...
......
  

но тогда это было бы слишком грязно.

Ответ №1:

  • Откройте одну из ваших форм в конструкторе, любую форму, не имеет значения
  • Щелкните фон формы
  • В таблице свойств вверху перейдите в (Настройки приложения), затем нажмите кнопку с точками в (Привязка свойств), найдите BackColor в списке свойств, щелкните выпадающий список рядом с ним и нажмите кнопку Создать внизу
  • Вызовите параметр ThemeColor, выберите нужный цвет для светлой темы, например, белый
  • Все в порядке
  • Откройте конструктор для другой формы, снова перейдите в Настройки приложения / Привязку свойств. На этот раз не нажимайте кнопку Создать, просто привяжите BackColor к существующей настройке ThemeColor
  • Повторите для всех форм в вашем приложении

  • Добавьте кнопку в форму «Настройки» (или в любое другое место, где вы хотите предложить переключатель для темы), и в ее обработчике щелчков напишите:

    Мои настройки.ThemeColor = Цвет.Белый

  • Добавьте в форму еще одну кнопку, задайте для ее обработчика кликов заданный цвет.Черный


  • Запустите приложение. Откройте одну или несколько форм, включая форму настроек. Нажмите одну из кнопок, чтобы изменить настройку. Все формы меняют цвет

Комментарии:

1. Добро пожаловать! Обратите внимание, что если вы хотите, чтобы настройка сохранялась при следующем открытии приложения, выполните a My.Settings.Save() в событии FormClosing основной формы программы (или закрытие формы настроек)

2. Хорошо. Хорошо, что это работает, но, к сожалению, это относится только к фоновому фону формы, но не меняет цвет фона элементов управления или панелей в форме…

3. Почему вы этого ожидаете? Если вы хотите изменить их, привяжите их также. Изменение цвета обратной стороны элемента управления в форме на тот же цвет, что и цвет обратной стороны формы, делает их довольно трудными для просмотра; рассмотрите возможность привязки к другим настройкам и изменения их независимо, или перечислите все элементы управления во всех формах, или посмотрите на решения для скининга / тематизации

4. Хм. Так что мне нужно привязать каждый элемент управления?

5. Хорошо.. да! Как и в случае с каждым текстовым полем, если вы хотите, чтобы его текст был чем-то, вы устанавливаете его текст (или устанавливаете его привязки) на что-то. Или вам нужно перечислить все элементы управления во всех формах (например, в другом ответе перечислены открытые формы, вы также можете сделать рекурсивно For Each c as Control in someForm.Controls ) и установить properties ( If TypeOf c is TextBox Then... ) . Или у вас есть каждая форма, которая прослушивает изменения настроек и перечисляет их элементы управления. Или вам нужно посмотреть, не написал ли кто-нибудь движок скининга или тематизации, который, по сути, делает то же самое. Компьютеры делают только то, что вы им прикажете

Ответ №2:

Вы могли бы:

 For Each f as Form in Application.OpenForms
  f.BackColor = Color.Red
Next f
  

в любой момент после того, как вы открыли кучу форм

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

Я бы сказал, что вы могли бы создать класс:

 Public Class ColoredForm
    Inherits Form
    Public Sub New()
        Me.BackColor = Color.Red
    End Sub
End Class
  

И затем в каждой добавляемой вами форме откройте конструктор и измените код так, чтобы он наследовал эту форму; но это портит файлы конструктора (не все хотят это делать, и изменения могут быть потеряны, если они будут восстановлены) и на самом деле ничем не отличается от just.. настройка цвета фона в сетке свойств конструктора. Если у вас есть какое-то более сложное поведение, которое вы хотите, чтобы все ваши формы переняли, тогда рассмотрите наследование, но если это так же тривиально, как установка BackColor, просто делайте это в каждой форме во время разработки (если у вас много форм, можете использовать find / replace для этого)

Комментарии:

1. Ну, настройка цвета в конструкторе не так уж и сложна, но я хочу, чтобы переключатель включал / выключал темный режим. Итак, у вас есть какой-нибудь пример проекта или, по крайней мере, код, я не совсем понимаю 2. вариант. 1. один плохой, потому что почему я должен открывать (в настоящее время, позже более точно) 22 формы в один момент?

2. Вы путаете время выполнения с временем разработки, но теперь, когда вы немного подробнее объяснили свои требования, я дам другой ответ