【问题标题】:C# persisting data between two winformsC#在两个winforms之间持久化数据
【发布时间】:2011-12-20 03:05:51
【问题描述】:

我还没有找到解决问题的方法。我有两个winforms,主要和一个配置设置表单。可以从主窗体的菜单访问配置设置窗体。

我想要做的是有一个配置设置表单的实例,因此当用户在表单中输入信息时,它会被传递回主表单并关闭。但如果用户决定返回配置设置表单,则会出现之前输入的信息。

配置设置基本上有两个输入框和一个确定按钮。

我该如何实现呢?

【问题讨论】:

  • 什么样的应用程序——WinForms/WPF/WebForms?
  • 如果你认为表单只是显示数据,我想你会得到一个更清晰的画面。一个常见的错误是将表格视为一等公民。表单不应该实际包含数据,只显示它。因此,请创建一些类来表示您的应用程序的状态(例如,在主窗体中加载的文档,在设置窗体中显示设置的类等等)。
  • @sll,我想问一下,在回答这个问题时,WinForms、WPF 和 WebForms 之间的最大区别是什么?
  • @Neowizard : 它对于 Web 或 Desctop 案例有很大的不同,对于 WPF 或 WinForms 有很大不同,因为 WPF 提供了更多的功能,如命令、路由事件,因此解决方案可能完全不同

标签: c# winforms persist


【解决方案1】:

出于配置目的,您可以使用单例模式来存储配置数据。

class ConfigurationStorage{
      private static ConfigurationStorage _instance;

      // settng example - ConnectionString    
      public string ConnectionString {get;set;}

      public static ConfigurationStorage GetInstance(){
          return _instance ?? (_instance =  new ConfigurationStorage());
      }
}

在配置表单中你可以这样做:

ConfigurationStorage.GetInstance().ConnectionString  = "buu";

存储数据,在主窗体中检索数据(因为是同一个对象)

您还可以使用 Form Parent 属性将设置明确设置为 MainForm。

【讨论】:

  • 很好地展示了。 ConfigurationStorage 现在已持久化,可以从应用程序中的任何位置访问。
【解决方案2】:

你有很多选择。例如:

  • 可以在硬盘上存储最新的序列化配置数据 drive\DB(使用一些临时文件)。
  • 您可以将最后定义的配置作为构造函数参数传递(以及 关闭时将其返回到调用表单)。
  • 您可以取消表单的关闭事件并隐藏它,当 您尝试重新打开它,而是让它可见。
  • 您可以使用单音(如@Kamil 所说)

当涉及到配置窗口时,我喜欢将它们的数据存储到 drive\DB 或将它们的初始状态传递给构造函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多