[ROZWIĄZANY][VB6] Wykonywanie opcji dla wszystkich elementów


(Stralny 97) #1

Witam, mam problem z kodem. Mam 600 pictureboxów i chciałbym, aby dla tych wszystkich 600 była jeden kod.

Private Sub Picture1_Click()

If Picture1.BackColor = &HFFFFFF Then Picture1.BackColor = &H0& Else If Picture1.BackColor = &H0& Then Picture1.BackColor = &HFFFFFF

End Sub

I zamiast kopiować to wszystko Picture1, Picture2... Picture600 dało by się zrobić tak aby po prostu odpowiadało to:

If Picture1.BackColor = &HFFFFFF Then Picture1.BackColor = &H0& Else If Picture1.BackColor = &H0& Then Picture1.BackColor = &HFFFFFF

Dla wszystkich? :confused:

Proszę o pomoc.


(floyd) #2

Nazwy dla poszczególnych obrazków powinno być w takim przypadku indeksowane.

Np. Picture1(0), Picture1(1), Picture1(2)..... Picture1(599)

A następnie wystarczy np. utworzyć pętlę:

For i=0 to 599

If Picture1(i).BackColor = &HFFFFFF Then Picture1(i).BackColor = &H0& Else If Picture1(i).BackColor = &H0& Then Picture1(i).BackColor = &HFFFFFF

next i

Jak tworzyć nazwy indeksowane?

Najprościej, to po umieszczeniu na formie jednego obrazka o nazwie np. picture1 i po zaznaczeniu go wybrać opcję: Edit---> copy

A następnie Edit--->Paste

I na pytanie: you already have a control named 'Picture1'. Do you wan to create a control array?

kliknąć: Tak.

Można też umieszczać indeksy we właściwościach obiektów: Properties gdzie jest taka opcja: index

Podczas następnych wklejeń indeksy kolejnych obrazków zostaną dodawane automatycznie.

Na Formie chcesz umieścić 600 obrazków?

Nie wydaje mi się żeby to było możliwe. O ile wiem to na formie można umieścić co najwyżej 256 elementów.


(Stralny 97) #3

Dzięki znowu za pomoc floyd ;D No 600 to przesada ale trochę tego dużo. -- Dodane 29.06.2011 (Śr) 20:57 -- Yyy.. czekaj, gdzie to najlepiej wstawić do timera? :confused: Gdy wklejam:

Private Sub Picture1_Click(Index As Integer)

For i = 0 To 59

If Picture1(i).BackColor = &HFFFFFF Then Picture1(i).BackColor = &H0& Else If Picture1(i).BackColor = &H0& Then Picture1(i).BackColor = &HFFFFFF

Next i

End Sub

To jak klikne w jeden kwadracik to wszystkie zmieniają kolory.

Chciałbym aby był każdy osobno.


(floyd) #4

Jeżeli chcesz aby zmieniał tło tylko ten kwadracik który klikniesz to oczywiście bez pętli.

Procedura Picture1_Click(index) powinna wówczas wyglądać tak:

Private Sub Picture1_Click(Index As Integer)

If Picture1(Index).BackColor = &HFFFFFF Then Picture1(Index).BackColor = &H0& Else If Picture1(Index).BackColor = &H0& Then Picture1(Index).BackColor = &HFFFFFF

End Sub

(Stralny 97) #5

I jest dobrze. Dzięki za radę. Pozdrawiam.