Objektorientierung verloren :-(

06/03/2008 - 21:55 von Peter Pippinger | Report spam
Hallo NG,

ich habe mir mal ein kleines Konstrukt zusammengebastelt.
Allerdings kann ich mir nicht vorstellen, warum das Objekt der Klasse
stern nicht im Timer-Tick làuft.
Die beiden Punkte direkt nach dem Instanzieren des Objekts (50,50 /
55,55) erscheinen.
Der Punkt "aus dem Timer" (60,60) wird nicht ausgegeben. (Der Timer
tickt. Hab ich mit MessageBox geprüft)

Kann mir bitte jemand erklàren, was ich da falsch mache?

Vielen Dank für jeden Tip!

Hier der Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Bitmap bmp;
public Graphics grafik;
public stern star;

public Form1()
{
InitializeComponent();

bmp = new Bitmap(700, 500);
pb_zeichenbereich.Image = bmp;

grafik = Graphics.FromImage(bmp);
grafik.SmoothingMode = SmoothingMode.AntiAlias;
star = new stern();

star.zeichnen(grafik, 50, 50);
star.zeichnen(grafik, 55, 55);

timer1.Enabled = true;

}

public void timer1_Tick(object sender, EventArgs e)
{
star.zeichnen(grafik, 60, 60);
}
}

public class stern
{
public void zeichnen(Graphics grafik, float x, float y)
{
// Punkt zeichnen
System.Drawing.Brush pinsel = new
System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(255, 0, 0,
0));
grafik.FillEllipse(pinsel, x, y, 3, 3);
}
}
}
 

Lesen sie die antworten

#1 Elmar Boye
06/03/2008 - 23:47 | Warnen spam
Peter Pippinger schrieb:
ich habe mir mal ein kleines Konstrukt zusammengebastelt.



Leider widerspricht die Bastelei jeglicher Konvention,
wie ein Steuerelement funktionieren sein sollte.

Kann mir bitte jemand erklàren, was ich da falsch mache?



Zeichenereignisse finden grundsàtzlich im Paint Ereignis statt.

Ums kurz zu machen mal Dein Stern aus den drei Ameisen
als "Steuerelement" implementiert.

Und damit spàter weitere "Punkte" hinzukommen können,
habe ich die exemplarisch in eine Auflistung ausgelagert.

Allerdings fehlt da noch das eine oder andere für ein
"richtiges" Steuerelement.

Ich würde Dir empfehlen Dich zunàchst mal mit den
Grundlagen auseinanderzusetzen, ein Einstiegspunkt wàre:
http://msdn2.microsoft.com/de-de/library/5437aee4(VS.85).aspx

Gruß
Elmar

// aus InitializeComponent
this.stern.Location = new System.Drawing.Point(10, 10);
this.stern.Name = "stern";
this.stern.Size = new System.Drawing.Size(100, 100);
this.stern.Sternchen.Add(new System.Drawing.Rectangle(50, 50, 3, 3));
this.stern.Sternchen.Add(new System.Drawing.Rectangle(55, 55, 3, 3));
this.stern.Sternchen.Add(new System.Drawing.Rectangle(60, 60, 3, 3));
this.stern.TabIndex = 0;


public class Stern : System.Windows.Forms.Control
{
List<Rectangle> _sternchen = new List<Rectangle>();

public Stern()
{
base.SetStyle(ControlStyles.AllPaintingInWmPaint
| ControlStyles.UserPaint
| ControlStyles.ResizeRedraw, true);
base.SetStyle(ControlStyles.Selectable, false);
}

protected override Size DefaultSize
{
get { return new Size(100, 100); }
}

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<Rectangle> Sternchen
{
get { return this._sternchen; }
}

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (Brush brush = new SolidBrush(Color.Black))
{
foreach (Rectangle rectangle in this.Sternchen)
{
e.Graphics.FillEllipse(brush, rectangle);
}
}
}
}

Ähnliche fragen