Jag håller på med ett "sänka skepp" -spel, och på grund av att jag är riktigt dålig på hela det objektorienterade tänket i vb.net har jag fastnat i grafikdelen. du måste loopa igenom varje cell i cGrid och skapa en ny gRuta i varje. I c# skulle jag göra så här Mjo, fast det fungerar inte bättre för det, variabeln deklareras utanför någon sub eller function eller liknande, och där kan man inte skriva annan kod än deklarera variabler och liknande. <b>Dessutom är det inte problemet med hur jag gör för att deklarera variabeln egentligen, tror jag.</b>"Object reference not set to an instance of an object"
Jag vill rita ut ett rutmönster men för att lättast kunna kontrollera vilka rutor man klickar på har jag försökt lösa det med att göra rutorna till en egen klass som var och en innehåller info om sig själva (om det är ett skepp på rutan osv).
Här är ett utdrag av den viktigaste koden jag använder:
Public Class gridControl
Public conSize As Integer = 10 'variabel som håller i storleken på fältet
Dim cGrid(conSize, conSize) As gRuta
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
cGrid(0, 0).gShip = True
End Sub
End Class
Public Class gRuta
Public gShip As Boolean
Public x, y As Integer
Public Ruta As Rectangle
End Class
Men när jag kör den här koden hamnar jag i "cGrid(0,0).gShip = True" -raden och får klagomålet: "Object reference not set to an instance of an object.".
Så vitt jag förstår måste nånting deklareras som New nånstans, men det går tydligen inte att deklarera cGrid(conSize,conSize) med New, då den klagar på att man inte får göra det med indexerade variabler.
Hur ska jag göra, tänker jag åt skogen? Jag kanske borde lägga ner mitt programmerande helt, eftersom jag aldrig får pli på det här, hehe.
Om du hinner och orkar får du gärna svara även lite exempelkod.
/Jonte
Sv: "Object reference not set to an instance of an object"
for (int i=0;i<conSize;i++) {
for (int j=0;j<conSize;j++) {
cGrid[i, j] = new gRuta();
}
}
Sv:"Object reference not set to an instance of an object"
Dessutom är det inte problemet med hur jag gör för att deklarera variabeln egentligen, tror jag. Och att skriva "Dim cGrid(conSize, conSize) As New gRuta" ger oavsett koden runtomkring ett fel, eftersom man inte tydligen kan deklarera indexerade variabler.
Men tack ändå =)Sv: "Object reference not set to an instance of an object"
Njae, egentligen inte, grejen är att du har deklarerat matrisen (eller vad du nu kallar den), men den innehåller fortfarande ingenting annat än Nothing eftersom du inte satt nåt dit.. så du måste göra nåt i stil med
Dim i As Integer
For i = 0 To conSize - 1
Dim j As Integer
For j = 0 To conSize - 1
cGrid(i, j) = New gRuta
Next j
Next i
för att ha nånting i de enskilda cellerna som du sen kan använda