Control bei Laufzeit erstellen und In Array schreiben System.NullReferenceException

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Control bei Laufzeit erstellen und In Array schreiben System.NullReferenceException

    Hallo,

    ich bin neu hier und in VB.
    Ich programmiere gerade Testweise ein kleines TicTacToe.
    Habe nun alles fertig mit einer 3x3 Matrix + KI.

    Ich möchte mein Programm nun so erweitern, dass auch 4x4, 5x5, ... Spiele möglich sind (während der Laufzeit einstellbar).

    Leider bekomme ich meine Buttons, welche ich wähend der Laufzeit erstelle, nicht in ein Array geschrieben.

    Es kommt immer der Fehler:
    Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in TicTacToe.exe aufgetreten.

    Der Fehler tritt in der unten gekennzeichneten Zeile auf.

    Hier ein Auszug aus dem Code

    Quellcode

    1. Dim Field(,) As Button
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. InitButtons(3)
    4. ...
    5. End Sub
    6. Function InitButtons(ByVal size As Integer) As Boolean
    7. Me.Size = New Size(168 + (size * 100), 69 + (size * 100))
    8. Panel1.Size = New Size(size * 100, size * 100)
    9. For I = level To size ^ 2
    10. Field(ToX(I), ToY(I)) = New Button 'Hier tritt der Fehler auf
    11. With Field(ToX(I), ToY(I))
    12. .Name = "Button" + Str(I)
    13. .Location = New Point(100 * (ToX(I) - 1), 100 * (ToY(I) - 1))
    14. .Size = New Size(100, 100)
    15. End With
    16. Panel1.Controls.Add(Field(ToX(I), ToY(I)))
    17. AddHandler Field(ToX(I), ToY(I)).Click, AddressOf Button_Click
    18. Next
    19. level = size
    20. End Function

    Ich hoffe es hat jemand eine Idee voran es hakt.

    Grüße aus Fulda.

    Julian
    Da scheint wohl irgendwas Nothingzu sein. Debugge mal, lass die Exception fliegen und fahre dann mit dem Cursor in dieser Zeile über die einzelnen Teile, dann siehst Du, was genau Nothingist. Jedoch erscheint mir hier generell schon die Struktur ein Problem zu sein. Was genau ist der Plan?
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    JulianS schrieb:

    Dort steht also Field(1,1) = New Button. Field ist in diesem Moment noch NULL.
    Dann springt das Programm an der Stelle aus.


    Und was ist dir daran unklar? Du willst einen Bereich beschreiben, der gar nicht existiert, deswegen gibt es eine Exception.
    Gib vorher die Dimensionen vor:

    VB.NET-Quellcode

    1. Dim Field(5,5) as Button

    Ok, danke für die Antworten.

    Ich bleib jetzt erstmal bei meinem nun statisch deklarierten 2. dimensionalen Array.

    Da ich sowieso das Meiste nochmal anpassen muss, dass es auch auf eine beliebig großen Matrix funktioniert, werde ich mir erst dann überlegen, wieviel Aufwand es macht, auf ein 1. dimensionales Array/List umzusteigen.

    @sonne75: Mit Mod und \ arbeite ich sowieso schon, um mir die Schleife für die 2. Dimension zu sparen.

    Vlt. hört ihr nochmal von mir.

    Grüße aus Fulda.

    Julian

    Offtopic: Wie markiere ich das Thema als Erledigt?