Vous pouvez créer de formulaire personnalisé, supprimer toutes les frontières, et les barres d'outils pour le faire paraître comme de près d'un panneau que possible. Puis faire de ce nouveau formulaire personnalisé un MdiContainer.
Fondamentalement, vous ne pouvez définir la propriété IsMDIContainer sur un Formulaire. Cela signifie que seulement un formulaire peut être un MdiContainer.
Je n'ai que votre arriver, mais vous ne pouvez pas avoir imbriqués formulaires MDI 🙁 J'ai enfin obtenir ce que l'on ment sur le formulaire personnalisé chose. Faire un contrôle de l'utilisateur 😀
Il est possible de créer une interface MDI-panneau et les formes du spectacle dans le panneau, quelque chose comme le code ci-dessous va faire le travail
Mdi-Panneau de définition:
publicclassMdiClientPanel:Panel{privateForm mdiForm;privateMdiClient ctlClient =newMdiClient();publicMdiClientPanel(){base.Controls.Add(this.ctlClient);}publicFormMdiForm{
get
{if(this.mdiForm ==null){this.mdiForm =newForm();///set the hidden ctlClient field which is used to determine if the form is an MDI formSystem.Reflection.FieldInfo field =typeof(Form).GetField("ctlClient",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance);
field.SetValue(this.mdiForm,this.ctlClient);}returnthis.mdiForm;}}}
Utilisation:
///mdiChildForm is the form that should be showed in the panel///mdiClientPanel is an instance of the MdiClientPanel
myMdiChildForm.MdiParent= mdiClientPanel1.MdiForm;
MathiasJ, <BR> je tryied votre solution, mais coincé dans un problème: lorsque vous agrandissez un formulaire enfant, son espace client convient à tous les panneaux de l'espace disponible et la barre de titre (contenant les trois bouton minimiser maximiser et fermer) est indiqué nulle part... Si vous ne voyez pas d'autres enfant plus... des idées? Bye Gianni Cela a fonctionné très bien pour moi sur un contrôle personnalisé que j'ai voulu l'utiliser comme un MDI conteneur. Un peu de bricolage (y compris le commentaire ci-dessus de la mienne), mais d'autres que: Excellent travail.
J'ai utilisé Mathias de la réponse ci-dessus, et a été en mesure de se débarrasser de la plupart des questions soulevées dans les commentaires. J'ai créé une classe d'assistance pour l'enfant, les formes ainsi, dans le cas où quelqu'un voulait l'utiliser et/ou de le rendre meilleur.
publicclassMdiClientPanel:Panel{privateMdiClient _ctlClient =newMdiClient();//Callback event when a child is activatedpublicdelegatevoidActivateHandler(object sender,MdiClientForm child);publiceventActivateHandlerOnChildActivated;///<summary>///The current active child form///</summary>publicFormActiveMDIWnd{
get;set;}///<summary>///List of available forms///</summary>publicList<MdiClientForm>ChildForms=newList<MdiClientForm>();///<summary>///Std constructor///</summary>publicMdiClientPanel(){base.Controls.Add(_ctlClient);}privateForm _mdiForm =null;publicFormMdiForm{
get
{if(_mdiForm ==null){
_mdiForm =newForm();//Set the hidden _ctlClient field which is used to determine if the form is an MDI formSystem.Reflection.FieldInfo field =typeof(Form).GetField("ctlClient",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance);
field.SetValue(_mdiForm, _ctlClient);}return _mdiForm;}}privatevoidInitializeComponent(){SuspendLayout();ResumeLayout(false);}///<summary>///Add this Form to our list of children and set the MDI relationship up///</summary>///<param name="child">The new kid</param>///<returns>The new kid</returns>publicMdiClientFormAddChild(MdiClientForm child){
child.MyMdiContainer=this;
child.MdiParent=MdiForm;ChildForms.Add(child);return child;}///<summary>///The user sent a "restore" command, so issue it to all children///</summary>publicvoidRestoreChildForms(){foreach(DataTableForm child inChildForms){
child.WindowState=FormWindowState.Normal;
child.MaximizeBox=true;
child.MinimizeBox=true;}}///<summary>///Send the Activated message to the owner of this panel (if they are listening)///</summary>///<param name="child">The child that was just activated</param>publicvoidChildActivated(MdiClientForm child){ActiveMDIWnd= child;if(OnChildActivated!=null)OnChildActivated(this, child);}///<summary>///The child closed so remove them from our available form list///</summary>///<param name="child">The child that closed</param>publicvoidChildClosed(MdiClientForm child){ChildForms.Remove(child);}}///<summary>///A wrapper class for any form wanting to be an MDI child of an MDI Panel///</summary>publicclassMdiClientForm:Form{///<summary>///My parent MDI container///</summary>publicMdiClientPanelMyMdiContainer{ get;set;}///<summary>///Standard Constructor///</summary>publicMdiClientForm(){Activated+=OnFormActivated;FormClosed+=OnFormClosed;}///<summary>///Reports back to the container when we close///</summary>voidOnFormClosed(object sender,FormClosedEventArgs e){MyMdiContainer.ChildClosed(this);}///<summary>///Reports back to the parent container when we are activated///</summary>privatevoidOnFormActivated(object sender,EventArgs e){MyMdiContainer.ChildActivated(this);}}
Vous pouvez créer de formulaire personnalisé, supprimer toutes les frontières, et les barres d'outils pour le faire paraître comme de près d'un panneau que possible. Puis faire de ce nouveau formulaire personnalisé un MdiContainer.
Fondamentalement, vous ne pouvez définir la propriété IsMDIContainer sur un Formulaire. Cela signifie que seulement un formulaire peut être un MdiContainer.
J'ai enfin obtenir ce que l'on ment sur le formulaire personnalisé chose. Faire un contrôle de l'utilisateur 😀
OriginalL'auteur jgallant
Il est possible de créer une interface MDI-panneau et les formes du spectacle dans le panneau, quelque chose comme le code ci-dessous va faire le travail
Mdi-Panneau de définition:
Utilisation:
Cela a fonctionné très bien pour moi sur un contrôle personnalisé que j'ai voulu l'utiliser comme un MDI conteneur. Un peu de bricolage (y compris le commentaire ci-dessus de la mienne), mais d'autres que: Excellent travail.
OriginalL'auteur Mathias Gorm Jensen
J'ai utilisé Mathias de la réponse ci-dessus, et a été en mesure de se débarrasser de la plupart des questions soulevées dans les commentaires. J'ai créé une classe d'assistance pour l'enfant, les formes ainsi, dans le cas où quelqu'un voulait l'utiliser et/ou de le rendre meilleur.
OriginalL'auteur MrWuf