2010-04-30 3 views
4

약 45 개의 폼이있는 .NET Framework로 작성된 Windows CE 응용 프로그램을 유지 관리하고 있습니다. 원하는 기능으로 연결되는 5 개의 '섹션'이 있습니다. 응용 프로그램은 100 % 전체 화면이며 최소화 할 수없는 것이 중요합니다.Compact Framework 모범 사례 : GUI 작성

양식이 너무 많아서 양식을 닫은 후에 표시 할 양식을 추적하기가 어렵습니다. 이를 위해 양식을 표시하기 전에 양식 소유자 속성을 설정하고 닫을 때 소유자를 표시합니다.

또한 응용 프로그램이로드 될 때 모든 양식을 인스턴스화하고 처리 시간을 절약하기 위해 처리하지 않는 것이 가장 좋습니다. 나는 이것에 대해 잘 모르겠습니다.

제 질문은 모든 1 형식이 전체 화면으로 표시되기를 원하는 곳에 양식을 숨기고 표시하는 가장 좋은 방법은 무엇입니까?

답변

3

응용 프로그램이 시작될 때 45 개의 폼을 인스턴스화하는 경로는 사용하지 않을 것입니다. 이렇게하면 시작 시간이 심각하게 길어지며 아마도 메모리 리소스가 소모되는 것은 아닙니다. 사용자가 필요로하지 않을 수도있는 기능을 모두 제공 할 수 있습니다.

내 WinMo 응용 프로그램에서 각 양식은 상대적으로 작은 데이터 하위 집합에서 작동하도록 설계되었으므로 시작 시간은 데이터베이스 호출과 양식 컨트롤에 데이터로드로 제한됩니다. 일반적으로 이러한 양식 중 하나를 인스턴스화하고 표시하는 데 필요한 시간은 결코 두 번째 또는 두 번째입니다.

양식을 표시하는 데 시간이 오래 걸리는 경우 데이터 검색 또는 데이터가 양식의 컨트롤에로드되는 방식에 문제가있을 수 있습니다 (예 : 전체를 렌더링하는 맞춤형 그리드보기 컨트롤이있을 수 있습니다. 한 번에 12 개만 표시 되더라도 300 개의 행). 데이터가 너무 커서 검색하는 데 시간이 오래 걸리는 경우 사용자가 실제적으로 상호 작용할 수있는 것보다 훨씬 많은 데이터가 발생할 가능성이 있습니다.

사용자가 이동해야하는 위치를 얻으려는 "5 섹션"에 대한 언급으로 5 레벨을 무언가로 "최대 드릴링"할 수 있습니다. 각 양식을 구체화하여 구체화하고 ShowDialog을 사용하여 다음 양식을 표시하는 경우 한 번에 최대 5-6 개의 양식이 존재하게되며 이는 .Net CF 응용 프로그램에 문제가되지 않습니다. 항상). 이렇게하면 언제 어디서나 양식을 열 때 추적 할 양식을 추적 할 수있는 특별한 작업을 수행 할 필요가 없으며 양식이 닫히면 자동으로 호출 양식으로 돌아갑니다.

처리해야하는 z-order/task manager 이상한 점이 있지만 특별히 복잡하지는 않습니다. 자식 폼에 ShowDialog을 호출하기 전에 부모 폼의 Text 속성을 빈 문자열로 설정 한 다음 ShowDialog이 반환 된 후 폼의 원래 캡션으로 다시 설정합니다. 이것은 꼭 필요한 것은 아니지만 Windows Mobile (적어도 버전 6까지)에서 열려있는 모든 .Net 양식 (비어 있지 않은 Text 속성 포함)은 모두 실행 프로그램 목록에 표시됩니다 (모두 동일하더라도). 신청. 필자는 일반적으로 하나의 프로그램처럼 보이는 다중 형식 응용 프로그램을 선호하므로 일반적으로 모든 양식의 Text을 응용 프로그램의 이름으로 설정합니다.

또한 모든 UI 부분을 양식 대신 UserControl으로 구현 한 단일 양식 응용 프로그램을 실험 한 다음 양식을 만들고 여는 것처럼 컨트롤을 만들고 쌓습니다. 이것은 작동하지만 해킹이며 권장하지 않습니다. 폼에는 Load 이벤트가 있고 UserControls에는없는 것이 주된 문제입니다.

+1

아,하지만 UserControls 주변의 프레임 워크를 사용하면 자신의 Load 이벤트를 만들게됩니다. – ctacke

+0

Bah, 더 이상 * 컨트롤 *을 사용하지 않습니다. 화면에 'BitBlt'만 있습니다. :) – MusiGenesis

+0

아, 난보기 47 UserControls 한 양식이 있습니다. 그러나 재미있는 점은 모든 뷰에 * 모든 UI 요소를 표시하는 데 사용되는 단일 사용자 정의 컨트롤이 있다는 것입니다. 기본적으로 필요한 알파 블렌딩을 얻으려면 필자는 "swiss army knife"컨트롤을 만들고, 사용자 정의 페인팅과 혼합하고 도구 상자에있는 모든 것을 버렸다. CF 개발의 즐거움. – ctacke

3

프로세스에 많은 변수가 있으므로 one-size-fits-all 방법론이 없습니다. 물론 모든 양식로드는 처음에는 페이지 간 탐색이 빠르다는 것을 의미하지만로드가 느려지고 메모리가 부족할 수도 있습니다.

내 일반적인 방법론은 개인적으로는 OpenNETCF IoC framework의 팬이지만 개인적으로 편향되어 있습니다. (그 조회수가 형성, 사용자 CFontrols, 패널 또는 무엇이든 완벽하게 논쟁의 여지가 수 있는지 여부)

  1. 이 모델에서보기 구분 : 어떤 경우

    , 당신은 두 가지 일을 일반적인 프레임 워크가 필요합니다. 전면에 있고 (다시 formaward 이동하거나하고 있는지)하는보기 "다음"되어야 하는지를보기
  2. 트랙

나는이 ages ago for MSDN에 대한 간단한 프레임 워크 문서를했다. 더 순수한 MVC와 IoC 프레임 워크 more recently을 사용하도록 업데이트했습니다.

이것은 내 길은 유일한 길 또는 "올바른 길"이라고 말하는 것은 아닙니다. 그러나이 방법론은 데스크톱과 장치 모두에서 여러 배포에 성공한 것으로 나타났습니다.

우리는 귀하의 요구 사항이나 한계가 무엇인지 전혀 모르기 때문에보다 세분화 된 제안을하기가 어렵습니다. 매우 제한된 메모리와 많은 그래픽이있는 느린 ARM 장치에서 실행중인 경우 펜실 루니아 (Pentium-class) x86 임베디드 어플라이언스와 RAM을 사용하여 다른 방식 (캐싱, 지연로드 등)을 다르게 공격합니다.

편집

당신은 MusiGenesis 내가이 공격을 얼마나 차이가 더 "오른쪽"방법이 없다는 사실을 강조 것을 볼 수 있습니다. 우리가 말했듯이 47 개의 뷰가있는 전체 화면 임베디드 응용 프로그램의 코드를 작성하고 프로젝트에 하나의 양식 만 포함되어 있습니다. 그는 아마도 47 개의 다른 양식을 사용할 것입니다. 둘 다 일을 끝내야 해. 공통점은 우리가 무엇이 정상에 있어야 하는지를 알아야하는 모든 끈적 거리는 사람들을 다루는 기본 인프라의 형태를 가지고 있다는 것입니다. 그는 ShowDialog를 사용하여 Forms의 네이티브 z-order를 나타냅니다. 나는 당신이 어디서 왔는지 기억하는 커스텀 프레임 워크에 의존한다.

다시 말하지만, 이는 프로젝트 요구 사항을 충족하는 한 옳고 그른 것을 강조하는 것입니다.

+0

사실, 처음부터 시작한다면 * I *는 당신의 방식대로 할 것입니다. 내 방법은 새 버전의 Windows Mobile을 사용하여 중단해야하는 해킹입니다 (새 버전이 있다고 가정). 초보자가 일반 Windows 프로그래밍 (그게 좋은 일인가)과 비슷하기 때문에 조금 더 쉬울 수도 있습니다. – MusiGenesis