MdiParent- wypełnienie formy

0

Witam

Chciałbym na formie MDI - umieścić kilka rysunków i tekstów (Takie tło mówiące do czego służy program)
Problem polega na tym że jak umieszczę coś na formie MDI to po otwarciu okien potomnych umieszczone elementy znajdują się przed tymi formami.

Mam pytanie jak można zrobić żeby umieszczone elementy były za otwieranymi oknami.

0

rysuj je w OnPaint - taki efekt to przypadłość MDI i np. w Delphi jest tak samo

0

Napisałem fragment programu tak i jest tak jak było nadal "label" na pierwszym planie:

private void MDIParent1_Paint(object sender, PaintEventArgs e)
        {
            System.Windows.Forms.Label Label;
            
                // Dodanie nowego Labela
                Label = new System.Windows.Forms.Label();
                Controls.Add(Label);
                // Ustawnienie wszystkich parametrów obiektu
                Label.AutoSize = true;
                Label.Location = new System.Drawing.Point(100, 100);
                
                Label.Size = new System.Drawing.Size(35, 13);
                Label.Text = "Tekst";           
        }

Może coś nie tak zrobiłem albo są jakieś inne pomysły na rozwiązanie mojego problemu ?

0

ale Ty dynamicznie tworzysz komponent w OnPaint a masz rysować tekst i/lub grafikę

0

Mógłbyś podać jakieś polecenia opcjonalnie bibliotekę z której mógłbym skorzystać pisze program w Visual Studio 2005 net.
A no i mam pytanie czy to nie obciąża zbytnio programu (bardzo istotne bo to co pisze to program do obróbki dużej ilości danych.)

0
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        private Bitmap tlo;

        public Form1()
        {
            InitializeComponent();

            //przygotowanie obrazka z tłem
            //jeśli obrazek jest statyczny to wystarczy go raz narysować

            //stworzenie nowego obrazka o określonych rozmiarach
            tlo = new Bitmap(200, 200, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            //rectangle o wymiarach obrazka (pomocniczy)
            Rectangle r = new Rectangle(0, 0, tlo.Width, tlo.Height);
            
            Graphics g = Graphics.FromImage(tlo);
            //stworzenie gradientu
            System.Drawing.Drawing2D.LinearGradientBrush lgb = new System.Drawing.Drawing2D.LinearGradientBrush(r, Color.White, Color.Blue, 90f);
            //"narysowanie" gradientu
            g.FillRectangle(lgb, r);
            //"narysowanie" textu
            g.DrawString("Przykładowy napis", new Font("Times New Roman", 12, FontStyle.Bold), Brushes.Black, 10, 10);

            //znalezienie kontrolki, która jest MDI i dodanie do niej obsługi zdarzenia Paint
            //oraz Resize, żeby nie się odrysował po zmianie rozmiaru okna
            foreach (Control c in this.Controls)
                if (c is MdiClient)
                {
                    c.Paint += new PaintEventHandler(c_Paint);
                    c.Resize += new EventHandler(c_Resize);
                }
        }

        void c_Resize(object sender, EventArgs e)
        {
            ((MdiClient)sender).Invalidate();
        }

        void c_Paint(object sender, PaintEventArgs e)
        {
            //odrysowanie tła na formi
            e.Graphics.DrawImage(tlo, ClientRectangle);
        }
    }
}
0

nie napisałeś, czy kontrolki chcesz tworzyc dynamicznie czy nie. Jesli nie, to zdaje się, że w VCSE2005 można to ustawic w properties która kontrolka ma byc nad ktora itp

1 użytkowników online, w tym zalogowanych: 0, gości: 1