Fehler im Code



  • Was ist hier falsch ?

    private void button1_Click(object sender, EventArgs e)
            {
                Graphics my;
    
                    my.DrawRectangle(new Pen(Brushes.AliceBlue, 10), 20, 20, 100, 100);
    
                    my.DrawRectangle(new Pen(Brushes.Blue, 10), 40, 40, 100, 100);
    
            }
    


  • Nicht dein Ernst oder?
    Ich kapier nich warum die Leute es nicht hinbekommen erstmal selbst nach dem Fehler zu suchen, anstatt so kack-frech ihren Code hier reinzustellen und zu erwarten das wir ihre Fehler lösen.
    Such gefälligst selbst nach dem Fehler!



  • use of unassigned local variable my



  • Immer im Paint Ereignis zeichnen!



  • private void button_paint(object sender, PaintEventArgs e)
            {
                Graphics my;
    
                my.DrawRectangle(new Pen(Brushes.AliceBlue, 10), 20, 20, 100, 100);
    
                my.DrawRectangle(new Pen(Brushes.Blue, 10), 40, 40, 100, 100);
    
            }
    

    selbe Fehlermeldung !



  • Mir fallen drei Fehler auf. 😉


  • Administrator

    Fragwürdig, ob man so jemandem überhaupt helfen kann ...

    @blurry333,
    Hast du deiner Variable my ein Objekt zugewiesen? Nein? Wow! Wahnsinnig schwer zu verstehender Fehler. Die Variable my referenziert gar kein Objekt, weil sie nicht initialisiert wurde. Steht auf Seite 1 eines jeden Tutorials/Buches/sonstwas über C#.

    Theta hat dir auch noch einen Hinweis gegeben. Der Hinweis hat nicht direkt mit deinem Fehler zu tun, sondern ist nur ein gut gemeinter Rat. Dein Fehler ist sowas von trivial (sogar für einen Anfänger), dass theta dies wohl schlicht ignoriert hat.
    Statt einfach nun im Paint-Event deinen Code hinzukritzeln, hättest du vielleicht mal auf der MSDN nachschauen sollen, wie die Signatur genau aussieht und was sie enthält?
    http://msdn.microsoft.com/en-us/library/system.windows.forms.painteventargs.aspx
    http://msdn.microsoft.com/en-us/library/system.windows.forms.painteventargs.graphics.aspx

    Vielleicht mal schauen, wie sie funktioniert, in dem man den dazugehörigen Text liest und sich das Beispiel ansieht?
    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.paint.aspx

    Ich weiss, lesen ist schwierig und wahnsinnig aufwändig ... 🙄

    Grüssli



  • Painteventargs e;

    e.graphics.drawrectangle( )

    Ok so gehts.

    Aber gehts nicht anders ?



  • Dravere schrieb:

    Fragwürdig, ob man so jemandem überhaupt helfen kann ...

    @blurry333,
    Hast du deiner Variable my ein Objekt zugewiesen? Nein? Wow! Wahnsinnig schwer zu verstehender Fehler.

    Graphics my=new Graphics();

    leider ist das nicht möglich. Wie soll ich es sonst machen ?


  • Administrator

    blurry333 schrieb:

    Aber gehts nicht anders ?

    Wieso willst du es anders haben? Gefällt es dir nicht, wenn etwas funktioniert? 😕

    blurry333 schrieb:

    Graphics my=new Graphics();
    leider ist das nicht möglich. Wie soll ich es sonst machen ?

    Wie es erwähnt wurde. Oder hast du womöglich noch nie was von Variablenzuweisung gehört? So Dinge wie:

    Garphics my = e.Graphics;
    

    Dann solltest du D R I N G E N D vernünftig C# lernen, bevor du irgendetwas weiteres machst.

    Es steht übrigens auch noch vieles in der Dokumentation zur Klasse Graphics . Hat auch unten ein Beispiel, wo der Tipp von theta bereits enthalten wäre. Aber wer will schon die Dokumentation lesen. Lieber in einem Forum stundenlang auf einem dummen Moderator warten, welcher eine Antwort gibt, statt effizient zu arbeiten und die Dokumentation zu lesen...

    Grüssli



  • Dieser Thread zeigt das auch c-plusplus.net Regeln haben sollte:

    Zu diesem Thread sei gesagt, siehe:
    http://www.mycsharp.de/wbb2/thread.php?threadid=26594
    Punkt 1.1. Erst suchen und in die Doku schauen, dann posten
    Punkt 1.1.1. Nicht nach Grundlagen fragen
    Punkt 3. Aussagekräftigen Titel wählen
    Punkt 4c. Wälzt nicht eure Aufgaben auf uns ab
    Punkt 5. Problem genau beschreiben, inkl. genauer Fehlermeldung

    Solch dumm Dreistigkeit die hier manchmal an den Tag gelegt wird ist echt erschreckend.



  • Garphics my = e.Graphics;

    sorry aber für mich ist das eine Instanz vom Typ Graphics;
    Schließlich wird das Objekt my hier initialisiert.
    So kenn ichs aus C++;



  • Das ist aber kein C++ -> Grundlagen


  • Administrator

    blurry333 schrieb:

    So kenn ichs aus C++;

    C# ist aber nicht C++! Die Sprachen haben reichlich wenig gemein. Sie haben nur beide eine C ähnliche Syntax und das war es schon. 🙄

    Grüssli



  • C# != C++

    In C# gibt es entweder Referenztypen (class) oder Wertetypen (struct).
    Bei einer einfachen Zuweisung eines Klassentypen wird eben nur die Referenz kopiert.
    In dem Fall kann man quasi von einem Aliasnamen sprechen, denn nach

    Graphics my = e.Graphics;
    

    referenzieren sowohl die Variable 'my' als auch die Eigenschaft 'e.Graphics' (bzw. die dahinter stehende Membervariable) auf dasselbe Graphics-Objekt.

    In C++ würde dagegen dann der entsprechende Copy-Constructor dafür aufgerufen werden, da dies dann äquivalent zu

    Graphics my(e.Graphics);
    

    wäre. Und diese Syntax gibt es nun mal in C# nicht, da dort neue Objekte immer mittels des Schlüsselwortes 'new' erzeugt werden!

    Edit: Und damit man nicht fälschlicherweise in C# dieses Mißverständnis begeht, wird extra die Warnung 'use of unassigned local variable' erzeugt (ansonsten würde die lokale Variable mit dem Standardtype für Referenzen, d.h. null, initialisiert und es käme eine Laufzeitausnahme (NullReferenceException) bei Zugriff darauf).

    blurry333, nach welchen Buch lernst du denn C#?


Log in to reply