Probleme mit ClientSize
-
Hallo hustbear
Ja das ist mir bewusst.
Die aufgabe Heißt,
einen Kreis bzw Rechteck von der mitte eines Panels mit Hilfe eines Timers
Vergrößern zu lassen bis sie den Rand erreicht haben und dann zurück.Der code war ein ansatz von mir der ja ansich funktioniert nur das er es verkleinert. Nur zum Vergrößern komme ich nicht drauf wie ich das anweisen soll,
Habe es schon mit ClientSize.Top/2 versucht bekomme ich fehler.
Weil So wie es jetzt ist Mit Location X und Y beginnt das Zählen ja vom rand an.
Also das Panel ist 300x300 da wäre doch die Mitte 150 laut koordinaten oder n´bin ich schon falsch?
weil wenn ich die Location X und Y so eingebe Fängt die Figur entweder rechts unten an oder links oben.Ich steh iwie total aufn schlauch.
-
Hallo
Nur so ein kleiner Denkanstoß:
- Mitte deiner Oberfläche bestimmen
- kleinste Größe des Rechtecks bestimmen, und auf den Mittelpunkt legen
- Rechteck mit +x vergrößern bis Rand erreicht
- merken das nun verkleinert wird
- Rechteck mit -x verkleinern
- merken das vergrößert wird
- und zurück zu 3)
Im großen und Ganzen schaut's gar nicht schlecht aus, du müsstest dir halt noch merken in welche Richtung gerade gelaufen wird und anhand dessen + oder - rechnen.
PS: die Umschaltung zwischen +/- nur an den Grenzen durchführen.
Mag Marco
-
jonnywhite7 schrieb:
Weil So wie es jetzt ist Mit Location X und Y beginnt das Zählen ja vom rand an.
Also das Panel ist 300x300 da wäre doch die Mitte 150 laut koordinaten oder n´bin ich schon falsch?
weil wenn ich die Location X und Y so eingebe Fängt die Figur entweder rechts unten an oder links oben.- Du könntest mit einem Rechteck anfangen dessen Location die Mitte des ClientRectangle ist und dessen Grösse (0, 0) ist.
this.ClientRectangle
ist nicht unbedingt das selbe wiepanel1.ClientRectangle
. Kann sein, muss aber nicht sein. Wenn du im Panel zeichnest, dann solltest du vermutlich auch das Panel zum Einpassen des Rechtecks verwenden.
-
Alsi ich steh auf dem schlauch jungs versteh nur Bahnhof grad.
wenn ich die Mitte mit ClientSize angeben so zB: X = panel1.Width / 2; und Y = panel1.Height / 2;
Dann bei dem bereich.Location= new Piont(bereich.Location,X, bereich.Location.Y);
eingebe ist der kreis oder die figur immernoch links oben am rand
ich raff es einfach nicht
sry
-
jonnywhite7 schrieb:
bereich.Location= new Piont(bereich.Location,X, bereich.Location.Y);
Ernsthaft jetzt? Willst du darauf wirklich ne Antwort?
ps: Poste kompilierbaren Code, 1:1 den der bei dir Probleme macht. Copy+Paste aus deiner IDE. Sonst interessiert das hier bald keinen mehr.
-
Entschuldigung Lieber Hustenbaer.
Aber ich sitze jetzt schon seid Tagen davor durchforste Die hilfe Datenbank von Visual ohne wirklichen erfolg.
Der folgende Code funzt einwandfrei das Rechteck läuft von außen nach innen,
int aufrufe; Rectangle bereich; Pen stift; Graphics zeichenflaeche; public Form1() { InitializeComponent(); //aufrufe auf 0 setzen aufrufe = 0; //den Client-Bereich beschaffen bereich = panel1.ClientRectangle; //den Stift auf schwarz setzen stift = new Pen(Color.Black); //die Zeichenfläche beschaffen zeichenflaeche = this.panel1.CreateGraphics(); } private void timer1_Tick(object sender, EventArgs e) { zeichenflaeche.Clear(BackColor); //wenn aufrufe kleiner ist als 22, wird das Rechteck gezeichnet if (aufrufe < 5) { //jeweils 10 von der Höhe und Breite dazu bereich.Width = bereich.Width - 10; bereich.Height = bereich.Height - 10; //den Startpunkt setzen bereich.Location = new Point(bereich.Location.Y+5, bereich.Location.X+5); //ein Rechteck zeichnen zeichenflaeche.DrawRectangle(stift, bereich); //aufrufe erhöhen aufrufe++; } }
aber wenn ich die Daten ändere zum bsp so:
anstatt - für abziehen nehme ich + zum daraufrechnen.
aber im bereich Location komme ich nicht klar.
habe auch versucht die X und Y koordinate direkt zu zuweisen mit ClientSize,
X = panel1.Clientsize.Width /2, oder Y = panel1.ClientSize.Height /2,
jedoch ohne erfolg.
hoffe du kannst mir folgen
-
Ja, ich kann dir folgen.
Du mir aber anscheinend nicht.
-
ich könnte auf die vorhanden daten zugreifen
-
so ich nochmal
und zwar habe ich jetzt mal versucht auf die vorhanden schaltflächen zuzugreifen, auch auf die vorggebenen größen.
aber wenn ich auf die Schaltfläche klicke passiert nix,
könnte mir da jemand einen nützlichen hinweiß geben bitte,
bool kleiner; Int32 ausgangsGroesse; Int32 position; Int32 zaehler; private void buttonBewegen_Click(object sender, EventArgs e) { if (radioButtonKreis.Checked != true) { Pen stift = new Pen(linienfarbe); zeichenflaeche = panel1.CreateGraphics(); kleiner = false; switch (trackBar1.Value) { case 1: ausgangsGroesse = 125; break; case 2: ausgangsGroesse = 100; break; case 3: ausgangsGroesse = 75; break; } position = ausgangsGroesse; if (timer1.Enabled) { zaehler = Convert.ToInt32(numericUpDownZaehlerTimer.Value); timer1.Stop(); } else timer1.Start(); } } private void timer1_Tick(object sender, EventArgs e) { if (kleiner) position--; else position++; if(position == ausgangsGroesse) { timer1.Stop(); if(position > panel1.Width/2) kleiner = true; if(position < 1) kleiner = false; } }
-
Hallo,
Ich habe den Code soweit es geht fertig das einzigste was mir jetzt noch Probleme macht sind die Linien könne mir da wer ein Tipp geben wie ich die Linie in die Mitte des Panels bekomme?
if (radioButtonLinie.Checked == true) { var centerx = panel1.Bottom +10; var centery = panel1.Top +10; timer1.Interval = Convert.ToInt32(numericUpDownTimer.Value * 1000); e.Graphics.DrawLine(Pens.Black, centerx - pos, centery - pos, pos * 2, pos * 2); } }
So wie er jetzt ist wird die Linie rechts oben am Rand gezeichnet leider
wäre für jede Hilfe Dankbar