Avatar billede zapzone Nybegynder
04. december 2007 - 12:16 Der er 5 kommentarer og
1 løsning

Tegne i et Panel

Hey.

Jeg er interesseret i at kunne tegne i et panel. Panelet er indsat i en ny form som jeg loader når der klikkes på en knap i min main form. Problemet er, at der ikke bliver tegnet noget som helst. Koden som afvikles når der trykkes på knappen ser således ud:

        private void LoadLevelEditor()
        {
            Form LevelEditor = new Form();
            LevelEditor.Show();
            LevelEditor.Width = 650;
            LevelEditor.Height = 650;
           
            Panel drawingpanel = new Panel();
            drawingpanel.Width = 600;
            drawingpanel.Height = 600;

            Graphics gra = drawingpanel.CreateGraphics();
            gra.DrawEllipse(Pens.Black, new Rectangle(5, 5, 100, 100));
        }
Avatar billede bulgroz Nybegynder
04. december 2007 - 12:54 #1
Du bør override OnPaint på dit Panel og lave din tegning der!
Avatar billede alex_sleiborg Nybegynder
04. december 2007 - 14:04 #2
Her er et eksempel jeg engang har brugt. Har er det godt nok en groupbox jeg bruger, men du kan bare nedarve fra et panel i stedet. Når du tilføjer denne klasse, kan du så tilføje en ny control fra din toolbox som hedder msPaintGrpBox, dette navn kan du naturligvis bare ændre

    class MsPaintGrpBox : GroupBox
    {
        Bitmap Bmp;
        RectangleF BMPContainer;

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
                     
            //A4 paper
            //1184 x 0832 pixels  (0296 x 0208 mm)
            //I'll divided it with 1184 / 7 = 169
            // 832 / 7 = 119
            using (Pen pen = new Pen(Color.Black))
            {
                Rectangle rectangle = e.ClipRectangle;
                rectangle.X = 8;
                rectangle.Y = 20;
                rectangle.Width = 119;
                rectangle.Height = 169;

                e.Graphics.DrawRectangle(pen, rectangle);

            }
            Graphics G = e.Graphics;
            if (Bmp != null)
            {
                G.DrawImage(Bmp, BMPContainer);
            }
            if (File.Exists(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Configuration.xml")))
            {
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.Load(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Configuration.xml"));

                XmlNode logo = xmlDocument.SelectSingleNode("/FirmaData/Logo/LogoSti");

                if (logo != null && logo.HasChildNodes)
                {
                    Bmp = new Bitmap(logo.ChildNodes[0].InnerText);
                    DrawBMP();
                }
            }
        }
        private void DrawBMP()
        {
            if (Bmp != null)
            {
                Graphics G = this.CreateGraphics();
                GraphicsUnit GU = G.PageUnit;
                BMPContainer = Bmp.GetBounds(ref GU);
                this.Invalidate(Rectangle.Round(BMPContainer));
                G.Dispose();
            }
        }
  }

Ligesom du kan ændre, hvad der skal tegnes inde i dit panel
Avatar billede alex_sleiborg Nybegynder
04. december 2007 - 14:05 #3
Du skal selvfølgelig fjerne alt det der XML, og hvad der ellers er du ikke skal bruge
Avatar billede zapzone Nybegynder
08. december 2007 - 14:22 #4
Tak Alex, efter en lille omskrivning fik jeg det til at virke... :)
Hvis du lige svarer, så kan du få dine point.
Avatar billede alex_sleiborg Nybegynder
09. december 2007 - 16:14 #5
Det var da så lidt. Bare behold dine point og svar selv. Jeg har alligevel ikke noget at bruge de point til. Forsat god dag :)
Avatar billede zapzone Nybegynder
29. december 2008 - 00:19 #6
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester