Windows Mobile - только одна форма открыта. Лучший дизайн вопрос - PullRequest
1 голос
/ 01 мая 2009

Так что я считаю себя .Net и ASP.NET pro, но я немного новичок в Windows Mobile (я нацеливаюсь на .net 3.5 CF и Windows Mobile 6).

Я создаю приложение, управляемое данными, которое будет иметь 3-4 таблицы. Я создал форму для каждой таблицы, которая позволяет пользователю осуществлять поиск в таблице.

Каждая форма унаследована от главной формы, поэтому у них есть одинаковое меню.

Мой вопрос: как мне убедиться, что открыто только одно окно? Я хочу разрешить пользователю перейти в меню и выбрать таблицу, которая откроет новую форму. Я не хочу, чтобы пользователь открывал, скажем, каждую форму, а затем, когда они закончили, закрывать 3 или 4 окна. Это возможно? Если да, то как мне это сделать? С другой стороны, есть лучший способ сделать это. Я не хочу всю свою логику в одной форме. Так что я не просто хочу прятаться и показывать панно.

Ответы [ 3 ]

1 голос
/ 01 мая 2009

Вместо нескольких форм (унаследованных от mainForm) вы можете поместить элементы таблицы в элементы управления UserControls и получить полный контроль над их созданием / уничтожением / видимостью. Используйте Interface или BaseUserControl для реализации общих функций.

1 голос
/ 14 мая 2009

Эта статья, хотя и не совсем та, о которой вы спрашиваете, была очень полезна, когда я занимался редизайном приложения .NET CF: Создание инфраструктуры приложений с несколькими формами для .NET Compact Framework

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

(Псевдокодирование после этого)
Я создал ViewManager и реализовал его как синглтон. Когда приложение запускается впервые, я вызываю ViewManager.GotoForm (frm). Это устанавливает текущую форму в любую нужную мне форму. Затем я немедленно вызываю ViewManager.CurrentForm.ShowDialog () - я уверен, что есть лучший способ, но я обнаружил, что мне нужно было вызвать ShowDialog () в НЕКОТОРОЙ точке просто для того, чтобы появилась форма.

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

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

1 голос
/ 01 мая 2009

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

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

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

Это не так много кода для написания и работает хорошо.

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

Затем при завершении работы концентратор приложения может проверить, какие формы открыты (он должен иметь ссылку на каждую запущенную форму), и закрыть их для пользователя.

...