gpt4 book ai didi

C# 关闭窗口时复选框选中/取消选中

转载 作者:行者123 更新时间:2023-11-30 20:26:05 25 4
gpt4 key购买 nike

我希望我能解释一下,很抱歉文本将是不同的语言。我想做的是我有两个窗口,一个是主窗口,另一个用于保存 csv 文件。在我当前的程序中,当我选中复选框并单击“确定”按钮时,它将起作用,但关闭后复选框将被取消选中,但我需要在打开后保持选中复选框的状态,以便我可以轻松地找到我上次检查的内容。我的 window 是这样的:

enter image description here

抱歉,我的 Windows 使用不同的语言,但我认为这并不重要

最佳答案

我已上传工作示例 here

说明:

您可以创建一个状态类,它保存所有控件(复选框等)的状态,以及它们最后保存的值。

public class StatusClass
{
public bool Chkbox1Checked;
public bool Chkbox2Checked;
//same way other required controls status
// EG. public string Textbox1Tex
}

现在将此类对象传递给保存 csv 表单的构造函数。

如下所示。

    private StatusClass m_statusClass;
public FrmSaveCSV(StatusClass statusClass)
{
InitializeComponent();
m_statusClass = statusClass;
}

并且您必须监听此表单的加载和关闭事件(FrmSaveCSV),您可以在其中分别加载以前的状态和保存当前状态。如下所示:

    private void FrmSaveCSV_Load(object sender, EventArgs e)
{
LoadStaus();
}

private void FrmSaveCSV_FormClosing(object sender, FormClosingEventArgs e)
{
SaveStatus();
}

private void LoadStaus()
{
this.Checkbox1.Checked = m_statusClass.Chkbox1Checked;
this.Checkbox2.Checked = m_statusClass.Chkbox2Checked;
//same way load other controls
}
private void SaveStatus()
{
m_statusClass.Chkbox1Checked = this.Checkbox1.Checked;
m_statusClass.Chkbox2Checked = this.Checkbox2.Checked;
}

现在,

在关闭整个应用程序时,您可以简单地序列化 StatusClass 的此对象,然后在软件启动时将其反序列化 回来,并使用它将其传递给FrmSaveCSV 的构造函数。这样,即使重新启动整个软件,状态保存也会起作用。

引用这个问题:

How to save/restore serializable object to/from file?

注意:确保您没有创建新的状态类对象,并将这个新创建的对象每次传递给FrmSaveCSV。状态类的对象必须始终相同。

这意味着如果您从 Form1 调用此 FrmSaveCSV,它应该如下所示,

public partial class Form1 : Form
{
//common (single) object of status calss
StatusClass m_statusClass;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//passing common (single) object of status class in this form
FrmSaveCSV frmSaveCSV = new FrmSaveCSV(m_statusClass);
frmSaveCSV.Show();
}

//On software load, we de-serialize last status form file
private void Form1_Load(object sender, EventArgs e)
{
string fileName = "Status.dat";
if (File.Exists(fileName))
{
Stream s = new FileStream(fileName, FileMode.Open, FileAccess.Read);
IFormatter f1 = new BinaryFormatter();
try
{
m_statusClass = (StatusClass)f1.Deserialize(s);
}
catch
{
s.Close();
m_statusClass = new StatusClass();
}
s.Close();
}
else
m_statusClass = new StatusClass();
}
//Of software closing we serialize current stats in file.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
string fileName = "Status.dat";
if (File.Exists(fileName))
File.Delete(fileName);

using (Stream s = new FileStream("Status.dat", FileMode.Create))
{
IFormatter f2 = new BinaryFormatter();
f2.Serialize(s, m_statusClass);
s.Close();
s.Dispose();
}
}
}

关于C# 关闭窗口时复选框选中/取消选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50520075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com