将对象从表单传递给表单

我有一个相当大的CRUD winform应用程序,它设置为显示tabcontrols中嵌入的表单。 我想拥有Person的对象,(有)a Enrollment,(有a)计划在与表单交互时保存和跟踪信息。 我该如何做到这一点? 我发现了一个建议,在我的Program.cs中声明Person对象,就像这样 – >

internal static class Program { public static CurrentPerson _CurrentPerson; ///  /// The main entry point for the application. ///  [STAThread] private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FrmWWCShell()); } } 

然后在Search.cs上 – >

  Program._CurrentPerson = new CurrentPerson { PersonID = Convert.ToInt32(pID), LastName = lName, FirstName = fName, SocialSn = sSN, MiddleName = mName, BirthDate = Convert.ToDateTime(bDate) }; 

这是最好的方法吗? 在“搜索”页面上进行此选择后,仍需要从数据库中填入大量数据。 如何在每个表单上声明对象并以某种方式传递它? 随着对象的进展,对象会慢慢“建立”。 首先,他们按名称搜索某人,并选择他们将与谁合作。 然后他们可以在那里工作。 选择注册后,他们将能够与计划进行互动。

我很感激这里的任何指导,因为这个范围让我没有经验的头脑旋转……

您需要分离数据,逻辑和GUI。

查看模型 – 视图 – 控制器模式 。

如果您认为在您的情况下它太复杂,您可能只需创建一个中央控制器类来保存中央数据。 在每个表单构造函数中传递此对象,您就完成了。

看看Mediator设计模式。

a)单身人士

从代码重用的角度来看,全局静态属性并不是一个好主意。 如果您计划从代码中访问全局静态属性,那么您的代码将与此特定应用程序紧密相关。

如果代码中始终只有一个Person实例,那么你可以将这个Singleton放在Person类中,但肯定不在你的Program类中。 但请注意,Singleton类的使用通常仅限于日志记录服务或某种广泛使用的东西,它肯定永远不会改变。

b)相同的对象引用

在这种情况下,您不需要单例实例,而是将相同的引用传递给您访问它的每个Form的数据对象(Person或其他任何东西)。 如果您的表单是数据的一部分,那么您只能将该部分数据传递给表单,最好通过最简单的接口。

更改一个表单中的数据可能需要更新其他表单。 这就是模型 – 视图 – 控制器和类似模式可以帮助您完成的任务 – 通知视图数据已在其他地方更改

例如,通过在Person类中实现IPropertyNameChanged接口,无论何时更改属性,您都可以通知任何感兴趣的人(任何表单)。 请查看此示例: http : //msdn.microsoft.com/en-us/library/ms229614.aspx 。 通过在每个表单中附加事件处理程序到该事件,您将通知所有这些事件需要使其失效。