如何在Container内部导航多个表单?

时间:2017-11-22 17:33:47

标签: c# winforms

最后我实现了一个容器来打开1个表单然后我注意到如果我转到其他表单,容器就会消失(可能会失去继承)。

用于在容器内打开单个表单的代码是:

LandingForm myForm = new LandingForm();
myForm.TopLevel = false;
myForm.AutoScroll = true;
panel1.Controls.Add(myForm);
myForm.Show();

有人可以帮助我如何让我的所有表格在我的容器内导航吗?

谢谢

1 个答案:

答案 0 :(得分:0)

制作MDI WinForm应用程序

  1. 创建ParentFormChildForm
  2. 使用此示例替换ParentForm的代码:

    public ParentForm()
    {
        InitializeComponent();
        IsMdiContainer = true;
    }
    
    private void ParentForm_Load(object sender, EventArgs e)
    {
        new ChildForm {MdiParent = this}.Show();
    }
    
  3. MDI Form

    在一个容器中打开多个表单

    1. 创建ParentFormChildForm
    2. 使用此示例替换ParentForm的代码:

      public ParentForm()
      {
          InitializeComponent();
          DoubleClick += ParentForm_DoubleClick;
      }
      
      private void ParentForm_DoubleClick(object sender, EventArgs eventArgs)
      {
          var child = new ChildForm
          {
              TopLevel = false,
              AutoScroll = true
          };
          child.Location = new Point(
              MousePosition.X - Location.X - child.Size.Width/2,
              MousePosition.Y - Location.Y - child.Size.Height/2);
          child.Click += Child_OnClick;
          child.Closing += Child_OnClosing;
          Controls.Add(child);
          Controls.SetChildIndex(child, 0);
          child.Show();
          child.Activate();
      }
      
      private void Child_OnClosing(object sender, CancelEventArgs cancelEventArgs)
      {
          ((ChildForm)sender).Click -= Child_OnClick;
          ((ChildForm)sender).Closing -= Child_OnClosing;
          Controls.Remove((ChildForm)sender);
      }
      
      private void Child_OnClick(object sender, EventArgs eventArgs)
      {
          Controls.SetChildIndex((ChildForm)sender, 0);
          ((ChildForm)sender).Activate();
      }
      
    3. 现在,您可以双击空白区域以添加新表单,也可以通过单击子表单的表面在它们之间切换。

      Form as Control Example