【问题标题】:Add a form to a MDI child将表单添加到 MDI 子项
【发布时间】:2023-04-06 21:15:02
【问题描述】:

Form1 中,我启用了IsMdiContainer,并添加了MenuStrip。在Form1_Load 我是“新的”Form2,我将Form2.MdiParent 分配给this,即Form1。我也在最大化Form2,这个操作效果很好。

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

我想根据treeView 中的选择创建许多不同的表单来编辑数据,这些表单将显示在Form2 中。我似乎无法向 MdiChild 添加表单,并且我一直在看到一些帖子,其中向表单添加表单可能会产生一些我不确定的编程问题。

我真的没有任何代码可以粘贴到这篇文章中,因为除了非常简单的 Mdi 父子关系之外似乎没有任何工作。

提前感谢您的帮助。

【问题讨论】:

  • 最好是包含代码然后解释它!
  • 在 MDI 中创建 MDI 不会那么好用。而是将 TreeView 放在 MDI 父级上,将其停靠在左侧。

标签: c# mdi mdichild mdiparent


【解决方案1】:

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

  1. 打开 Visual Studio
  2. 创建 Windows 窗体应用程序
  3. 点击您的表单
  4. 转到该表单属性
  5. 最小尺寸:1366 x 768 像素。
  6. 启动最大化
  7. 重要的元素是IsMdiContainer
  8. 打开您的工具箱。
  9. 转到菜单
  10. FileMenu 拖到您的 Form
  11. 构建您的菜单
  12. 然后转到解决方案资源管理器
  13. 右键单击添加项目
  14. 添加另一个表单
  15. 我留下了我的 Form2(在一个真正的程序中,不是一个好名字)。

因此,在这十五个步骤中,我们拥有了实现目标所需的一切。所以我们要完成我们的任务是:

  1. 回到我们的第一个表格
  2. 转到我们的 FileMenu
  3. 双击要链接的菜单按钮。

它将加载一个代码视图,在该区域内放置:

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

这段代码做了三件不同的事情:

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

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

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

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

关于你的第二个问题,我不完全确定你试图完成什么。它听起来像你的尝试拥有一棵树,那么作为节点 em>选择了形式 em>的右侧,对特定上下文的更改。

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

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 父窗体停靠/定位。这个例子并不漂亮,但我不完全确定你的要求。

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

【讨论】:

  • 感谢您的回复。如果我有一个包含 4 个不同级别的 treeView,我想显示 4 个不同的编辑屏幕,最好是作为 treeView 右侧的表单。我正在使用 tabControl 完成此操作。如果在我的 treeView 上选择了级别 2,则会显示 tabControl 中的第二个选项卡。这个解决方案的问题是我必须阻止用户选择选项卡,这会破坏用户查看选项卡控件的方式。相反,我想显示 4 个表单,并根据在 treeView 中选择的级别将适当的表单放在前面。
  • @Michael 我编写的代码的子区域将适用,你会想要使用 FlowLayoutPanel 但你可能必须在没有 MdiChild 的单个 Form 上编写整个应用程序.由于与它对接的过程不会真正发生,因此它将与父级对接。这是可能的,但需要大量的试验和错误。只需通过代码将组件停靠到子窗体就可以独立完成任务。希望这会有所帮助。如果我有更多想法,我会为您发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多