2010-03-29 18 views
5

¿Existe algo así como sesión en la aplicación de Windows? Quiero almacenar algunos valores para que sean persistentes entre formularios.¿Hay algo así como sesión en la aplicación de Windows?

Por ejemplo: La primera forma tiene algunas casillas de verificación y la tercera forma las procesa en consecuencia. Entonces necesito guardar las casillas marcadas en alguna parte.

+0

Sería de gran ayuda si se puede dar un ejemplo de lo que está tratando de lograr.¿Le gustaría almacenar los valores por usuario en la "sesión" y deberían los datos sobrevivir la vida del proceso? –

Respuesta

3

Solo puede exponer su estado CheckBoxes comprobado a través de las propiedades de este formulario donde coloca sus cuadros de control, y acceder a estas propiedades desde su tercer formulario o formulario de proceso.

public partial class MainForm : Form { 
    // We assume we have let's say three CheckBoxes named chkFirst, chkSecond and chkThird 
    public bool IsFirstChecked { get { return chkFirst.Checked; } } 
    public bool IsSecondChecked { get { return chkSecond.Checked; } } 
    public bool IsThirdChecked { get { return chkThird.Checked; } } 

    // Calling this form from where these checked states will be processed... 
    // Let's suppose we have to click a button to launch the process, for instance... 
    private void btnLaunchProcess(object sender, EventArgs e) { 
     ProcessForm f = new ProcessForm(); 
     f.Parent = this; 
     if (DialogResult.OK == f.ShowDialog()) { 
      // Process accordingly if desired, otherwise let it blank... 
     } 
    }  
} 

public partial class ProcessForm : Form { 
    // Accessing the checked state of CheckBoxes 
    private void Process() { 
     if ((this.Parent as MainForm).FirstChecked) 
      // Process according to first CheckBox.Checked state. 
     else if ((this.Parent as MainForm).SecondChecked) 
      // Process according to second CheckBox.Checked state. 
     else if ((this.Parent as MainForm).ThirdChecked) 
      // Process according to third CheckBox.Checked state. 
    } 
} 

Por favor, considere que he recogido este código hasta la parte superior de la cabeza, por lo que no puede ocurrir a compilar. De todos modos, espero que esto te dé una idea de cómo pasar tus valores en todos tus formularios.

La mayor diferencia entre la Web y la programación de WinForm es que la Web no tiene estado. SESSION y VIEWSTATE son soluciones para permitir que uno preserve los valores.

WinForms son con estado, por lo que no es necesario pasar por las variables SESSION y VIEWSTATE. Un valor se conserva mientras exista el objeto.

+0

+1 para los últimos dos párrafos importantes. –

+0

+1 por el mismo ... – Manish

5

Si habla de formularios diferentes dentro de la misma Aplicación, entonces simplemente cree algunos miembros estáticos en una clase, se mantendrá durante la vida del ejecutable.

+0

Creo que le gustaría compartir los valores entre diferentes instancias. Esta solución implica solo un ejecutable. –

1

Si desea conservar los datos entre la ejecución independiente de la misma aplicación (como en una solicitud concurrente en una granja HTTP) simplemente escriba algún XML o use un sistema de mashalling/serialización con su runtime/plaform (no sé qué sería para C#).

A continuación, vuelva a importarlo. Solo mira tu control de concurrencia.

2

Puede usar app.config (o la sección Configuración en Propiedades del proyecto) si usa Visual Studio, o simplemente serialice sus valores y almacénelos en algún archivo.

0

Si desea almacenar datos por usuario entre las sesiones de ejecución, debe considerar el Almacenamiento aislado.

  • no recarga directorio de instalación
  • no causa problemas con el software anitvirus
  • parte del SO incluyendo objetos .NET, no es necesario instalar nada más
  • ya trabaja con el modelo de seguridad de windows
  • existe sobre una base por usuario, por lo que los ajustes guardados están separados para cada usuario
  • puede serializar/deserializar obects directamente en ella
1

Si esto es sólo una aplicación de Windows de un solo usuario regular, crear una clase para modelar el estado que desea pasar alrededor y lo requiera en su formulario de constructores:

internal class ApplicationState 
{ 
    // Store the selected checkbox values here, for example 
    public List<int> SelectedProductIds { get; } 
    // ... additional state ... 
} 

internal class EditOrderForm: Form 
{ 
    private ApplicationState applicationState; 
    public EditCustomerForm(ApplicationState applicationState) { 
     this.applicationState = applicationState; 
    } 
    // Rest of the code 
} 

Usted podía uso de variables estáticas en lugar de instancias, pero esas son solo variables globales que hacen que su código sea más difícil de leer y mantener.

+0

+1 su solución fue la segunda en la que pensé. Gracias por el voto popular. =) –

Cuestiones relacionadas