Avatar billede alex_sleiborg Nybegynder
12. juli 2006 - 20:03 Der er 7 kommentarer og
1 løsning

Problemer med gdi+

Jeg har lavet override onpaint på en groupbox, inde i den groupbox tegner jeg så et rektangel. Det virker også som det skal. Så inde i det rektangel skal jeg så tegne et billede, som jeg tager fra en lokal jpg fil der ligger på min computer. billedet bliver også vist, men det står flimre. Jeg har lavet en messagebox der hvor jeg kalder den metode som tegner billedet, det viser sig messageboxen kommer frem et utal af gange, som om den var i en uendelig løkke. Hva er der galt, her er hele min klasse

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);
                    MessageBox.Show(Bmp.Height.ToString()); //Test messagebox
                    MessageBox.Show(Bmp.Width.ToString()); //Test messagebox
                    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();
            }
        }
  }
Avatar billede lifo Nybegynder
12. juli 2006 - 21:58 #1
din controll bliver ikki bare tegnet 1 gange
om der kommer et eller andet forbi dit program so bliver paint kaldt igen

lad være at bruge en message box til test ting
brug System.Diagnostics.WriteLine("bla bla bla");

da kommer det i output vinduet i visual studio mens du kører i debug mode
og kommer ikke med i koden når du compiler i release mode
Avatar billede Syska Mester
12. juli 2006 - 22:28 #2
System.Diagnostics.Debug.WriteLine("bla bla bla");
Avatar billede lifo Nybegynder
12. juli 2006 - 22:54 #3
jaja er så vandt til intellisens at man glemmer
Avatar billede Syska Mester
12. juli 2006 - 23:58 #4
Ville bare skrive det så "alex_sleiborg" ikke ledte helt forgæves efter den :-)

// ouT
Avatar billede wisen Nybegynder
21. august 2006 - 11:03 #5
Du kalder "this.Invalidate" i metoden "DrawBMP" - det gør at "OnPaint" bliver kaldt igen - så så har du en uendelig løkke.
Avatar billede wisen Nybegynder
21. august 2006 - 11:04 #6
.. du bør heller ikke læse stien til dit logo i OnPaint... der er vel ikke noget der ændrer sig under kørslen af programmet?
Avatar billede alex_sleiborg Nybegynder
31. august 2006 - 09:43 #7
Jo det kan godt være logo stien bliver ændret under kørsel af programmet. Er der ingen der kan hjælpe???
Avatar billede alex_sleiborg Nybegynder
14. december 2006 - 11:46 #8
Fik det løst
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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