Fehlermeldung bei Controlerzeugung (Absoluter Anfänger, kurzer Code)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Fehlermeldung bei Controlerzeugung (Absoluter Anfänger, kurzer Code)

    Hi Leute, ich hab eine Ausbildung zum Anwendungsentwickler begonnen und arbeite mit Visual Basic.
    Ich wollte daheim ein wenig üben und "rumexperimentieren", also hab ich ein Programm geschrieben, dass einfach 4 rote Panels nebeneinander während der Laufzeit erzeugen soll.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim Panels(3) As Panel
    4. For i = 0 To Panels.Length - 1
    5. PnlSpielfeld.Controls.Add(Panels(i))
    6. With Panels(i)
    7. .Size = New Size(32, 32)
    8. .Location = New Point(i * 32)
    9. .BackColor = Color.Red
    10. End With
    11. Next
    12. End Sub
    13. End Class


    Jedoch erhalte ich eine Fehlermeldung innerhalb des "With"-Konstrukts. Er sagt, die .Size beziehe sich auf keine Instanz eines Objekts.
    "System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

    "$W0" war "Nothing"."

    Könnt ihr mir sagen, was ich falsch mache? Vielen Dank im Vorraus.
    Willkommen im Forum.
    Zeile#3 ist eine reine Deklaration/Bekanntgabe. Objekte werden da noch nicht erstellt.
    Füge nach Zeile#5 folgendes ein: Panels(i) = New Panel. Dadurch entstehen tatsächliche Objektinstanzen, die dann bearbeitet werden können.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Zeile#3 ist eine reine Deklaration/Bekanntgabe.
    Nicht ganz richtig - da wird durchaus ein Objekt erstellt, nämlich ein Array von Panels, und zwar eines mit 4 Plätzen.
    Nur die Panels selbst sind nicht erstellt, die 4 Plätze also leer (Nothing).



    @TE: Als angehender Anwendungsentwickler merke:
    Ein Objekt erstellt man (fast immer) mit dem Schlüsselwort New.
    Noch einige solcher unverzichtbarer Weisheiten habe ich hier zusammengestellt: Grundlagen: Fachbegriffe

    Zum Programmieren selbst, also Arbeiten mit deim Werkzeug empfehle ich dieses: VisualStudio richtig nutzen (Google ist nicht deine Mami)
    Vielen Dank, eigentlich ists logisch. Hab auch verstanden, WAS ich falsch gemacht habe.
    Ich hab auch schon wieder ein neues Problem und benutze einfach den gleichen Thread, vielleicht kann mir jemand die Frage beantworten.

    Folgendes Problem, ich zeichne auf meine Form ein "Hintergrundbild" und möchte auf diesen noch ein anderes Bild zeichnen.
    (In dem speziellen Fall ist der Hintergrund ein Strand und das vordere Bild ist ein animiertes Gif, mit einem Vogel)

    Hier der Code:

    VB.NET-Quellcode

    1. Private Sub Init()
    2. x = 0
    3. SpriteBackground = New Bitmap(My.Resources.Strand.png)
    4. SpriteBird = New Bitmap(My.Resources.Vogel.gif)
    5. Draw()
    6. Timer1.Enabled = True
    7. End Sub
    8. Private Sub Draw()
    9. Dim myGraphics As Graphics = Graphics.FromHwnd(Me.Handle)
    10. myGraphics.Clear(Me.BackColor)
    11. myGraphics.DrawImage(SpriteBackground, x, x)
    12. myGraphics.DrawImage(SpriteBird, x, x)
    13. myGraphics = Nothing
    14. End Sub


    Das Problem ist, dass die Animation des GIF's nicht abläuft. Er bleibt immer im ersten Zustand hängen.
    Ist es überhaupt möglich, per "draw" ein animiertes Gif anzeigen zu lassen? oder brauche ich dafür eine Picturebox?
    Jo, nimm auf jeden Fall eine Picturebox.

    Selber zeichnen (OwnerDrawing) ist eine Wissenschaft für sich und setzt vollkommene Beherrschung vielerlei Grundlagen voraus (Vererbungslehre, OOP, Auflistungen, Signaturen, Events, Enums), und mit "vollkommene Beherrschung" ist nicht gemeint, dass man mal was davon gelesen hat.

    Aber wenn du mal 3 Wochen Zeit hast, dich auf breiter Front einzuarbeiten, dann knöpf dir mal das hier vor: OwnerDrawing