Alkuun pahimpia kompastuskiviä on kontrollien indeksoimattomuus VB.Net:ssä.Miten esim. seuraava koodataan VB.Net:ssä.
On kolme labelia, VB5:ssä nimetty lblN ja indeksoitu 0, 1 ja 2. Alussa kunkin Caption = "0". Kun klikkaan labelia, kasvaa sen lukema yhdellä ja toimii koodilla:
Private Sub lblN_Click(Index As Integer) lblN(Index) = lblN(Index) + 1 End Sub
Miten VB.Netissä ? Jos labeleita on vain kolme, ne voi tietysti nimetä eri nimille ja tehdä jokaiselle koodi erikseen. mutta jos niitä on kymmeniä tai satoja niin pakko tehdä jollain muulla tavalla.
Voi ne tehdä ihan taulukkona. Mutta graafisella editorilla ei voi tehdä sellaista. Yleensä jos tarvitaan vaikka sata, niin ne olisi joka tapuaksessa helpompi generoida ohjelmallisesti.
Nimen omaan generointi ohjelmallisesti mutta miten niihin viitataan kun ei ole indeksejä.
Niissä on indeksit jos teet niihin indeksit. Pitäisi varmaan etsiä ketju johon viimeksi kirjoitin esimerkin.
Edit: En nyt löytänyt, niin kirjoitin uuden
Public Class Form1 Dim lblN As New Dictionary(Of Integer, Label) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer Me.SuspendLayout() For i = 0 To 99 Dim l = New Label() l.AutoSize = True l.Location = New System.Drawing.Point(0, 20 * i) l.Name = "lblN_" & i l.Size = New System.Drawing.Size(39, 13) l.TabIndex = i l.Text = "0" lblN(i) = l Me.Controls.Add(l) AddHandler l.Click, AddressOf lblN_Click Next Me.ResumeLayout() End Sub Private Sub lblN_Click(ByVal sender As Label, ByVal e As System.EventArgs) sender.Text = (CInt(sender.Text) + 1).ToString() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ix As Integer Dim r As New Random() ix = r.Next(99) MessageBox.Show("LblN(" & ix & ") arvo on " & lblN(ix).Text) End Sub End Class
Suurkiitokset, Grez! Eipä tuo hirveän pahalta näytä. Tuohon kielioppiin pitäisi vaan syventyä. VB5:ssä on erinomainen helppi ja editori ja lisäksi vielä VB on Line. Asennanpa tuon Expressin uudelleen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.