Mulla on tossa 40 ToggleButtonia nimeltään ToggleButton1-ToggleButton40. Nyt tarttisin tietoa siitä, että miten voin valita noi kaikki koodissa peränjälkeen. Oon kokeillu mm for-nextillä ToggleButton("" & Numero), mutta ei toimi. Onko hyviä vinkkejä?
Huono hommeli, etkö osaa indeksoida niitä. Muuta jokaisen nimi vaikka ToggleButtoniksi tyyliin
ToggleButton1 -> ToggleButton, indeksiksi 0
ToggleButton2 -> ToggleButton, indeksiksi 1
ToggleButton3 -> ToggleButton, indeksiksi 2
ToggleButton4 -> ToggleButton, indeksiksi 3
jne. sitten koodiin esim for i=0 to ToggleButton.UBound johon ToggleButton(i) jotaki. Indeksejä kannattaa käyttää aina kun voi :)
Siinä ongelman ydin. En osaa indeksoida niitä. Apua vielä siihen?
Vaikkapa näin:
Tee formille yksi nappi nimeksi ToggleButton. Valitse se ja paina ctrl+c. Paina sitten ctrl+v ja VB kysyy tehdäänkö kontrolleri-taulukko. Paina Yes ja nyt vain rämpyttelet ctrl+v kunnes tarvittava määrä komponentteja on ilmestynyt ruudulle.
Jos kontrollit ovat jo valmiiksi formilla, muuta niiden kaikkien nimeksi ToggleButton ja vastaa toisen muutoksen kohdalla tulevaan kysymykseen Yes. Silloin indeksit menevät oikein automaattisesti.
Enpä saanu onnistumaan vaikka kokeilin himassa uudemmalla Excelillä. Noi ToggleButtonit on ihan tavallisella Sheetillä mulla. En tiedä onko tolla ees väliä... Vaikka kokeilin laittaa UserFormille tota niin ei se kysyny multa mitään. Pahoittelen listan kuormittamista, mutta jos joku viitsisi ihan rautalangasta tällaiselle aloittelijalle tän vääntään. Kiitos jo tulleista vinkeistä!
Olisit heti kertonut, että kyse on Excelistä. :) Siinä nimittäin tuota Index-ominaisuutta ei jostain syystä ole. Ongelmaan on kuitenkin olemassa ratkaisu, joka löytyy vanhemmasta keskustelusta.
Ei sitä alottelija heti osaa kaikkea oleellista kertoa :) Enpä saanu totakaan toimimaan... Kun kirjotan ton in Me., niin avautuvassa valikossa ei vaihtoehtona ole Controls-kohtaa. Mitä tuo Me tuossa malli koodissa itse asiassa tarkoittaa?
Edelleen kiitän jo tulleesta avusta ja toivottavasti vielä tulevasta...
Me on muistaakseni formi, jossa koodia suoritetaan sillä hetkellä.
Kiitos tuosta tiedosta!
Vieläkään en ole tosin sellaista apua saanut, mikä auttaisi ongelmani ratkaisemisessa...
Jatkanpa tätä vielä: Onko VB6:lla mahdollista luoda moniulotteisia kontrolleritaulukoita (oikea termi?)?
Heikki kirjoitti:
Jatkanpa tätä vielä: Onko VB6:lla mahdollista luoda moniulotteisia kontrolleritaulukoita
Ottaen huomioon, että taulukointi perustuu index-ominaisuuteen, joka on tyyppiä Integer, en tuohon jaksa uskoa. Jos moniulotteisuus on ehdottomen tärkeää, itse varmaankin kokeilisin luoda jonkinnäköistä wrapperifunktiota, joka muuntaa moniulotteiset indeksit yksiuotteisiksi.
Heikki kirjoitti:
(oikea termi?)?
Eiköhän tuo ihan pätevä suomennos control arraylle ole.
Heikki kirjoitti:
Jatkanpa tätä vielä: Onko VB6:lla mahdollista luoda moniulotteisia kontrolleritaulukoita (oikea termi?)?
Kontrollitaulukoksi kutsuisin. Ei voi tehdä, mutta onhan helppo simuloida sitä tyyliin kontrolli(y*(xmax+1)+x).
En nyt aivan heti keksi mihin kolmiuloitteista kontrollitaulukkoa tarvitsisi käyttää?
Jos haluat kolmeuloitteista taulukointia voit käyttää aina ArrayStrukteja (Type)... Siitä, että objekti on kolmiuloitteisessa taulukossa ei juurikaan taida olla hyötyä - vai keksiikö joku muu jotain hyvää syytä?
Tämä nyt on eksynyt aiheesta täysin. Edelleen kaipaan tietoa siitä miten saan nuo kaikki Excel-sivulla olevat ToggleButtonit valittua kerralla päälle tai pois päältä.
Pahoittelen, että tämän toista, mutta kun aiheesta eksyttiin kauas...
Kaikkein työläin, mutta yksinkertaisin tapa on
tehdä funktio joka laittaa ne pois päältä tai päälle kutsuttaessa:
Private Sub ToggleAllToggleButtons(bToggleType as boolean) ToggleButton1.Enabled=bToggleType ToggleButton2.Enabled=bToggleType ToggleButton3.Enabled=bToggleType ToggleButton4.Enabled=bToggleType ToggleButton5.Enabled=bToggleType ToggleButton6.Enabled=bToggleType ToggleButton7.Enabled=bToggleType ... ToggleButton40.Enabled=bToggleType End Sub
Edit: typoja
Toi on toimivaa, mutta niin "rumaa". Sen lisäks, että ne pitää saada kaikki valittua ja pois-valittua kerralla, niin ne pitää saada myös näkyviin ja pois parin muun nappulan käskystä. Siks oisin halunnu löytää jonkun elegantin tavan ratkasta toi ongelma.
Laaksosen ehdottaman ratkaisutavan tyylisen ratkaisun löysin myös microsoftin sivuilta, mutta vaikka copy-pastasin sen niin se ei silti toiminut.
Tee looppi.
For I = 1 To 40 ToggleButton(i).Enabled = bToggleType Next
Kaunista, mutta ei toimi.
Toimii jos niitten nimet on ToggleButton ja on indeksoitu. Mä tekisin ton kyllä
For i = 0 to 39 ToggleButton(i).Enabled = bToggleType Next
koska kontrollien indeksointi alkaa yleensä nollasta.
Muuten hyvä, mutta Excel ei tue indeksointia. Siitä oli maininta jo tuolla ylempänä, mikäli sen huomasi lukea.
Aijjoo. Noh kannattaisi tehdä sitte
Dim nappula As Control For Each nappula In Me.Controls If Left(nappula.Name, 12) = "ToggleButton" Then nappula.Enabled = bToggleType Next
Ei toimi tuokaan. Herjaa jo toisella rivillä, että:"Käännösvirhe: Menetelmää tai jäsentä ei löydy"
Hm. Kirjoita Me. ja kato onko siinä listassa joka tulee esiin (jos tulee excelissä) onko siinä jotain control, controls tai controlcollection tjsp hommelia
Lista tulee näkyviin, mutta mitään kontrolliin viittaavaa ei sieltä löydy.
No sitten ei taida olla muuta tapaa kuin tuo jonka Antti selitti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.