当我隐藏 ShowDialog 表单时,C# 除了 Owner 之外的所有表单都发送回

C# All forms but Owner sent to back when I hide a ShowDialog form

使用 ShowDialog(this) 显示了一个表单。用户关闭它而不是处理它我想保留更改并准备好直到下一次打开调用:

        private FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Hide();
            e.Cancel = true;
        }

但是隐藏对话框会导致返回除所有者之外的所有其他打开的表单。使用 Show(this) 而不是 ShowDialog() 修复了它,但我需要让它作为对话框打开。

您需要创建一个 class 来保存您的状态

public class yourFormState{
 //Assign your properties here        
}


private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
     CreateConfigData();
}

private void CreateConfigData() {
using (StreamWriter sw = new StreamWriter("yourConfig.xml")) {
    state.ButtonBackColor = System.Drawing.ColorTranslator.ToHtml(button1.BackColor);
    XmlSerializer ser = new XmlSerializer(typeof(MyFormState));
    ser.Serialize(sw, state);
}

}

在表单加载时,您可以加载配置并访问数据

  private void Form1_Load(object sender, EventArgs e) {
    if (File.Exists("Yourconfig.xml")) {
    loadConfig();
} //Assign your properties


private void loadConfig() {
XmlSerializer ser = new XmlSerializer(typeof(MyFormState));
using (FileStream fs = File.OpenRead("Yourconfig.xml")) {
    state = (MyFormState)ser.Deserialize(fs);
}

你不需要隐藏它。保留对表格的引用并在需要时再次显示:

YourDialogForm f;
private void button1_Click(object sender, EventArgs e)
{
    if(f==null)
        f = new YourDialogForm();

    f.ShowDialog();
}

更多信息:


此外,如果是设置表单,您可以add/use项目中的Settings.settings文件并加载和保存设置。这样你就不需要依赖表单状态。这样你就可以 bind controls properties to settings properties 然后在关闭表单时调用 Properties.Settings.Default.Save();