Windows Forms SingletoneFormProvider并使用第二个构造函数来获取一些参数

时间:2013-04-05 09:31:43

标签: c# winforms

我有MDI Forms个应用程序,我使用SingletoneFormProvider,因为它需要一次只有一个表单实例。

我有编辑表单,可用于创建新记录或更改现有记录。问题在于编辑现有记录。

到目前为止我做了什么:

  • 我有一个方法从SingletoneProviderForm类调用静态方法并获取表单的新实例:

        protected void LoadForm<T>(ToolStripItem formButton, string buttonText, long? loadEntityId = null, bool closeAlreadyOpened = true) where T : BaseForm
    {
             //Some code..
             openForm = SingletonFormProvider.GetInstance<T>(parentFrm, closeAlreadyOpened);
             openForm.LoadEntityId = loadEntityId;
             openForm.MdiParent = parentFrm;
             openForm.Dock = DockStyle.Fill;
             openForm.Show();
             openForm.Activate();
             //More code..
    

    }

  • 我有三个SingletonFormProvider.GetInstance<T>

    的版本

    static public T GetInstance(表单所有者)             其中T:表格

    static public T GetInstance(表单所有者,bool closeAllButThis)             其中T:BaseForm

    static public T GetInstance(表单所有者,bool closeAllButThis,params object [] args)     其中T:表格

  • 现在要获得我做过的任何形式的新实例:

    LoadForm();

  • 如果我想发送ID,那么只需:

    LoadForm(ID);

这就是问题所在。因为我尝试用带有提供的ID的记录中的数据填充表单字段,我进行查询:

entity = anyForm.Find(LoadEntityId.Value);

当我在form_load事件中这样做时,这一切实际上都运行良好。但是现在当我每次进行检查时,我都会在构造函数中移动这个部分:

if (LoadEntityId.HasValue)

它从来没有,因为它似乎构造了表单实例的方式我无法从构造函数访问ID。

我做了什么:

  • LoadForm()方法进行了更改:

    if(loadEntityId == null)                 {                     openForm = SingletonFormProvider.GetInstance(parentFrm,closeAlreadyOpened);                 }                 其他                 {                    openForm = SingletonFormProvider.GetInstance(parentFrm,closeAlreadyOpened,loadEntityId);                 }

  • 保护我的默认构造函数并从中删除所有内容:

    受保护的AnyForm() {}

  • 制作另一个带有一个参数的构造函数:

    public AnyForm(long?loadEntityId) {     长? AnyFormID = LoadEntityId.Value;     的InitializeComponent();     //我需要的所有东西 }

对我来说这很有意义。我很怀疑这是实现这一目标的方法。所以请查看并指导我正确的方法。当然,如果这是以某种方式正确的方式请验证,因为我有疑问是否可以将它放在生产代码中。

P.S

正如Matthew Watson提到的那样,表单在没有默认构造函数的情况下表现得很奇怪,所以我最终得到一个默认(无参数)构造函数,另一个接受一个参数 - 我需要的ID。这更糟糕,现在我有重复的代码。我很确定这不是它的完成方式。

0 个答案:

没有答案