Laden...

Graphics

Erstellt von alf468 vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.406 Views
A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren
Graphics

Ich möchte gerne einen Kreis zeichnen und dieses mit den Tasten bewegen.Ist soweit auch alles kein Problem nur wenn ich später einen zweiten Kreis hinzufüge ist der erste wieder weg.

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Right)
            {
                this.Refresh();
                x+=10;
                g.FillEllipse(b, this.x, this.y, 20, 20);
            }
        }

Die Methode refresh() ist sicher nicht die richtitge für sowas.Aber wie macht man sowas?

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo alf468,

du darfst nicht in KeyDown zeichen, sondern musst alle Zeichenoperationen in Paint ausführen. Ich habe das gerade in zeichnen von Linien und Rechtecken beschrieben.

herbivore

A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Ändert aber nix an meinem Problem.Ich will den Kreis verschieben per Tastendruck.Wenn der Kreis ganz Rechts ist soll ein weiterer Kreis gezeichnet werden.Der alte Kreis soll aber dableiben.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo alf468,

naja, so wie es jetzt ist, hast du noch ein paar Probleme, die du vielleicht noch gar nicht merkst. Du solltest also auf jeden Fall so umstellen, wie ich geschrieben habe.

Wenn du zwei Kreise haben willst, musst du zwei Kreise zeichnen, also zweimal FillEllipse aufrufen.

herbivore

0
767 Beiträge seit 2005
vor 18 Jahren

probiers mal mit sowas in der art:


private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    // hier einen array, liste oder sonstwas mit Kreisen verwalten
    Invalidate();    
}

private void Paint(object sender, PaintEventArgs e)
{
    // und hier alle kreise zeichnen
}

die Paint() Methode kannst du über den designer erstellen genau wie die keydown methode.

Invalidate() bewirkt, dass das fenster neu gezeichnet wird. Du kannst auch eine Klasse von Control ableiten, das Control ins Fenster legen und nur in dem Control zeichnen (myControl.Invalidate() ), dann musst du aber OnPaint des controls überschreiben, oder den Paint() event an das control hängen.

loop:
btst #6,$bfe001
bne.s loop
rts