2013-07-31 10 views
19

I WindowsフォームアプリケーションをC#で作成します。Win app内のパネル内のフォームを他のフォームに読み込む方法

私は一般的なフォームとパネルを持っています。

私はコードでこのパネルにサブフォームを表示:

SubForm objForm= SubForm.InstanceForm(); 
this.IsMdiContainer = true; 
objForm.TopLevel = false; 
pnlSubSystem.Controls.Add(objForm); 
objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
objForm.Dock = DockStyle.Fill; 
objForm.Show(); 

は今、私はこのパネルのサブフォーム上の他のフォームを表示したい、しかし、私はそれを行う方法を知りません。

+3

これを行うときに、IsMdiContainerをtrueに設定することに意味はありません。そのパネルに別のフォームが表示されるようにするには、SizeプロパティとLocationプロパティを設定する必要があります。フォームが重複する可能性のあるMDIの動作はありません。 –

答えて

20

私はあなたの問題は、このコードによって解決思う:

SubForm objForm= SubForm.InstanceForm(); 
    objForm.TopLevel = false; 
    pnlSubSystem.Controls.Add(objForm); 
    objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
    objForm.Dock = DockStyle.Fill; 
    objForm.Show(); 
3

私が理解するように、あなたは非常に近いです。 subformに別のフォームを追加するには代わりに同じコードを試してみてください。

pnlSubSystem.Controls.Add(objForm); 

使用を(objForm2がどこにある新しいsubForm

SubForm objForm2 = new SubForm(); 
objForm.Controls.Add(objForm2); 
3

あなたはすでにthis.IsMdiContainer = true;を削除することで、あなたのコードは完璧にうまく動作するだろうという回答が得られました。 IsMdiContainerプロパティは、フォームの表示と動作をMDI親フォームに変更するためです。このプロパティがtrueに設定されている場合、フォームには水没したクライアント領域が表示されます。親フォームに割り当てられたすべてのMDI子フォームは、クライアント領域内に表示されます。

SubForm objForm= SubForm.InstanceForm(); 
objForm.TopLevel = false; 
pnlSubSystem.Controls.Add(objForm); 
objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
objForm.Dock = DockStyle.Fill; 
objForm.Show(); 

objFormフォームは、子フォームのテンプレートになります。アプリケーションに新しい子ウィンドウを作成するたびに、このテンプレートフォームの新しいインスタンスを作成し、最初のフォームを親フォームとして作成することができます。

//Create a new instance of the MDI child template form 
SubForm objForm = new SubForm(); 
//Set parent form for the child window 
objForm.MdiParent=this; // Last ObjForm or something 
//Display the child window 
objForm.Show(); 
0

別の方法:

objForm.TopLevel = false; 
objForm.Parent = pnlSubSystem; 
objForm.Show(); 

これはStackOverflowの上の私の最初の答えです。

関連する問題