我们在这里遇到了一个真正让我们烦恼的小问题。让我快速解释一下我们在做什么:
我们正在创建一个 Windows 窗体,将其保存为 .DLL 并将其加载为 MDIContainer。看起来很好,工作正常,除了,如果我们在表单中使用面板作为组件,它会改变大小。
前:
之后(在 MDIContainer 中):
(注意面板!)。
我们猜测这是因为我们的自定义 MDI 容器。这是我们的 MDI 容器的代码:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace NAMESPACE.Forms
{
class MdiClientPanel : Panel
{
private Form mdiForm;
private MdiClient ctlClient = new MdiClient();
public MdiClientPanel()
{
this.ctlClient.BackColor = Color.LightGray;
base.Controls.Add(this.ctlClient);
}
public Form MdiForm
{
get
{
if (this.mdiForm == null)
{
this.mdiForm = new Form();
System.Reflection.FieldInfo field = typeof(Form).GetField("ctlClient", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
field.SetValue(this.mdiForm, this.ctlClient);
}
return this.mdiForm;
}
}
}
}
我们有什么办法可以解决这个问题吗?感谢您的帮助。
//编辑:添加赏金,因为我们想知道为什么会这样。如何重现它:
- 在新项目的新类中复制我们的 MDIClientPanel 代码
- 创建第二个表单,在其中放置一些控件。
- 在 MDIClient 面板中加载表单。
- 编译并查看第二种形式的 Size 是如何变化的。
如果您像这样打开第二个表单,则可以解决此问题:
SecondForm Form = new SecondForm();
Form.MdiParent = this.MdiClientPanel.mdiForm;
Form.Size.Width += 35; //THIS PART WILL FIX
Form.Size.Height += 20; //THIS PART WILL FIX IT
Form.Show();
但不可能这是唯一的解决方案,它有点可疑......