2010-03-12 27 views
8

Tôi là một chút mới đối với Windows Mobile (với C# và khung công tác nhỏ gọn), vì vậy tôi không chắc chắn làm thế nào để làm điều này. Người dùng phải đi qua một số trang thông tin theo cách giống như thuật sĩ. Khi bắt đầu có một cửa sổ đăng nhập.Làm cách nào để tôi có thể triển khai biểu mẫu Thuật sĩ một ứng dụng Windows Mobile?

Làm cách nào để tôi thực hiện việc này? Tôi chỉ có các Điều khiển Người dùng khác nhau cho mỗi trang và tạo/hiển thị và hủy/ẩn chúng theo yêu cầu không? Hay tôi cần phải tạo ra các hình thức khác nhau và bằng cách nào đó cho thấy những hình thức đó?

EDIT (từ một người dùng khác so với OP)

Vì tôi cũng đã không tìm thấy một giải pháp tốt cho điều này và các liên kết từ một số các câu trả lời là không thể sử dụng trong Windows Mobile 6.5 Tôi bắt đầu một bounty

Những trông đầy hứa hẹn nhưng có thể' được xây dựng dành cho di động 6,5

http://weblogs.asp.net/justin_rogers/articles/117859.aspx

http://www.codeproject.com/KB/dialog/WizardForm.aspx

http://www.codeproject.com/KB/miscctrl/DesignTimeWizard.aspx

http://winformswizard.codeplex.com/

http://www.differentpla.net/content/2005/02/implementing-wizard-c (tương tự như trên nhưng công việc trước đó)

+0

Tài nguyên khác cho WinForms Wizard tại đây: http://stackoverflow.com/questions/2084048/creating-wizards-for-win-forms-in-c – BillW

+0

Bạn có tìm thấy giải pháp tốt cho thuật sĩ của mình không? Tôi cũng đang tìm kiếm chức năng này và đã thất vọng khi nguồn mã nguồn (mã của môi giới roger) không hoạt động cho các ứng dụng di động. – Tim

Trả lời

6

Tôi sẽ sử dụng một TabControl để "mô phỏng" một phù thủy (lưu ý rằng tôi đã không cá nhân sử dụng một TabControl trong Windows Mobile/Compact bối cảnh FrameWork, nhưng nó liệt kê chính thức của Microsoft như là một phần của FrameWork cho "Windows CE, Windows Mobile cho Pocket PC." Xem: TabControl

Trong WinForms có một cách dễ dàng để ẩn các tab nếu bạn muốn tạo một kinh nghiệm người dùng giống như thuật sĩ: trong sự kiện Tải biểu mẫu đặt Vùng của Tabcontrol thành DisplayRecta ngle của TabControl.

tabControl1.Region = new Region(tabControl1.DisplayRectangle); 

Nếu mà làm việc cho bạn, nó sẽ giúp bạn tiết kiệm rất nhiều rắc rối của việc di chuyển 'UserControls hoặc' Panels xung quanh, và bạn có thể thiết kế TabPages bạn trong chế độ hình ảnh tại thời gian thiết kế, sau đó kiểm soát chuyển hướng từ TabPage để TabPage theo bất kỳ cách nào bạn nghĩ tốt nhất.

Bạn có thể muốn "chụp nhanh" Vùng ban đầu của TabControl trong biểu mẫu 'Tải sự kiện nếu bạn muốn khôi phục tab thành chế độ xem.

Dưới đây là một ví dụ nhanh một cách để làm điều đó: một loại "một chiều" mô hình bắt đầu đến kết thúc:

Xác định một từ điển trong đó mỗi Key là một TabPage, và giá trị boolean của mỗi Mục nhập khóa kiểm soát việc bạn có cho phép người dùng điều hướng đến TabPage đó hay không.

// allocate the Dictionary 
Dictionary<TabPage, bool> CanNavigateDict = new Dictionary<TabPage, bool>(); 

Bạn sẽ muốn "chuẩn bị mà từ điển bằng cách làm một cái gì đó như thế này trong các sự kiện Form Load:

foreach (TabPage theTPage in tabControl1.TabPages) 
{ 
    CanNavigateDict.Add(theTPage, false); 
} 

// show the first TabPage 
tabControl1.SelectedTab = tabPage1; 

Navigation kiểm soát trong mô hình này có nghĩa là bạn cần phải thiết lập giá trị boolean của tiếp theo TabPage để 'true khi, thông qua bất cứ phương tiện nào, bạn đã hài lòng thoả mãn điều kiện hoàn thành của trang hiện tại: mẫu

// sample of how you control navigation in the TabControl 
// by using the CanNavigate Dictionary in the TabControl 'Selecting event 
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) 
{ 
    e.Cancel = ! CanNavigateDict[e.TabPage]; 
} 
3

tôi muốn được đánh giá cao có khuynh hướng sử dụng một container DI/IoC cho th là (cụ thể là tôi muốn sử dụng this one, nhưng khá nhiều trong số đó sẽ hoạt động).

Tôi muốn tạo MainForm là "máy chủ lưu trữ" của ứng dụng. Trên MainForm đó tôi sẽ đặt một DeckWorkspace hoặc một TabWorkspace, tùy thuộc vào cách bạn muốn người dùng được phép điều hướng. Nếu bạn chỉ muốn cho phép chuyển tiếp/quay lại, tôi sẽ đi với một deckworkspace. Nếu họ được phép nhảy vài bước, một TabWorkspace có lẽ sẽ có ý nghĩa hơn.

Sau đó tôi sẽ thêm một vài nút vào MainForm sẽ là các nút điều hướng.

Sau đó tôi muốn tạo SmartPart (xem) cho từng trang thuật sĩ. Bên dưới mui xe là những UserControls, nhưng chúng là những thứ mà Wor4kspaces biết cách sử dụng.

Sau đó tôi muốn tạo ra một WizardService rằng sẽ có một máy nhà nước trong đó cho những gì có giá trị để điều hướng, những gì SmartParts được hiển thị cho một phía trước/sau, vv

Sau đó tôi muốn tạo thuyết trình cho mỗi của SmartParts để kết nối các khung nhìn với WizardService hoặc chỉ là một Presenter duy nhất cho toàn bộ. Điều này sẽ phụ thuộc rất nhiều vào độ phức tạp của dữ liệu thuật sĩ và cách dữ liệu từ bước này sang bước khác có liên quan.

Tiếp theo, tôi sẽ kết nối sự kiện cho các nút điều hướng. Những sự kiện đó sẽ đi tới WizardService, nó sẽ xử lý việc xác định nơi chúng ta cần điều hướng đến và liên hệ với người trình bày, mà lần lượt sẽ hiển thị và điền vào khung nhìn thích hợp.

EDIT

tôi đã đặt cùng một ví dụ làm việc vững chắc của một Wizard chạy trên WinMo/WEH. Mã chính xác sẽ hoạt động tốt trên Windows CE hoặc thậm chí trên máy tính để bàn. See my blog cho một chút giải thích hoặc lấy mã ngay từ the Codeplex project's changesets.

Các vấn đề liên quan