#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. Вы путаете время выполнения с временем разработки, но теперь, когда вы немного подробнее объяснили свои требования, я дам другой ответ