Eli minulla on ohjelmassa jotain 100 painiketta. Miten saisin tehtyä koodin, joka muuttaa kaikkien painikkeiden värin halutuksi nopeasti. Ettei tarvitsisi joka kerta tehdä:
button1.backcolor = päläpälä
Vai onko tuo edes mahdollista?
Kannattaa indeksoida ne. Tämä onnistuu kolmella tavalla, joko teet ensin yhden napin, kopioit sen ja sitte kun vb kysyy että tehdäänkö control array, niin vastaat joo, ja pasteilet niitä siihen sen sata. Tai sit teet yhden napin, laitat sille Index-ominaisuudeksi 0 ja vaikka form_loadissa lataat ne muut (for i=1 to 99:load nappi(i):next, missä nappi on commandbuttonin nimi). Tai vaihdat jokaisen napin indeksin käsin, mitä en suosittele. Kivan työlästä.
Kun ne sit on indeksoituna niin voit tehdä näi
For i = 0 to nappi.UBound nappi(i).BackColor = väri Next
Eli siis "taulukollinen" nappeja - kontrollitaulukko.
Toinen tapa on käydä läpi kaikki formin kontrollit ja muuttaa painikkeiden värit.
Dim ohjain As Control For Each ohjain In Controls If TypeOf ohjain Is CommandButton Then ohjain.BackColor = vbBlack End If Next
Tämä koodi toimii VB6:ssa.
Sata painiketta on varsin paljon. Itselläni ei alkuaikojen koodaamisen opettelun jälkeen ole tullut tarvetta lisätä kovinkaan montaa ohjelmaan; tosin tuo sata tulee helposti kasaan, jos on vaikka 20 formia. Kuitenkin yleensä suuren nappulamäärän tarpeen voi ohittaa järkevöittämällä käyttöliittymäsuunnittelua ja miettimällä, mikä on olennaisinta ohjelman käyttäjän kannalta. Tämän neuvon voi tietysti ohittaa, jos niitä nappuloita on jo "järkevä" määrä kerralla näkyvillä.
Soodan neuvon ongelmaksi tulee se, että jos nappuloita on tosiaan se sata, kaikki ovat samalla formilla ja jokainen tekee eri asian, niin yhteen paikkaan joutuu tekemään varsin ruman näköisen koodikökön: sataosainen Select Case ei ole niitä ihanimpia asioita elämässä selata ja hallita. Siinä mielessä Antin koodi toimii paremmin. Joskin sitten voi jo taas miettiä sitä mitä tuossa jo aiemmassa kappaleessa sanoin :)
Joo taidan koittaa tota Antin koodia. Syy miksi minulla on niin monta buttonia on se, että ohjelma on Runescape -nettipeliin tehty clientti
Siis jokaiselle serverille oma nappi. (Ei tarvi tajuta)
EDIT: Jes sain toimimaan Antin vinkillä. Vieläkuin saisi, että buttonin tekstinvärin voisi muuttaa. Mitenköhän onnistuisi?
Hei jee, mäki koodannut vb:llä aika monta vuotta ja nyt vasta taidan ekaa kertaa nähdä tommoisen typeof..is-homman. :o
Niin että miten saisi buttonin tekstivärin muutettua? Muistaakseni sitä ei forecolorilla saatu, vai olenko väärässä? Täytyis laittaa tähän tyyliin:
if formi.backcolor = rgb(0,0,0) then
tekstiväri = rgb(255,0,0)
endif
Aihe on jo aika vanha, joten et voi enää vastata siihen.