2010-03-12 14 views
8

Soy un poco nuevo en el desarrollo de Windows Mobile (con C# y el framework compacto), así que no estoy seguro de cómo hacerlo. El usuario debe atravesar varias páginas de información de forma similar a un asistente. Al comienzo hay una ventana de inicio de sesión.¿Cómo puedo implementar un asistente desde una aplicación Windows Mobile?

¿Cómo podría implementarlo? ¿Tendría simplemente diferentes controles de usuario para cada página y los crearía, los mostraría, los destruiría y los ocultaría a pedido? ¿O necesito crear diferentes formas y mostrarlas de alguna manera?

EDITAR (de un usuario diferente de la OP)

Desde Tampoco he encontrado una buena solución para esto y los enlaces de algunas de las respuestas no están disponibles en Windows Mobile 6.5 que estoy empezando una recompensa

Estos parecían prometedores, pero pueden' ser construidos para móviles 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 (igual que el anterior, pero el trabajo anterior)

+0

Otros recursos para WinForms Wizard aquí: http://stackoverflow.com/questions/2084048/creating-wizards-for-win-forms-in-c – BillW

+0

¿Encontró una buena solución para su asistente? También estoy buscando esta funcionalidad y me decepcionó cuando la fuente codeplex (el código de roger lipscombe) no funcionó para aplicaciones móviles. – Tim

Respuesta

6

me gustaría utilizar un TabControl "simular" un mago (nota que no he utilizado personalmente un TabControl en un contexto FrameWork Windows Mobile/compacto, pero es enumerados oficialmente por Microsoft como parte de FrameWork para "Windows CE, Windows Mobile para Pocket PC". Ver: TabControl

En WinForms hay un truco fácil para ocultar las pestañas si desea crear una experiencia de usuario similar a un asistente: en el formulario 'Cargar evento, configure la región de Tabcontrol en DisplayRecta ngle de TabControl.

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

Si funciona para usted, que le ahorrará un montón de problemas de movimiento 'UserControls o' Paneles alrededor, y se puede diseñar sus TabPages en modo visual en tiempo de diseño, entonces el control de navegación de TabPage a TabPage de la forma que creas mejor.

Es posible que desee "capturar" la región original de TabControl en el evento 'Cargar formulario' si alguna vez desea restaurar las pestañas a la vista.

Aquí está un ejemplo rápido de una manera de hacer eso: una especie de "unidireccional" modelo de principio a fin:

definir un diccionario donde cada Key es un TabPage, y el valor booleano de cada La entrada clave controla si permitirá o no que el usuario navegue a esa TabPage.

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

Usted querrá "preparar esa Diccionario haciendo algo como esto en el evento Form Load:

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

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

control de Navegación en este modelo significa que es necesario establecer el valor booleano de la siguiente TabPage a 'cierto cuando, a través de cualquier medio, usted ha satisfecho los criterios para la realización de la página actual: Muestra

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

estaría muy inclinados a utilizar un contenedor DI/COI para el th es (específicamente usaría this one, pero prácticamente cualquiera de ellos debería funcionar).

Crearía un MainForm que es el "host" de la aplicación. En ese MainForm colocaría un DeckWorkspace o un TabWorkspace, dependiendo de cómo quiera que se le permita navegar al usuario. Si solo quieres permitir avanzar/retroceder, yo iría con un deckworkspace. Si se les permite saltar varios pasos, un TabWorkspace probablemente tendría más sentido.

Luego agregaría un par de botones al MainForm que serían los botones de navegación.

Luego crearía un SmartPart (vista) para cada una de las páginas del asistente. Debajo del capó, estos son UserControls, pero son algo que los Wor4kspaces saben cómo usar.

que luego crearía un WizardService que tendría una máquina de estado en esto por lo que es válido para la navegación, lo que muestra SmartParts conseguir un avance/retroceso, etc.

Me continuación, crear presentadores para cada de los SmartParts para conectar las Vistas al WizardService o solo un Presenter para todo. Esto dependería en gran medida de la complejidad de los datos del asistente y de cómo se relacionan los datos de paso a paso.

Siguiente Quisiera conectar eventos para los botones de navegación. Esos eventos irían al WizardService, que se encargaría de determinar dónde necesitamos navegar y contactar al presentador, que a su vez mostraría y poblaría la vista apropiada.

EDITAR

He creado un sólido ejemplo de trabajo de un asistente que se ejecuta en Windows Mobile/WEH. El mismo código exacto funcionaría bien en Windows CE o incluso en el escritorio. See my blog para obtener un poco de explicación o extraer el código directamente desde the Codeplex project's changesets.

Cuestiones relacionadas