首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在ChildForm中打开MdiParent

无法在ChildForm中打开MdiParent
EN

Stack Overflow用户
提问于 2018-03-24 18:42:46
回答 1查看 52关注 0票数 0

我试图使用表单管理器类在ChildForms窗体上打开MdiParent。为了告诉"FormManager“类哪种形式是MdiParent,我尝试了几种替代方法;但是,它总是会抛出错误(每次不同的情况下都会抛出一个不同的错误)。大多数情况下,它会说MainForm不是MdiContainer;而这并不是真的,因为我以前已经将MainForm设置为这样。

注意:1主表单被设置为MdiContainer。

注:2,如果我尝试只打开一个表单,它将在MdiParent表单中完全打开。但是,如果我试图加载2个或更多的表单,它将抛出错误。

注释:3,如果我在主窗体上创建子窗体实例,那么所有操作都很好。一点问题都没有。但我不想这样做。

代码语言:javascript
复制
  // [Class] : Main Form
  // Member Variables
  private FormManager FrmMgr;

  // Load Forms using FormManager Class
  private void Load_Forms()
  {
  // Create a new Instance of FormManager.
      if (FrmMgr == null) { FrmMgr = new FormManager(); }
  // Set MainForm as MdiParent in FormManager Class
      FrmMgr.MdiParent = this;
  // Alternatively Manually Set the MdiParent in MainForm (Uncomment Line Bellow)
  // this.IsMdiContainer = true;
  }


  // [Class] : Form Manager
  // <Member Variables>
  private Form1 frm1;
  private Form2 frm2;

  // FormManager <Constructor>.
  // Constructor Receives MdiParent Information from MainForm
  // and Sets the MdiParent.ActiveControl Information to Every Form
  // when calling each (Form initiation) Method.
   public FormManager(Form _MainParent)
   {
       // Create new Instance of Form1
       Init_Frm1(_MainParent);

       // Create new Instance of Form2
       Init_Frm2(_MainParent);
   }

    private void Init_frm1(_MainParent)
    {
        if (frm1 == null) { frm1 = new Form1(); }
        frm1.MdiParent = _MainParent;

        frm1.Show();
    }

    private void Init_frm2(_MainParent)
    {
        if (frm2 == null) { frm2 = new Form2(); }
        frm2.MdiParent = _MainParent;

        frm2.Show();
    }
}

谁能给我指出正确的方向并帮助我理解为什么会发生这种事?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-24 19:05:23

我终于能解决这个问题了。

问题似乎在于我过去将"MainForm“作为"MdiParent”类传递给"FormManager“类的方式。

代码语言:javascript
复制
// [Class] MainForm
// Create new Instance (Always Active); of FormManager Class
// Note: When FormManager Class is Loaded; it's Constructor will
// run the Methods that will open all the initial Forms.

private void Load_Modules()
{
    // "this" refers to "MainForm"
    if (FrmMgr == null) { FrmMgr = new FormManager(this); }
}


// [Class] FormManager
// Member Variables
private Form1 frm1;
private Form2 frm2;

// <Constructor>
public FormManager(Form _MainParent)
{
    // Create new Instance of Form1 under "Init_Frm1" Method
    Init_Frm1(_MainParent);

    // Create new Instance of Form2 under "Init_Frm2" Method
    Init_Frm2(_MainParent);
}

// Method that Will Create new Instance of Form1
private void Init_Frm1(Form _MainParent)
{
    if (frm1 == null) { frm1 = new Form1(); }
    frm1.MdiParent = _MainParent;

    frm1.Show();
}

// Method that Will Create new Instance of Form2
private void Init_Frm2(Form _MainParent)
{
    if (frm2 == null) { frm2 = new Form2(); }
    frm2.MdiParent = _MainParent;

    frm2.Show();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49468490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档