2014-12-11 3 views
1

У меня есть приложение, которое может запускать/обновлять форму (позволяет называть ее QuickNoteForm) из множества различных действий. Он может запускать форму из разных вкладок и в основном запускаться через кнопки по всему моему приложению.Несколько путей открытия

Я в основном хочу отслеживать, откуда он был запущен, т. Е. Мне нужно отслеживать его Путь запуска.

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

Это приложение для форм Windows, а не приложение asp.net.

спасибо.

+0

Статья/вопрос выше может быть более связан с отражением и сборками. Я должен уточнить этот вопрос и поддерживать WindowsForms и общаться в рамках большого приложения. – JeffJeffery

+0

Я перечислил некоторые идеи в своем ответе. Чтобы быть более конкретным, просьба предоставить более подробную информацию о вашем дизайне, некоторые скриншоты могут помочь. – Neolisk

+0

Спасибо. Я думаю, что подход, который вы упоминаете, работает для меня. – JeffJeffery

ответ

0

Создайте перечисление, в котором будут перечислены все возможные пути (или статический класс с константами, если вы беспокоитесь об ремонтопригодности, перечисления не работают хорошо при компиляции, а затем изменены). Добавьте в форму пользовательский конструктор, который будет принимать это перечисление в качестве параметра. Когда вы создаете экземпляр формы, используйте этот конструктор. В основном заменить все вхождения New QuickNoteForm() на New QuickNoteForm(yourEnumValue). Для совместимости добавьте значение Unknown = 0 в перечисление, таким образом, конструктор по умолчанию вызывающей формы будет работать тоже, просто не так полезен.

Если этот подход не является практичным (просьба предоставить более подробную информацию о вашем приложении), вы также можете указать параметр контекста как параметр в конструкторе формы. Затем введите код If typeOf ctl Is Button AndAlso DirectCast(ctl, Button).Text = "Something" Then и всевозможные сумасшедшие вещи. Это способствует разграничению проблем, то есть вызывающему коду не нужно знать, как звонить и только передавать себя в качестве параметра, но также делает ваш код более сложным для поддержания, потому что вы можете получить один гигантский метод know-all-all, который соединит все части вместе.

+1

Ваш первый абзац соответствует моему требованию. Спасибо. это хорошее решение для отслеживания звонящих через enum. – JeffJeffery