窗体内的静态成员
本文关键字:静态成员 窗体 | 更新日期: 2023-09-27 18:01:36
在我的项目上的WindowsForms,如果我有一个静态实例内的形式,当我在第一次打开我的形式,它的工作。但是如果我关闭它再打开它,表单将是空的。为什么会这样呢?
public partial class Computer : Form
{
static Indicators indicators = new Code.Indicators();
}
注:我将其设置为静态,因为我想在窗体关闭后保存它的值
编辑1:打开表单private void button3_Click(object sender, EventArgs e)
{
Computer computer = new Computer();
computer.ShowDialog();
}
编辑2:Computer Form
namespace WF
{
public partial class Computer : Form
{
static Code.Indicators indicators = new Code.Indicators();
public Computer()
{
if (indicators.isComputerAlreadyRunning == false)
{
InitializeComponent();
pictureBox1.Image = Properties.Resources.Computer1;
indicators.isComputerAlreadyRunning = true;
}
}
// My not successful try to save the value of the variable
public Code.Indicators ShowForm()
{
return new Code.Indicators(indicators.isComputerAlreadyRunning);
}
}
}
我不认为静态成员在Windows窗体生命周期中工作得很好。
我建议您使Indicators
成为您表单的正常实例成员。要在窗体生命周期之外保留状态,可以从窗体中复制状态,并在打开窗体时将其复制回窗体。
// Keep this in the proper place
var indicators = new Code.Indicators();
...
// Copy back and forth for the life time of the form
using (var form = new Computer())
{
form.Indicators.AddRange(indicators);
form.Close += (s, e) =>
{
indicators.Clear();
indicators.AddRange(form.Indicators);
}
}
...
根据Computer
类中的构造函数,indicators.isComputerAlreadyRunning
在第一次创建表单时被设置为true。
因此,当第二次创建Computer
时,if
条件将失败,整个if
块将被跳过。这意味着您的InitializeComponent();
不会运行,因此表单中的任何内容都不会显示。
将InitializeComponent();
放在if
子句之外以使其工作