Windows应用程序中是否有类似SESSION的内容?我希望存储一些值,以便在表单之间保持持久性。
例如:第一个表单有一些复选框,第三个表单相应地处理它们。所以我需要将选中的复选框存储在某处。
答案 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)
如果您希望在执行会话之间基于每个用户存储数据,则应考虑隔离存储。