2010-05-19 2 views
0

Работает в .NET Compact Framework, C#, .Net 3.5, Visual Studio 2008. Ориентация на устройства Windows Mobile и CE из того же проекта (это приложение CE, работает на оба типа устройств).Compact Framework: Показать диалог и выполнение кода ПОСЛЕ формы показывает

У меня есть форма, которая должна отображаться с помощью ShowDialog. сама форма представляет собой просто пустой экран с сообщением «loading ...». ПОСЛЕ того, как форма отображается на экране, мне нужно запустить еще один фрагмент кода в том же потоке, который выведет другую форму с помощью ShowDialog, так что экран «Загрузка» станет родительским элементом нового экрана.

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

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

Как другие люди решают эту проблему в компактных рамках? если это помогает, у меня есть библиотека OpenNetCF ... есть ли что-то, что может помочь?

ответ

0

закончил с использованием формы активизирует с булевым, чтобы проверить и посмотреть, если я сделал работу или не

0

Хорошо, я буду сопротивляться моему очень сильному побуждению сказать вам, что это неправильно, и вы не должны использовать ShowDialog. Теперь, когда я этого не сказал, давайте посмотрим, что происходит.

Ваше приложение вызывает Application.Run в какой-то момент. Это настраивает насос сообщений, который отправляет события Windows в соответствующие Windows (элементы управления) в системе.

Когда вы вызываете ShowDialog, система устанавливает еще один насос временного сообщения. Это означает, что события Windows, поступающие в этот насос, не будут отправляться снаружи на другие элементы управления (так вы получаете модальность).

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

Это все правильно? Если так, я думаю, есть два пути, на которые я бы посмотрел. Во-первых, я бы посмотрел на переопределение OnActivated в первом диалоге. Поскольку вы используете ShowDialog, я думаю, что это будет почти синоним события Shown.

Если это не совсем то, что вы хотите, я бы посмотрел на добавление MessageWindow в первый диалог (или с помощью SDF's NativeWindow to subclass it) и посмотрим на все входящие в Windows сообщения, чтобы предоставить ваши собственные изображения мероприятие.

+0

коллега указал мне на NativeWindow и я уже использую MessageWindow в другом контексте ... я буду изучите это дальше. Похоже, это самый жизнеспособный ответ на эту проблему. –

+0

хорошо, что было бесполезным делом. Оказывается, есть сообщение 0x18 (WM_SHOWWINDOW) в компактной структуре ... вообще ... так что есть сейчас Показать событие, потому что сообщение для насоса CE не имеет этого сообщения. что дерьмо?! .... –

+0

Конечно, и поэтому у CF нет события Shown. Но если у вас есть подклассы, вы можете посмотреть на вещи, такие как WM_WINDOWPOSCHANGED, WM_ENABLE и WM_CREATE, чтобы выяснить, когда они отображаются. – ctacke

Смежные вопросы