将表单添加到MDI子项

时间:2013-05-15 21:12:16

标签: c# mdi mdichild mdiparent

Form1我正在启用IsMdiContainer,我添加了MenuStrip。在Form1_Load我“新”Form2,我将Form2.MdiParent分配给this Form1。我也在最大化Form2,这项运作效果很好。

Form2我在表单的左侧有一个treeView,在表单的右侧我希望显示多种不同的表单,这些表单具有各种编辑功能,这些功能将取决于在treeView中选择的节点或级别上。

我想创建一些不同的表单来编辑将在Form2中显示的数据,具体取决于treeView的选择。我似乎无法向MdiChild添加表单,我一直在看一些帖子,在表单中添加表单可能会产生一些我不确定的编程问题。

我真的没有任何代码可以粘贴到这篇文章中,因为除了Mdi Parent和Child关系之外似乎没什么用处,这很简单。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

关于这个主题有很多信息,但是对于一些新的开发人员来说,某些文档很难理解。请按照以下步骤操作:

  1. 打开Visual Studio
  2. 创建Windows表单应用程序
  3. 点击表单
  4. 转到表单
  5. 属性
  6. 最小尺寸:1366像素×768像素。
  7. 启动最大化
  8. 重要元素是 IsMdiContainer
  9. 打开工具箱。
  10. 转到菜单
  11. FileMenu 拖到表单
  12. 构建菜单
  13. 然后转到解决方案资源管理器
  14. 右键单击添加项
  15. 添加另一个表单
  16. 我离开了我的 Form2 (在一个真实的程序中,不是一个好名字)。
  17. 因此,在这十五个步骤中,我们拥有完成目标所需的一切。那么我们要完成任务的目的是:

    1. 返回 First Form
    2. 转到我们的 FileMenu
    3. 双击要链接的菜单按钮。
    4. 它将加载一个代码视图,在这个区域内放置:

      Form2 newFrm = new Form2();
      newFrm.MdiParent = this;
      newFrm.Show();
      

      这段代码的作用是三个不同的东西:

      • 第1行:它实际上是在调用我们的对象,在本例中是第二种形式。它实际上正在为我们构建我们的对象。

      • 第2行:实际上是将我们的第二个表单链接到我们当前的表单,这实际上将我们的第二个表单转换为子表单

      • 第3行:当点击按钮时,这实际上是显示我们的第二个表单。

      这就是您实际显示表单所需的全部内容。

      关于你的第二个问题,我不完全确定你想要完成什么。这听起来像是在尝试拥有一棵树,然后选择 Node 时, Form 的右侧会更改为特定的上下文。

      现在这不是最好的例子,但你的意思是这样吗?

      TreeNode node = treeView1.SelectedNode;
              if (node.Text.Contains("XP"))
              {                
                  TextBox one = new TextBox();
                  Panel i = new Panel();
                  i.Dock = DockStyle.Right;
                  i.BackColor = Color.Black;
                  i.Controls.Add(one);
                  i.Show();
                  TreeFrm.ActiveForm.Controls.Add(i);               
      
              }
      

      不确定这是否是您所寻求的。显然你想要实现一个 FlowLayoutPanel 来使定位不是一件痛苦的事。 请记住MDI父级,子级表单充当MDI父级将无法正常工作。因为大多数事情将默认为MDI父窗体停靠/定位。这个例子并不漂亮,但我不完全确定你的要求。

      您是否尝试将其他表单或组件停靠在同一表单上?