将对象从表单传递给表单

时间:2009-04-23 14:15:12

标签: c# .net winforms oop

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

internal static class Program
{
    public static CurrentPerson _CurrentPerson;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    private static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new FrmWWCShell());
    }
}

然后在 Search.cs - &gt;

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

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

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

3 个答案:

答案 0 :(得分:2)

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

查看Model-View-Controller pattern

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

答案 1 :(得分:0)

a)单身人士

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

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

b)相同的对象引用

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

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

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

答案 2 :(得分:0)

看看Mediator设计模式。