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

  • geschlossen
  • C#

  • Tonix
  • 2251 Aufrufe 7 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

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

    Hi
    ich wollt eine Paint-Prozedur in eine KeyPress Prozedure einbinden und die darüber aufrufen lassen

    das sie dann so aus:

    Quellcode

    1. private void Form1_KeyPress(object sender, KeyPressEventArgs e)
    2. {
    3. if (e.KeyChar == 111)
    4. {
    5. Kreis_Paint();
    6. }
    7. }
    8. private void Kreis_Paint(PaintEventArgs e)
    9. {
    10. Pen schwarz = new Pen(Color.Black);
    11. e.Graphics.DrawEllipse(schwarz, 100, 100, 10, 10);
    12. }
    Alles anzeigen

    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
    Dort unter den Fichtelwurzeln, hört man oft die Wichtel furzen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tonix ()

  • du musst dem Prozeduraufruf für Kreis_Paint ein Argument übergeben:

    in dem if-Block sollte dann so etwas stehen:

    Quellcode

    1. Rectangle r = new Rectangle();
    2. PaintEventArgs pea = new PaintEventArgs(this.CreateGraphics(), r);
    3. 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:

    Quellcode

    1. Rectangle r = new Rectangle();
    2. r.Left = 0;
    3. r.Top = 0;
    4. r.Right = 100;
    5. r.Bottom = 100;
    6. PaintEventArgs pea = new PaintEventArgs(this.CreateGraphics(), r);
    7. Kreis_Paint(this, pea);
    Wo ist Iphigenie?
  • Sorry aber so ganz versteh ich das nie

    Quellcode

    1. Rectangle r = new Rectangle();

    Wozu brauch ich das Rechteckt? denk mal du hast einfach verwechselt das ich ein Kreis will oder?

    Quellcode

    1. 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

    Quellcode

    1. private void Kreis_Paint(PaintEventArgs e)
    2. {
    3. Pen schwarz = new Pen(Color.Black);
    4. e.Graphics.DrawEllipse(schwarz, 100, 100, 10, 10);
    5. }
    Dort unter den Fichtelwurzeln, hört man oft die Wichtel furzen
  • 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.
  • 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.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ts-m ()

  • 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
    Dort unter den Fichtelwurzeln, hört man oft die Wichtel furzen