Miten tehdään VB2010E:ssä saman nimisten olioiden indeksointi, jotta voidaan käyttää samaa nimeä useammalle oliolle?
Lisäksi onko jollakin tiedossa hyviä sivuja/sivustoja harjoituksia ja/tai tehtäviä/koodeja liittyen VB2010e:siin? jokin ohjekirja/koodikirja voisi myös olla hyvä.
Moi Mope!
näin...
Public Class Form1
Private Structure OlioStruct
Dim xint As Integer
Dim xlng As Long
Dim xstr As String
'jne.
End Structure
Private olio(10) As OlioStruct
'...
End ClassHEPS!
Niin siis meinasin, että kun vanhassa VB6:ssä kun oli useampi saman niminen esim. tekstikenttä, niin täytyi ominaisuus ikkunassa laittaa indeksit (Index) jokaiselle erinumerot, niin ohjelma antoi olla täsmälleen samalla nimellä kaikki tekstikentät. Ja silloin pystyi sitten esim. satunnaslukuna arpomaan johonkin tekstikenttään tietoa.
Nyt siis yrittäisin samaa VB2010E:llä, esim vaikka noppaohjelma, jossa jokainen eri silmä luku koostetaan OvalShape1(i) "olioilla" ja niiden näkyvyyttä säädellään satunnaislukutyylillä, jossa i kuvaa "olion" ns. indeksiä, ainakin vanhassa käytettiin tätä nimeä.
Tässä linkki ohjelmankoodiin http://www.vbtutor.net/VB_Sample/dice1.htm , mutta jostakin pitää "olioiden" ominaisuuksia muuttaa sopiviksi
Tässä on yksi esimerkki asiasta:
Dim tekstit(2) As TextBox
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
' luodaan kolme tekstikenttää
For i = 0 To 2
tekstit(i) = New TextBox
tekstit(i).Left = 50
tekstit(i).Top = 50 * i
Controls.Add(tekstit(i))
Next
' kirjoitetaan yhteen niistä teksti "ABC"
Randomize()
tekstit(Int(Rnd() * 3)).Text = "ABC"
End SubMiten nyt sitten tämän sivun http://www.vbtutor.net/VB_Sample/dice1.htm koodi tehtäisiin uudella VB:llä?
Ilmeisesti uudessa VB2010E:ssä ei voi ominausuuksissa enää indeksoida piirrettäviä kohteitä eri indekseillä, jotta nimi voisi olla sama?
Nopan voi piirtää esimerkiksi seuraavasti:
Private Sub Form1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Click
Dim kuva As Graphics = PictureBox1.CreateGraphics
Dim viiva As New Pen(Color.Black)
Dim taytto As New SolidBrush(Color.Black)
kuva.DrawRectangle(viiva, 0, 0, 40, 40)
kuva.FillEllipse(taytto, 5, 5, 10, 10)
kuva.FillEllipse(taytto, 25, 5, 10, 10)
kuva.FillEllipse(taytto, 5, 25, 10, 10)
kuva.FillEllipse(taytto, 25, 25, 10, 10)
End SubNiin, itse nopan piirtäminen ei ole ongelma, kyllähän noita muotoja voi piirrellä kuten vanhallakin VB:llä.
Mutta niiden piirrettyjen kohteiden nimen antaminen ja jos sen pitäisi olla sama, niin jotenkin pitäisi saada annettua kohteille nimi suunnilleen tähän tyyliin: Shape1(i), jossa suluissa oleva i on ns. vanha indeksiluku (Index), mutta miten se Properties -ikkunassa asetetaan kohdekohtaisesti?
Olisiko tiedossa sivustoja, jossa on koodeja eri VB2010Express ohjelmiin?
VB.NETissä kontrolleilla ei ole Index-ominaisuutta, joten haluamasi asia ei ole mahdollinen. Kuitenkin kontrolleista voi tehdä taulukon ensimmäisen esimerkkini mukaisesti, jolloin niihin voi viitata samaan tapaan.
Myös formille piirretyistä kontrolleista voi tehdä taulukon:
Dim tekstit(2) As TextBox
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
tekstit(0) = TextBox1
tekstit(1) = TextBox2
tekstit(2) = TextBox3
tekstit(1).Text = "ABC"
End SubMope kirjoitti:
Olisiko tiedossa sivustoja, jossa on koodeja eri VB2010Express ohjelmiin?
Tuskin missään on nimenomaan VB2010Expressille, koska ei siinä olisi mitään järkeä. VB.Net -lähdekoodeja on netti pullollaan (ja lisäksi c#-koodit voi autokonvertoida VB.Netille ja päinvastoin).
Eli siis lähtökohtaisesti kaikki VB.netille (2002, 2003, 2005, 2008 ja 2010 versiot) kaikille editioille (Express, Professional, Enterprice etc.) tehdyt koodiesimerkit toimii VB2010Expressillä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.