【问题标题】:MDI child with FormBorderStyle = None not maximizing correctly具有 FormBorderStyle = None 的 MDI 子项未正确最大化
【发布时间】:2015-12-07 15:03:26
【问题描述】:

我正在使用 Windows 窗体编写应用程序。我需要使用 FormBorderStyle 设置为 None 的 MDI 子项。问题是,当我最大化时,孩子没有正确显示。显示 Form2 的代码是:

  this.WindowState = FormWindowState.Maximized;
  Form2 frm = new Form2();
  frm.MdiParent = this;
  frm.Size = this.ClientSize;
  frm.ShowInTaskbar = false;
  frm.WindowState = FormWindowState.Maximized;
  frm.Show();

Form2 在设计器中的外观如下:

这是应用程序:

如何解决这个问题以正确显示 Form2?

【问题讨论】:

  • 使用UserControl代替MDI育儿很容易解决。我从来没有发现 MDI 表格有什么用处。窗中之窗对我来说毫无意义
  • 我建议试试frm.Show(this)。也许在添加孩子之后最大化父母会有所不同。
  • @René Vogt 感谢您的意见。但是,frm.Show(this) 会抛出异常:非顶级表单的表单无法显示为模态对话框。在调用 Show 之前从任何父窗体中删除该窗体。所以我不能将它与 MDI 一起使用。之后最大化会得到与帖子中描述的相同的结果。
  • MDI 不能正确支持无边界表单。最好不要使用 MDI,而是将无边框的子表单(或 UserControls)放在面板中。

标签: c# windows forms winforms


【解决方案1】:

你可以试试下面的代码。它似乎可以满足您的需求。

        this.WindowState = FormWindowState.Maximized;
        Form2 frm = new Form2();
        frm.MdiParent = this;
        frm.Dock = DockStyle.Fill;
        //frm.Size = this.ClientSize;
        frm.ShowInTaskbar = false;
        //frm.WindowState = FormWindowState.Maximized;

        frm.Show();

唯一的变化是添加了 frm.Dock = DockStyle.Fill;并注释掉设置Form2的大小和窗口状态。

当我运行程序时,效果就是这样。

我同意这似乎是获得此效果的错误方法,并且用户控件很可能会更好。

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多