Возможно ли иметь один файл, который контролирует внешний вид моей настраиваемой строки заголовка, к которому я могу получить доступ из любой формы?

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

Подложки являются стандартными:
Защищенные переопределения Sub OnFormClosing (ByVal e As FormClosingEventArgs)
Защищенные переопределения Sub OnPaint (ByVal e As PaintEventArgs)
Защищенные переопределения Sub OnResize (ByVal e As System .EventArgs)
Защищенное переопределяет Sub WndProc (ByRef m как сообщение)

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

Я инициировал событие OnPaint, находящееся в TitleBar (класс, не относящийся к форме), но я не могу заставить TitleBar применить какие-либо настройки к любой форме. Можно ли каким-либо образом обойти значения в элементах Me и MyBase в TitleBar и присвоить им значения вызывающей формы? Или я могу заставить TitleBar одалживать свои ресурсы? Любая помощь будет принята с благодарностью. Кстати, есть ли слово или фраза для обозначения того, что я пытаюсь достичь?

Это был долгий раунд проб и ошибок.
Спасибо


person Michele H.    schedule 05.09.2020    source источник
comment
См. Описанный здесь шаблон формы: Как нарисовать прямоугольник с закругленными углами в качестве границы для закругленной формы? и примечания о последовательность инициализации производной формы здесь: Как получить размер унаследованной формы в базовой форме?.   -  person Jimi    schedule 05.09.2020
comment
Чтобы добавить элементы управления (и связанные события) в шаблоны форм, загруженные из библиотеки, см. Здесь: Рекомендации по загрузке формы внутри основной формы, оба находятся во внешней сборке DLL (не обращая внимания на лучшие практики, я не могу сказать, какие лучшие практики).   -  person Jimi    schedule 05.09.2020


Ответы (1)


Создайте форму как обычно и добавьте этот общий код. Во всех других формах вместо наследования стандартного класса Form наследуйте только что созданный класс, содержащий общий код. Так работает наследование в ООП.

Если вы наследуете форму из библиотеки, на которую указывает ссылка, вы можете выбрать Унаследованная форма в диалоговом окне Добавить новый элемент, но это не работает для наследования форм в том же проекте. . По крайней мере, это не работает в проекте приложения, хотя я не тестировал в проекте библиотеки. Альтернативой является добавление формы как обычно, нажмите кнопку Показать все файлы на панели инструментов в Обозревателе решений, разверните узел формы, дважды щелкните конструктор файл кода, чтобы открыть его, а затем вручную отредактировать тип, от которого наследуется ваша форма, например измените это:

Partial Class Form2
    Inherits System.Windows.Forms.Form

к этому:

Partial Class Form2
    Inherits Form1
person jmcilhinney    schedule 05.09.2020
comment
Строка заголовка загружается правильно, спасибо. Вы знаете, почему происходит следующее? Когда форма загружается, я могу видеть все заполнители (местоположения) для изображений и меток формы без загрузки этих элементов управления, и я вижу четыре из пяти кнопок, которые загружаются в цвете наведения курсора мыши. Форма не отображается правильно, пока я физически не перемещу ее. А затем, когда я снова перемещаю мышь, большинство кнопок снова меняют цвет на цвет при наведении курсора мыши. Я ценю любую помощь. Спасибо - person Michele H.; 05.09.2020
comment
@MicheleH., Скорее всего, это связано с вашей индивидуальной раскраской, но сложно сказать наверняка. Я предлагаю вам задать новый вопрос по этой теме и включить всю информацию, относящуюся к этой проблеме. Вы должны предоставить самый простой пример, который вы можете продемонстрировать, вместо того, чтобы включать весь ваш существующий код и, вероятно, скрывать проблему. - person jmcilhinney; 05.09.2020