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

时间:2009-11-03 19:44:21

标签: c# winforms

在我的c#应用程序中,我有这个小形式,用于设置应用程序的参数。一旦我设置参数我的应用程序运行正常。当我重新启动应用程序时,参数形式的字段值将被重置。

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

7 个答案:

答案 0 :(得分:4)

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

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

......无需重新发明轮子。

答案 1 :(得分:3)

.NET框架提供的应用程序和用户设置对此非常有用:

  

应用程序设置功能   Windows Forms使创建变得容易,   存储和维护自定义应用程序   和客户端上的用户首选项   电脑。使用Windows窗体   应用程序设置,您可以存储   不仅仅是应用数据   数据库连接字符串,但也   用户特定的数据,例如用户   应用偏好。使用Visual   您可以使用Studio或自定义托管代码   创建新设置,从中读取   并将它们写入磁盘,将它们绑定到   表单上的属性,并进行验证   加载前的设置数据和   节省。

从MSDN上的Application Settings Overview主题开始。

答案 2 :(得分:1)

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

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

我花了一两天的时间才完成这件事,但我写了一篇关于它的博客文章here

答案 3 :(得分:1)

听起来像是了解Settings in .NET

的绝佳机会

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

答案 4 :(得分:1)

我发现用于存储应用程序设置(用户能够更改)的最佳方法是使用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]);
                }
            }
        }
    }

答案 5 :(得分:0)

您需要在某处(例如注册表或文件)将它们序列化,然后在应用程序启动时读取它们。

答案 6 :(得分:0)

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