Итак, у меня есть форма в VB, которая видна, кроме случаев, когда программа запускается беззвучно, и в этом случае форма все еще загружается, но взаимодействия выполняются программно. Однако в крошечном числе случаев я хочу, чтобы формы, созданные в невидимой форме, были видимыми. Каков наилучший способ достичь этого, в идеале, без создания новых форм. Некоторые идеи, которые я придумал, но на самом деле не нравится:VB6: Взаимодействие с невидимой формой
- Создание новой формы, передающей hwnd этой формы, чтобы в ней размещались любые применимые окна. Действительно легко сделать, возможно, довольно гибкий. Все еще некрасиво.
- Вызов видимой формы вручную, вытягивание значений, передача данных, заполненных пользователем, в невидимую форму. Это решение, вероятно, самое легкое, но это также взлома. Это ужасное решение, если оно использовалось для более чем небольшого количества форм, но это, вероятно, будет.
- Создание нового класса, рефакторинг форм, запускаемых событиями.
- Настройка основной формы для видимости, но извращение ее функции загрузки, чтобы она фактически ничего не отображала.
Не использовать невидимую форму вообще, код рефакторинга, чтобы лучше разделить функциональность формы от использования. По правде говоря, это в значительной степени уже верно, но я не вижу способа сделать это полностью без какого-либо повторения с использованием классов, поскольку в конечном итоге мне придется иметь разные классы, которые включают одну и ту же функцию. Наверное, идеалистическое решение.
Что я на самом деле закончил делать: Придерживать вызов оболочки в уязвимом месте, которое запускает новый экземпляр копии программы, которая была скомпилирована с разными флагами. Это не так плохо, как кажется. Часть проблемы с использованием любого другого решения заключается в том, что в любое время, когда я хочу пощекотать другой пользовательский интерфейс моего кода, мне нужно создать новый класс контроллера, который обрабатывает соответствующие события по-разному. Большая часть интерфейса программы уже отделена от ее реализации, но для создания нового пользовательского интерфейса мне необходимо добавить дополнительные обработчики событий и многое другое. По общему признанию, вероятно, потребуется всего около трех обработчиков событий, которые запрашивают пользователя для ввода при срабатывании событий.
Edit: В некоторой степени я mistated мою проблему: Вопрос заключается в том, что я хочу, чтобы переработать часть моего существующего пользовательского интерфейса, но не все. Таким образом, делая части, я не хочу, чтобы пользователь видел невидимым, но создавал видимые меню. Разделение отдельных компонентов пользовательского интерфейса, вероятно, в конечном итоге добавит дополнительную сложность в программу.
Последний optiojn определенно лучше, но это также, вероятно, плохая идея. Серьезный рефакторинг - это не то, что я считаю хорошей идеей прямо перед выпуском продукта. – Brian
@Brian: ваш звонок на этот; лично я бы, по крайней мере, попробовал, скорее всего, реорганизованный код будет лучше, чем то, что вы получили от его звука! [и не забудьте тщательно протестировать] –
Часть вопроса заключается в том, что соответствующий код GUI вызывается с помощью событий, которые не работают, когда выполняются внутри модуля. – Brian