Toon posts:

[c#] rectangle op tabpage

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo

Ik ben momenteel bezig met een programmatje die een inhoud moet weergeven in een
tabpagina. Ik wil deze inhoud laten weergeven in een rectangle en deze dan laten vullen van groen
naar rood toe. Dit werkt allemaal perfect als ik dit maar op een single frame form doe.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
private void recInit()
        {
            //Initialisatie voor het tekenen van de tank
            this.nivo = new Rectangle(10,10,75,150);
            brush = new LinearGradientBrush(nivo, Color.Green, Color.Red, LinearGradientMode.Vertical);
            pn = new Pen( Color.Blue );
        }

private void button1_Click(object sender, System.EventArgs e)
        {
            if(inhoudH < 0)
            {
                inhoudH = 150;
                nivo.Y = 5;
            }
            //Aanpassing om de inhoud goed weer te geven
            nivo.Y += inhoudY;
            nivo.Height = inhoudH;
            inhoudH-=5;
            //Commando voor repaint
            Refresh();
        }

protected override  void OnPaint(PaintEventArgs pe)
        {
            //Paint controll
            niv = pe.Graphics ;
            //Verticale lijn
            niv.DrawLine(pn,90,10,90,160);
            //streepjes
            niv.DrawLine(pn,90,10,95,10);
            niv.DrawLine(pn,90,47,95,47);
            niv.DrawLine(pn,90,85,95,85);
            niv.DrawLine(pn,90,122,95,122);
            niv.DrawLine(pn,90,160,95,160);
            //Tank omtrek
            niv.DrawRectangle(pn,10,10,75,150);
            //Inhoud tank vullen
            niv.FillRectangle(this.brush,this.nivo);
        }


Probeer ik dit echter op een tabpage te zetten dan doet hij dit in eerste instantie op de achtergrond en wordt daar dan de tabcontrol overheen gezet. Dat snap ik nog :), omdat hij niet weet dat hij op
de tabpagina moet tekenen. Ik ben nu al een behoorlijk poos aan het klooien en zoeken, maar
ik kan nergens iets vinden dat hier op lijkt. :'(

Heeft iemand hier ooit mee gewerkt?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Het simpelste is gewoon een nieuwe class te maken die inherit van de tabpage class en daarin de methoden in te bouwen die je zelf al gemaakt hebt.
Hou nog wel even in de gaten dat je ook base.OnPaint() nog even aanroept.

Nu met Land Rover Series 3 en Defender 90


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Zo te zien probeer je een soort custom control te tekenen. Is het dan ook niet makkelijker om een custom control te maken en die dan aan de control collection van je tab-page toe te voegen. Je kan dan gewoon in de OnPaint van je control het tekenen doen en WinForms zorgt er voor dat het op de goede plek getekend wordt.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
MTWZZ schreef op maandag 02 oktober 2006 @ 16:28:
Het simpelste is gewoon een nieuwe class te maken die inherit van de tabpage class en daarin de methoden in te bouwen die je zelf al gemaakt hebt.
Hou nog wel even in de gaten dat je ook base.OnPaint() nog even aanroept.
Hoe bedoel je dit precies dan? Want ik heb met bijvoorbeeld ook al op MSDN
gekeken naar

tabArea = MytabControl1.GetTabRect(0);
MytabControl1.DrawItem += new DrawItemEventHandler(DrawOnTab);

om maar de goede positie te krijgen om te tekenen, maar dit werkt ook van geen kant.
Dit komt volgens mij door de paint manier.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Je kunt het volgende doen (meest eenvoudige manier):
C#:
1
2
3
4
5
6
7
8
9
public class EigenControl : Control
{
    protected override void OnPaint(object sender, PaintEventArgs e)
    {
        base.OnPaint(sender, e);

        e.Graphics.DrawRectangle(Pens.Black, 0, 0, this.Width, this.Height);
    }
}

Als je nu (als je VS2005 gebruikt tenminste) je project bouwt heb je de beschikking over een control EigenControl die je dan in de designer / tabcontrol op je form kunt slepen.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
Ik gebruik ind 2005 dus dit gaan we morgen aan de praat helpen
Pagina: 1