web-dev-qa-db-ja.com

winアプリでパネル内の他のフォーム内にフォームをロードする方法

C#を使用してWindowsフォームアプリケーションを作成します。

一般的なフォームとパネルがあります。

コードでこのパネルにsubFormを表示します。

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();

今、このパネルのsubFormに他のフォームを表示したいのですが、どうすればいいのかわかりません。

22
Iraj

このコードであなたの問題は解決したと思います:

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

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

pnlSubSystem.Controls.Add(objForm);

使用(where objForm2は新しいsubFormです)

SubForm objForm2 = new SubForm();
objForm.Controls.Add(objForm2); 
4
Martijn van Put

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();
3

別の方法:

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

これがStackoverflowに関する私の最初の答えです。

1
Alan Ackart