1
votes

Please guide and help me.

I have a MDI parent form which has a label at its center (to display application name in center). On opening a form in this MDI parent, this label should appear on back side of newly opened form, but on showing a child form, label appears in front of newly opened form (appears like newly opened form is between label and MDI parent).

How to manage it please guide me.

thanks

4

4 Answers

4
votes

This will hide the label while you have active MDI Children en show it again once there is no active child anymore.

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

I hope this helps.

3
votes
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);
    }
}
2
votes

The problem is that your label is not added to the MdiClient (i.e. the grey Mdi container) but to the form.

But unfortunately, AFAIK, it's not possible to add controls to an MdiClient.

The only way is drawing what you want on the Paint event of the MdiClient, as suggested in this article:

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

1
votes

Well, I did one trick and it works for me. We usually write an application name in the center and expect it to show to the user. And many people here said that MdiParent is only for Forms and not for other tools like we cannot hide label/panel behind MdiChild form.

So what I did is I wrote all the things like application name, contact, email etc etc etc in a new Form say frmMdiBody, Set its formBorderStyle = None and set the desired length of the form, StartPosition = CenterScreen and in Timer.Tick, I wrote the following : (Didn't work for me in Load event)

  Dim NewMDIChild As frmMdiBody = MdiChildren.OfType(Of frmMdiBody)().SingleOrDefault
  If NewMDIChild Is Nothing Then
      NewMDIChild = New frmMdiBody
      NewMDIChild.MdiParent = Me
      NewMDIChild.Show()
  End If

This above code also checks if there is one form open so that it won't open many frmMdiBody again and again as we are writing in Timer.Tick event

Someone can rectify me if I am wrong. I'd do the changes too if seems appealing.