picturebox und paint ereignis



  • ahoi,

    Ich wollte die picturebox dazu nutzen ein paar dinge zu zeichnen. Das alles erfolgt in 2 schritten.
    1. beim starten wird ein schachfeld gezeichnet
    2. in einer schleife werden einzelne kästchen des schachfeldes ge- bzw zurückgesetzt

    Um das schachfeld zu zeichnen, habe ich die onPaint methode genutzt, da sie ja direkt beim erstellen des PB aufgerufen wird! perfekt also.

    Nun habe ich eine FKT, die die parameter x und y besitzt, welche die eindeutige position im feld angeben.
    keine ahnung wie ich das nun mache, da ich bisher immer nur die onPaint methode zum zeichnen genutzt habe, diesmal aber nicht, da ich nicht will, dass das brett ansich jedesmal neu gezeichnet wird!

    Wie kann ich also ausserhalb der onPaint methode in meine PB zeichnen?



  • Du zeichnest das komplette Schachfeld immer über OnPaint(). Und wenn neugezeichnet werden soll, dann nimmt man Invalidate(); Wenn nur ein Ausschnitt dann Invalidate(Rectangle).

    Die PictureBox ruft immer OnPaint auf wenn es neugezeichnet werden muss, also z.B.: (unter XP und älter) wenn es von einem anderen Fenster überdeckt wurde, vom Minimierten Zustand den "Normal" Zustand übergeht. Es bringt also nichts nur einmal das Schachfeld zu zeichnen und dann darach nur noch die Änderungen außerhalb von OnPaint() (also irgendwo in der Klasse). [html]*[code]Es geht zwar aber [/code]*Man tut es nicht.[/html]

    Sonst stellt man den Zustand über ein Array oder über Liste von Spielfiguren da, die dann in OnPaint() neugezeichnet werden.



  • also ich kann per button invalidate aufrufen und er zeichnet auch neu. bis jetzt aber alles. ich möchte aber nur ein rechteck neuzeichnen, also muss ich als parameter das rechteck angeben richtig?

    r = RectangleF(50,20*t,40,50*t);
    ..
    g->FillRectangle(b,r);
    

    das steht im onpaint. wie kriege ich nun dieses rechteck neugemalt?



  • wanderameise schrieb:

    wie kriege ich nun dieses rechteck neugemalt?

    Genau so.

    Wenn du dass

    wanderameise schrieb:

    r = RectangleF(50,20*t,40,50*t);
    ..
    g->FillRectangle(b,r);
    

    in Onpaint einfügst müsste der jedesmal ein neues Rechteck zeichnen wenn es neugezeichnet werden soll. (Wenn jedoch t == 0 ist dann sieht man nichts)

    Wenn du nur ein Rechteck neuzeichnen möchstest, schaust du in e->Graphics->IsVisible(RectangleF) nach ab es gezeichnet werden soll.


Log in to reply