Avatar billede alex_sleiborg Nybegynder
15. maj 2006 - 22:15 Der er 10 kommentarer og
1 løsning

Tegne inde i en group box

Jeg skal have tegnet noget inde i en groupbox. Som i jo ved når man tilføjer en control til en groupbox gøres det således

this.grp_Calculate.Controls.Add(this.lbl_Moms);

Og så har man sin label "lbl_Moms", til at tilhøre groupboxen grp_Calculate

Men jeg vil gerne have tegnet noget inde i en groupbox, men ved ikke lige hvordan jeg skal klare den...

Her er koden der tegner et rektangel

Graphics dc = this.CreateGraphics();
            Pen BluePen = new Pen(Color.Black, 1);
            RectangleF[] rects = { new RectangleF(250.0F, 100.0F, 105.0F, 149.0F) };

            dc.DrawRectangles(BluePen, rects);

Hvordan får jeg tegnet den inde i groupboxen?
Avatar billede bitsch Nybegynder
15. maj 2006 - 22:22 #1
override OnPaint på GroupBoxen.
Avatar billede alex_sleiborg Nybegynder
15. maj 2006 - 22:22 #2
Har du et eksempel på hvordan det gøres?
Avatar billede bitsch Nybegynder
15. maj 2006 - 22:25 #3
Jeg kan brygge et...
Avatar billede bitsch Nybegynder
15. maj 2006 - 22:42 #4
På en meget langsom notebook har jeg lavet følgende:

  class MyGroupBox : GroupBox
    {

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            using (Pen pen = new Pen(Color.Magenta))
            {
                Rectangle rectangle = e.ClipRectangle;
                rectangle.Inflate(-10, -10);

                e.Graphics.DrawRectangle(pen, rectangle);
            }
        }
    }


Ikke det mest spændende eksempel...
Avatar billede alex_sleiborg Nybegynder
15. maj 2006 - 22:48 #5
Jeg aner ikke hvad der sker lige der, eller hvordan jeg kan bruge det. Gider du forklare
Avatar billede bitsch Nybegynder
15. maj 2006 - 22:59 #6
Ok.
Du må lave din egen version af GroupBox for at gøre det muligt at override OnPaint.

Jeg har derfor lavet en klasse som jeg har valgt at kalde MyGroupBox.
Denne klasse nedarver fra GroupBox.

Når jeg har lavet klassen overrider jeg OnPaint metoden som er den metode som kaldes hver gang kontrollen bliver gentegnet.

Det vil altså sige at koden også tager højde for at din form bliver flyttet, resized etc.

using... sikrer at du får disposed din Pen korrekt.

Eksemplet tegner blot en simpel rectangle i GroupBoxen som er akkurat 10 pixel mindre på hver led (inflate -10 er det samme som at gøre mindre)

Man kan naturligvis tegne hvad man vil. Dette er blot et kort eksempel.

Og for at bruge det...
Lav en ny klasse som extender GroupBox
build dit project.
Drag / Drop din kontrol fra toolboxen (hvis du anvender Visual Studio) til din Form.
Når du kan se din Group Box på din form i designeren, begynd herefter at override OnPaint i din nye kontrol, så kan du nemlig med det samme se om din OnPaint kode virker.
Avatar billede bitsch Nybegynder
15. maj 2006 - 23:07 #7
Når du har fået dette til at spille kan du se på hvorledes man kan anvende GroupBoxRenderer klassen, hvis man vil lave yderligere ved sin kontrol. Et link til dette kan du få her.

http://msdn2.microsoft.com/en-us/library/system.windows.forms.groupboxrenderer(d=ide).aspx
Avatar billede alex_sleiborg Nybegynder
16. maj 2006 - 15:53 #8
Ja det virker nu, men det jeg gerne vil have tegnet skal gerne ligne et a4 papir. Er der ikke en funktion hvor jeg selv kan bestemme position og størrelse på det rektangel?
Avatar billede bitsch Nybegynder
16. maj 2006 - 16:23 #9
Sagtens. Du kan tegne hvad du vil, hvor du vil, blot det er indenfor ClipRectangle.

Dit rectangle bliver tegnet på en given position (Location).
Prøv blot at undersøge Rectangle:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawingrectanglememberstopic.asp
Avatar billede bitsch Nybegynder
19. maj 2006 - 18:06 #10
Håber at svaret kunne bruges.
Avatar billede alex_sleiborg Nybegynder
19. maj 2006 - 20:47 #11
Sorry jeg ikke har fået svaret endnu, har simpelthen haft så travlt. Får det lige prøvet her i weekenden. Men smid et svar, du har gjort dig fortjent til at få de point... :)
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