在Windows应用程序中有类似SESSION的东西吗?

时间:2010-03-29 11:30:01

标签: c# windows

Windows应用程序中是否有类似SESSION的内容?我希望存储一些值,以便在表单之间保持持久性。

例如:第一个表单有一些复选框,第三个表单相应地处理它们。所以我需要将选中的复选框存储在某处。

6 个答案:

答案 0 :(得分:5)

如果您在同一个应用程序中讨论不同的表单,那么只需在类上创建一些静态成员,它将在可执行文件的生命周期内保留。

答案 1 :(得分:3)

您只能通过此表单的属性公开CheckBoxes Checked状态,您可以在其中放置CheckBox,并从第三个或Process表单访问这些属性。

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.
    }
}

请注意我选择了这个代码,所以可能不会编译。无论如何,我希望这能让您了解如何在整个表单中传递您的价值观。

Web和WinForm编程之间的最大区别在于Web是无状态的。 SESSION和VIEWSTATE是允许保留值的变通方法。

WinForms是有状态的,因此您不需要经历SESSION和类似VIEWSTATE的变量。只要对象存在,就会保留一个值。

答案 2 :(得分:2)

如果您使用Visual Studio,可以使用app.config(或Project的属性中的Settings部分),或者只是序列化您的值并将它们存储在某个文件中。

答案 3 :(得分:1)

如果要在相同应用程序的独立执行之间保持数据(如在HTTP服务器场中的并发请求服务中),那么只需写出一些XML或使用编组/序列化系统和运行时/ plaform(不知道它会是什么为C#)。

然后再次导入。只需看一下你的并发控制。

答案 4 :(得分:1)

如果这只是一个普通的单用户窗口应用程序,请创建一个类来为您要传递的状态建模并在表单构造函数中要求它:

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
}

可以使用静态变量而不是实例 - 但这些只是全局变量,使你的代码更难以阅读和维护。

答案 5 :(得分:0)

如果您希望在执行会话之间基于每个用户存储数据,则应考虑隔离存储。

  • 不会使安装目录混乱
  • 不会导致AnitVirus软件出现问题
  • 部分操作系统包括.Net对象,不需要安装任何其他内容
  • 已经可以使用Windows安全模型
  • 基于每个用户存在,因此为每个用户分隔保存的设置
  • 可以直接对其进行序列化/反序列化