2010-12-03 7 views
1

S'il vous plaît guider et m'aider.étiquette dans le formulaire parent MDI ne restent pas en arrière-plan du formulaire enfant?

J'ai un formulaire parent MDI qui a une étiquette en son centre (pour afficher le nom de l'application au centre). À l'ouverture d'un formulaire dans ce parent MDI, cette étiquette doit apparaître au dos du formulaire nouvellement ouvert, mais en affichant un formulaire enfant, l'étiquette apparaît devant le formulaire nouvellement ouvert (apparaît comme le formulaire nouvellement ouvert est entre étiquette et parent MDI).

Comment le gérer s'il vous plaît guide moi.

grâce

Répondre

3
public partial class MyMdiForm : Form 
{ 
    public MyMdiForm() 
    { 
     InitializeComponent(); 
     foreach (Control control in Controls) 
     { 
      if (control is MdiClient) 
       control.Paint += mdiBackgroundPaint; 
     } 
    } 

    private void mdiBackgroundPaint(object sender, PaintEventArgs e) 
    { 
     var mdi = sender as MdiClient; 
     if (mdi == null) return; 

     e.Graphics.Clip = new System.Drawing.Region(mdi.ClientRectangle); 
     e.Graphics.DrawString("*** YOUR NAME HERE ***",this.Font,Brushes.Red,100F,100F); 
    } 
} 
+0

Merci Jvanrhyn, il a résolu le problème. Juste une question pelase. Mon problème était normal? Je veux dire est ce fonctionnement correct de la forme MDI que si ils ont des contrôles en eux, les contrôles viennent sur les formulaires enfants? ou c'était quelque chose de mal dans mon code? merci beaucoup pour yoru shring et temps précieux. – haansi

+0

Oui, c'est normal. Le conteneur MDI est un hôte pour les formulaires et pas vraiment pour les contrôles, à l'exception des barres d'outils et de la barre d'état, etc. en haut, en bas et sur les côtés de votre formulaire MDI. – jvanrhyn

+0

Il est parfait pour moi d'afficher en arrière-plan la liste des symboles de compilation conditionnelle. :) – Samuel

4

Cela permet de masquer l'étiquette alors que vous avez MDI actif enfants en montrer encore une fois qu'il n'y a pas plus enfant actif.

private void Form1_MdiChildActivate(object sender, EventArgs e) 
    { 
     if (ActiveMdiChild != null) 
      label1.SendToBack(); 
     else 
      label1.BringToFront(); 
    } 

J'espère que cela aide.

+0

Merci jvanrhyn de répondre. sur quel événement de quelle forme je devrais coder ceci? S'il vous plaît guider une chose de plus. Est-ce un comportement correct ou c'est quelque chose qui ne va pas avec moi. merci – haansi

+2

Ceci est l'événement MdiChildActivate du formulaire MDI. Cet événement est déclenché à la fois lorsqu'un enfant est activé et désactivé. – jvanrhyn

+0

jvanrhyn J'ai essayé ce code. Il a résolu le problème partiellement. Lors du chargement de l'étiquette du formulaire enfant sous forme arrière (parent mdi) est devenu invisible et quand je ferme l'enfant forme lable revenir. Mais cela donne encore des regards étranges comme aller et venir de l'étiquette. Ne peut-il pas y avoir une raison pour laquelle ce lable peut rester là toujours rester visible sur le dos de la forme enfant et si aucune forme enfant ne sera ouverte lable sera la première couche. Au moment où une forme d'enfant vient étiquette disparaissent quand je ferme l'enfant forme il vient encore. Veuillez nous conseiller Merci – haansi

2

Le problème est que votre étiquette n'est pas ajoutée au MdiClient (c'est-à-dire le conteneur gris Mdi) mais au formulaire.

Mais malheureusement, AFAIK, il n'est pas possible d'ajouter des contrôles à un MdiClient.

La seule façon dessine ce que vous voulez sur l'événement Paint du MdiClient, comme l'a suggéré dans cet article:

http://www.vbaccelerator.com/home/NET/Code/Libraries/Windows/MDI_Client_Area_Painting/article.asp

+0

Merci d'avoir répondu dibEmALL, En fait, je suis nouveau à winforms. L'étiquette que je réclame j'ai ajouté sur le parent Mdi (j'ai ajouté un formulaire simple et le rende MDIParent de l'autre forme, je n'ai pas ajouté un type de formulaire parent de MDI séparé). Si je n'ouvre pas la nouvelle étiquette de formulaire apparaît sur le parent MDI. – haansi

0

Eh bien, apparemment quelque chose ne va pas avec l'ordre Z de votre parent MDI les contrôles enfants de la fenêtre. (Les contrôles enfants du parent incluent votre étiquette ainsi que toutes les fenêtres de document MDI.)

Vous n'avez pas montré votre code, donc je ne peux pas poster une solution spécifique. Peut-être regarder dans le SendToBack method: Vous pouvez essayer d'appeler:

yourBackgroundLabel.SendToBack(); 

lorsque vous ouvrez une nouvelle fenêtre MDI (enfant/document).

+0

Merci Stakx, Est-ce que cela fonctionne correctement ou il y a un problème dans mon code? Je n'ai pas fait beaucoup de code actully. Je viens de faire une forme mdi parent et ai chargé un autre formulaire dedans. parent a un lable au centre.À partir du menu, je montre juste une nouvelle forme. S'il vous plaît guide – haansi

+0

@ haansi, je ne peux pas dire si votre code a un problème sans le voir. (Mais évidemment, oui, votre code est faux, puisque votre programme ne fonctionne pas comme prévu.) Pour la même raison, je ne peux pas vous dire si ma solution vous aidera dans votre cas, car je ne connais pas votre code . Pourquoi ne pas essayer? – stakx

Questions connexes