Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[C#] OnPaint probleempje ???

None
3 antwoorden
  • Hoi,

    ik heb een raar probleempje. Ik heb een Plot-control gemaakt door een PictureBox te implementeren met een paar extra's.
    [img:1c97376435]http://photos.egnie.nl/processdata1.jpg[/img:1c97376435]

    Ik heb al geprobeerd de OnPaint te overriden en alles opnieuw te tekenen, maar er wordt nog niets in het witte vlak gezet. Als ik nu op de Refresh-knop druk, worden wel alle blokjes getekend (wat overigens ook werkt als het windowtje buiten het beeld gezet wordt en [u:1c97376435]langzaam[/u:1c97376435] weer teruggezet wordt).
    [img:1c97376435]http://photos.egnie.nl/processdata2.jpg[/img:1c97376435]

    Als ik het scherm buiten beeld beweeg en snel weer terug zet gebeurd er dit:
    [img:1c97376435]http://photos.egnie.nl/processdata3.jpg[/img:1c97376435]

    Hoe krijg ik dit opgelost?

    Plots-class:
    [code:1:1c97376435]
    public class Plots: PictureBox
    {
    private ArrayList blist = new ArrayList();

    public Plots()
    {
    this.Size = new Size(250, 250);
    this.AddBlokje(new Blokje(this, 100));
    this.AddBlokje(new Blokje(this, 50));
    this.AddBlokje(new Blokje(this, 130));
    this.AddBlokje(new Blokje(this, 200));
    this.TekenBlokjes();
    }
    public void AddBlokje(Blokje blokje)
    {
    this.blist.Add(blokje);
    }
    protected override void OnPaint(PaintEventArgs pe)
    {
    base.OnPaint(pe);
    this.TekenBlokjes();
    }
    public void TekenBlokjes()
    {
    foreach (Blokje bl in blist)
    {
    bl.Draw();
    }
    }
    }
    [/code:1:1c97376435]

    Blokje-class:
    [code:1:1c97376435]
    public class Blokje
    {
    Graphics rechthoek;
    int positie;
    int hoogte;
    static int counter = 0;

    const int PLOTRANDLINKS = 10;
    const int BLOKBREEDTE = 20;
    const int BLOKTUSSENRUIMTE = 10;
    const int PLOTRANDBOVEN = 10;

    public Blokje(PictureBox pb, int hoogte)
    {
    rechthoek = pb.CreateGraphics();
    positie = counter;
    counter++;
    this.hoogte = hoogte;
    }
    public void Draw()
    {
    Rectangle r = new Rectangle(PLOTRANDLINKS+(BLOKBREEDTE+BLOKTUSSENRUIMTE)* positie, PLOTRANDBOVEN, BLOKBREEDTE, hoogte);
    Color c = Color.Green;
    Pen p = new Pen(c);

    rechthoek.FillRectangle(new HatchBrush(HatchStyle.ForwardDiagonal, c, Color.White), r);
    rechthoek.DrawRectangle(p, r);
    rechthoek.DrawLine(p, new Point(r.Left-2, r.Top + r.Height / 2), new Point(r.Right+2, r.Top + r.Height / 2));
    }
    }

    [/code:1:1c97376435]

    Greetings,

    ErX.
  • Never mind!

    PictureBox is nu Panel geworden en probleem is verdwenen?

    Al snap ik nog steeds niet hoe dit dan kan????
  • Omdat picturebox een heel ander doel heeft dan waar jij het voor misbruikt.

    de bedoeling is namelijk dat je dat control gebruikt om een (bestaand) plaatje te tonen.
    Als je zou willen doen wat jij beschrijft dan zou je het plaatje dat je aan de picturebox hebt gekoppeld moeten wijzigen ipv de OnPaint te mishandelen.

    Info :
    http://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.aspx

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.