Gå til innhold

Trenger litt hjelp med matriser og prosedyrer


Anbefalte innlegg

Hei! :)

 

Jeg trenger litt hjelp. Jeg skal lage to prosedyrer; den ene skal fylle en matrise med whatever egentlig, og den andre prosedyren skal skrive ut innholdet i matrisen i en listboks. Jeg prøver, men jeg bommer (ganske mye) er jeg redd:

 

-----------------

Public Class Form1 'prosedyre 1 med matrise

Private Sub Fargevalg()

Dim farge(3) As String

 

farge(0) = "Blå"

farge(1) = "Rød"

farge(2) = "Gul"

farge(3) = "Grønn"

 

End Sub

----------------

Private Sub skrivUt(ByVal matrise) 'prosedyre 2

Dim farge

For Each farge In Fargevalg()

ListBox1.Items.Add(farge)

 

Next

End Sub

----------------

Private Sub Button1_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button1.Click 'kaller prosedyre 2

skrivUt()

ListBox1.Items.Add("farge")

End Sub

 

End Class

----------------

 

Men jeg er nok på viddene ja, noen som har peiling? :cry:

Lenke til kommentar
Videoannonse
Annonse

variablen 'farge' faller ut av scope.

 

Public Class MyForm 
Inherits System.Windows.Forms.Form

 Private farge() As String

 Private Sub FargeValg
ReDim farge(3)
farge(0) = "Blå"
farge(1) = "Rød"
farge(2) = "Gul"
farge(3) = "Grønn"
 End Sub
 Private Sub SkrivUt()
For Each item As String In farge
  ListBox1.Items.Add(item)
Next
 End Sub
End Class

Lenke til kommentar

Hei, takk for svar! :)

 

Når jeg prøver denne koden;

___________________

 

Public Class Form1 Private farge() As String

-------------------

Private Sub Fargevalg()

ReDim farge(3)

 

farge(0) = "Blå"

farge(1) = "Rød"

farge(2) = "Gul"

farge(3) = "Grønn"

 

End Sub

-------------------

Private Sub skrivUt()

Dim farge

For Each item As String In farge

ListBox1.Items.Add(item)

 

Next

-----------------------

End Sub

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

skrivUt()

ListBox1.Items.Add(farge)

End Sub

End Class

_________________________

 

...får jeg opp følgende advarsel:

"Warning 1 Variable 'farge' is used before it has been assigned a value. A null reference exception could result at runtime."

 

Jeg veit jeg trenger teskje-metoden, men hvorfor virker ikke koden? Jeg før kjørt programmet, men ingenting skjer når jeg trykker på button1, får bare opp en feilmelding som peker på det advarselen kommenterte. Men som nybegynner veit jeg ikke hvordan jeg får dette til å virke.

Jeg trodde jeg nå hadde kalt opp riktig?

Endret av Omicron2
Lenke til kommentar

For de første, en prosedyre returnerer _ALDRI_ en verdi.

Det andre så har du bare Dim farge og ingenting mer.

 

Function FargeListe() As String() 'returnerer ett String array med fargeverdiene

 

 

Redim FargeListe(3)

FargeListe(0) = "Blå"

FargeListe(1) = "Rød"

FargeListe(2) = "Gul"

FargeListe(3) = "Grønn"

 

 

End Function

 

Sub SkrivUt()

 

 

'Nå vil vi bruke hver forekomst i listen FargeListe

'fargeliste er en funksjon som vi har laget og returnerer listen med fargekoder.

For Each farge As String In FargeListe()

ListBox1.Items.Add(farge)

Next

 

 

End Sub

 

Sub Button1_Click() Handles Button1.Click

 

 

SkrivUt()

 

 

End Sub

 

Vennligst LES og PRØV og forstå hva jeg gjor annerledes i koden min, for å faktisk lære deg hva som ble gjort feil.

Lenke til kommentar

Den "korrekte" løsning, aldri for tidlig å legge seg til gode vaner:

 

Først et value object for farge, fordi eksplisitte navn ruler:

Public Class Farge
Public _navn As String
Public ReadOnly Property Navn()
	Get
		Return _navn
	End Get
End Property

Public Overrides Function ToString() As String
	Return Navn
End Function

Public Sub New(ByVal n As String)
	_navn = n
End Sub
End Class

 

En funksjon som lister opp fargene, for vi vil vel ikke blande innhold og presentasjon, vil vi vel?:

Public Class FargeGenerator
Public Function GenererFargeListe() As List(Of Farge)
	Dim l As New List(Of Farge)
	l.Add(New Farge("Blå"))
	l.Add(New Farge("Gul"))
	l.Add(New Farge("Rød"))
	Return l
End Function
End Class

Så binder vi disse i GUI

Private Sub btnFyllFarge_Click(ByVal s As Object, ByVal e As EventArgs) Handles btnFyllFarge.Click
Dim fargeGenerator As New FargeGenerator
lstFarge.DataSource = fargeGenerator.GenererFargeListe
End Sub

Endret av MailMan13
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...