Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序启动时在C#中恢复窗体的状态_C#_Winforms - Fatal编程技术网

应用程序启动时在C#中恢复窗体的状态

应用程序启动时在C#中恢复窗体的状态,c#,winforms,C#,Winforms,在我的c#应用程序中,我有一个小表单,用于设置应用程序的参数。设置参数后,我的应用程序运行良好。当我重新启动应用程序时,参数表单中字段的值将重置 如何在关闭和启动应用程序之间存储和恢复表单内容听起来您应该将这些配置值存储在App.config文件(或.NET提供的其他配置管理器之一)中 然后,您可以围绕序列化和维护这些值来构建表单,而不是定制表单 …无需重新发明轮子。您需要在某个地方将它们序列化(如注册表或文件),然后在应用程序启动时将其读入。当应用程序关闭或更改设置时,您可以将参数序列化到磁盘

在我的c#应用程序中,我有一个小表单,用于设置应用程序的参数。设置参数后,我的应用程序运行良好。当我重新启动应用程序时,参数表单中字段的值将重置


如何在关闭和启动应用程序之间存储和恢复表单内容

听起来您应该将这些配置值存储在App.config文件(或.NET提供的其他配置管理器之一)中

然后,您可以围绕序列化和维护这些值来构建表单,而不是定制表单


…无需重新发明轮子。

您需要在某个地方将它们序列化(如注册表或文件),然后在应用程序启动时将其读入。

当应用程序关闭或更改设置时,您可以将参数序列化到磁盘(XML、纯文本、数据库或任何您喜欢的形式)。然后在启动期间将它们重新加载。

虽然有几种方法可以做到这一点,但如果您处理的是应用于应用程序所有用户的“全局”应用程序设置,则可以创建一个app.config文件,并将设置键添加到app.config文件的AppSettings部分

稍微棘手的部分是修改这些设置并保留它们,因为默认情况下,简单地调用配置文件的内置访问器不会保存这些设置。您需要使用ConfigurationManager类,并确保在保存内容后调用Refresh命令


不久前,我花了一两天的时间才把这篇文章整理好,但我写了一篇关于这篇文章的博客。

由.NET framework提供的应用程序和用户设置非常适合这一点:

的应用程序设置功能 Windows窗体使创建更容易, 存储和维护自定义应用程序 以及客户端上的用户首选项 电脑。使用Windows窗体 应用程序设置,您可以存储 不仅仅是应用程序数据,例如 数据库连接字符串,而且 特定于用户的数据,例如用户 应用程序首选项。使用视觉 Studio或自定义托管代码,您可以 创建新设置,从 并将它们写入磁盘,绑定到 属性,并进行验证 加载前的设置数据和 储蓄


从MSDN上的主题开始。

听起来是一个很好的机会来了解一下MSDN


设置可用于存储和检索不同执行会话之间的数据,基本上有两种不同类型的设置;应用程序设置和用户设置。应用程序设置用于存储特定于应用程序的设置,用户用于存储用户首选项。

我发现存储应用程序设置的最好方法是使用IsolatedStorageFile类,用户可以更改这些设置。下面是一个在WPF应用程序的App.xaml文件中使用隔离存储的示例。这将使用用户创建的值填充Application.Properties字典。这些属性随后在应用程序中可用

public partial class App : Application
{
        string fileName = "App.txt";

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            // read Iso Storage file
                        IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForDomain();
            try
            {
                using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileName, FileMode.Open, storage))
                using (StreamReader reader = new StreamReader(stream))
                {
                    while (!reader.EndOfStream)
                    {
                        // populate Application Properties
                                                string[] keyValue = reader.ReadLine().Split(new char[] { ',' });
                        this.Properties[keyValue[0]] = keyValue[1];
                    }
                }
            }
            catch (FileNotFoundException)
            {
                // Set default values.  You would probably want to read these values from a config file
                                this.Properties["LocalServiceAddress"] = "http://localhost/myservice";
                this.Properties["TranscodeServer"] = "http://localhost";

            }
        }

        private void Application_Exit(object sender, ExitEventArgs e)
        {
            // Persist application-scope property to isolated storage
            IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForDomain();
            using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileName, FileMode.Create, storage))            
            using (StreamWriter writer = new StreamWriter(stream))
            {
                // Persist each application-scope property individually
                foreach (string key in this.Properties.Keys)
                {
                    writer.WriteLine("{0},{1}", key, this.Properties[key]);
                }
            }
        }
    }

仅通过注释,文章中的代码是在VB.net中,但转换为C#很容易。同意…配置文件会更好,但我认为他可能有理由跳过这个结论。