Prozeduren aufrufen "Keine Überladung für..." geschlossen 

Status
Für weitere Antworten geschlossen.

Tonix

Registered +
Registriert
März 2008
Beiträge
94
Hi
ich wollt eine Paint-Prozedur in eine KeyPress Prozedure einbinden und die darüber aufrufen lassen

das sie dann so aus:
Code:
 private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 111)
{
Kreis_Paint();
}
}
private void Kreis_Paint(PaintEventArgs e)
{
Pen schwarz = new Pen(Color.Black);
e.Graphics.DrawEllipse(schwarz, 100, 100, 10, 10);
}
dabei kommt der Fehler "Keine Überladung für die Kreis_Paint-Methode nimmt 0 Argumente an."

Ich weiß das man Variablen und Bezeichner an die Prozedur übergeben muss wenn man sie aufrufen will, aber ich hab keine Idee welche ich hier angeben soll.
Ich hatte bis jetzt auch nie das Problem
Hat jemand eine Ahnung wie ich das Problem lösen kann?

danke im Vorraus
mfg Tonix
 
Zuletzt bearbeitet von einem Moderator:
du musst dem Prozeduraufruf für Kreis_Paint ein Argument übergeben:

in dem if-Block sollte dann so etwas stehen:
Code:
Rectangle r = new Rectangle();
PaintEventArgs pea = new PaintEventArgs(this.CreateGraphics(), r);
Kreis_Paint(this, pea);

es kann sein, dass du dem Rechteck-Objekt "r" noch left, top, width und height zuweisen musst.

sieht dann so aus:
Code:
Rectangle r = new Rectangle();
r.Left = 0;
r.Top = 0;
r.Right = 100;
r.Bottom = 100;
PaintEventArgs pea = new PaintEventArgs(this.CreateGraphics(), r);
Kreis_Paint(this, pea);
 
Sorry aber so ganz versteh ich das nie
Code:
Rectangle r = new Rectangle();
Wozu brauch ich das Rechteckt? denk mal du hast einfach verwechselt das ich ein Kreis will oder?
Code:
PaintEventArgs pea = new PaintEventArgs(this.CreateGraphics(), r);
die Zeile versteh ich sogut wie gar nicht, vorallem aber nicht was du mit pea und dem Argument/Variable? "r" willst

sofern mögliche würde es mir am meisten helfen wenn ich die argumente die ich brauche direkt aus dieser Prozedure bekäme
Code:
 private void Kreis_Paint(PaintEventArgs e)
{
Pen schwarz = new Pen(Color.Black);
e.Graphics.DrawEllipse(schwarz, 100, 100, 10, 10);
}
 
Bin jetzt kein C#-Experte, aber wenn ich das richtig verstanden habe wird die Kreis_Paint-Methode ja immer aufgerufen, wenn der Kreis neu gezeichnet werden soll, d.h. du must ihn ja nur mit Invalidate() dazu bringen, das er neu gezeichnet wird. Teste einfach mal ob this.Invalidate() anstatt Kreis_Paint() was hilft.
 
hm ne nicht wirklich
ich will ja nur in die Keypress prozedure die Zeichenprozedure einbring
 
Und wenn du noch ein Update() hinter this.Invalidate() machst? Dann müsste doch das neuzeichnen ausgelöst werden. Ansonsten probiere mal this.Invalidate(true) und Update(), damit auch die Childcontrols neu gezeichnet werden.
 
Zuletzt bearbeitet von einem Moderator:
Du versuchst einen Event direkt aufzurufen. Besser wäre es den Code aus dem Kreis_Paint Event in eine eigene Funktion auszulagern und diese aus dem _KeyPress und _Paint aufzurufen. Damit wäre auch das Problem mit den Parametern gelöst.
Du kannst den Aufruf auch einfach umbauen: Kreis_Paint(sender, e). Das sollte auch tun.
 
Also ich hab das wie ts-m das beschrieben hat.
Am anfang des quelltexte Kreis1 als Rectangle definiert. Anschließent im Form1_Paint e.graphic.drawEllips(schwarz,kreis1); eingegebn und auf der KeyDown Prozedure die Werte für Kreis1 festgelegt und über this.Invalidate(kreis1); den kreis zeichnen lassen.
Das funzt so genau wies soll
d.h.
-Close-

danke an alle dich sich über mein Problem gedanken gemacht haben
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten