2010-03-12 8 views
8

Sono un po 'nuovo nello sviluppo di Windows Mobile (con C# e la struttura compatta), quindi non sono sicuro di come farlo. L'utente deve passare attraverso diverse pagine di informazioni in un modo simile a una procedura guidata. All'inizio c'è una finestra di login.Come posso implementare una procedura guidata per un'applicazione Windows Mobile?

Come potrei procedere e implementarlo? Avrei solo controlli utente diversi per ogni pagina e creo/mostrerò e distruggere/nascondere su richiesta? O ho bisogno di creare forme diverse e in qualche modo mostrare quelle?

EDIT (da un utente diverso da quello del PO)

Dal momento che, inoltre, non ho trovato una buona soluzione a questo ei collegamenti da alcune delle risposte non sono utilizzabili in Windows Mobile 6.5 Sto iniziando un bounty

Questi sembrava promettente, ma può' essere costruiti per il mobile 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 (come sopra, ma il lavoro in precedenza)

+0

Altre risorse per la procedura guidata WinForms qui: http://stackoverflow.com/questions/2084048/creating-wizards-for-win-forms-in-c – BillW

+0

Hai trovato una buona soluzione per il tuo wizard? Sto anche cercando questa funzionalità e sono rimasto deluso quando la sorgente codeplex (codice di roger lipscombe) non funzionava per le app mobili. – Tim

risposta

6

userei un TabControl a "simulare" una procedura guidata (nota che non ho usato personalmente un TabControl in un Windows Mobile/Compact contesto FrameWork, ma è presen- ufficialmente da Microsoft come parte di FrameWork per "Windows CE, Windows Mobile per Pocket PC." Vedi: TabControl

In WinForms c'è un semplice trucco per nascondere le schede se si desidera creare un'esperienza utente simile a una procedura guidata: nell'evento Load 'Form' impostare la regione di Tabcontrol su DisplayRecta ngle di TabControl.

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

Se funziona per voi, che vi farà risparmiare un sacco di problemi di movimento 'UserControls o' Pannelli in giro, e si può progettare il TabPages in modalità visiva in fase di progettazione, quindi controllare la navigazione da TabPage a TabPage in qualsiasi modo tu pensi meglio.

Potrebbe essere necessario "eseguire l'istantanea" della regione originale di TabControl nell'evento di caricamento del modulo se si desidera ripristinare le schede in vista.

Ecco un rapido esempio di un modo per farlo: una sorta di modello di start-to-finish "a senso unico":

Definire un dizionario in cui ogni tasto è un TabPage, e il valore booleano di ciascuna La voce chiave controlla se consentire all'utente di navigare in TabPage o meno.

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

Avrai voglia di "preparare quel dizionario facendo qualcosa di simile nel caso Form Load:

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

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

controllo di navigazione in questo modello significa che è necessario impostare il valore booleano del prossimo TabPage a 'vero quando, attraverso qualsiasi mezzo, hai soddisfatto i criteri di per il completamento della pagina corrente: Esempio

// 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

sarei fortemente inclini a usare un contenitore dI/CIO esimo è (in particolare vorrei usare this one, ma praticamente nessuno di loro dovrebbe funzionare).

Vorrei creare un MainForm che è l''host' dell'app. Su quel MainForm avrei posizionato un DeckWorkspace o un TabWorkspace, a seconda di come vuoi che l'utente possa navigare. Se si desidera consentire solo avanti/indietro, vorrei andare con un deckworkspace. Se sono autorizzati a saltare diversi passaggi, TabWorkspace avrebbe probabilmente più senso.

Quindi aggiungerei un paio di pulsanti al MainForm che sarebbero i pulsanti di navigazione.

Vorrei quindi creare una SmartPart (vista) per ciascuna delle pagine della procedura guidata. Sotto il cofano questi sono UserControls, ma sono qualcosa che i Wor4kspaces sanno come usare.

avrei quindi creare un WizardService che avrebbe una macchina a stati in esso per ciò che è valida per la navigazione, quello SmartParts ottenere mostrato per un avanti/indietro, ecc

avrei poi creo presentatori per ogni degli SmartParts per collegare le viste al WizardService o solo un singolo Presenter per l'intera operazione. Ciò dipenderebbe molto dalla complessità dei dati della procedura guidata e dal modo in cui i dati da un passaggio all'altro sono correlati.

Avanti Vorrei collegare eventi per i pulsanti di navigazione. Tali eventi andrebbero al WizardService, che gestirà la determinazione di dove dobbiamo navigare e contattare il relatore, che a sua volta mostrerà e popolerà la vista appropriata.

EDIT

Ho messo insieme un esempio di lavoro solido di una procedura guidata in esecuzione su WinMo/WEH. Lo stesso identico codice funzionerebbe bene su Windows CE o anche sul desktop. See my blog per un po 'di spiegazione o tira il codice direttamente da the Codeplex project's changesets.

Problemi correlati