ここで小さな問題が発生していて、本当に困っています。私たちが何をしているのかを簡単に説明しましょう。
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 コードをコピーします
- 2 番目のフォームを作成し、その中にいくつかのコントロールを配置します。
- MDIClient パネル内にフォームをロードします。
- コンパイルして、2 番目のフォームのサイズがどのように変化しているかを確認します。
これは、次のように 2 番目のフォームを開くと修正できます。
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();
しかし、これが唯一の解決策である方法はありません。ちょっと怪しいです...