Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: VB5 -> VB.Net

setä [11.03.2011 19:02:51]

#

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.

Grez [11.03.2011 19:12:49]

#

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.

setä [12.03.2011 09:12:10]

#

Nimen omaan generointi ohjelmallisesti mutta miten niihin viitataan kun ei ole indeksejä.

Grez [12.03.2011 09:38:25]

#

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

setä [12.03.2011 10:16:01]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta