Piątek 04 Kwiecień 2025r. Godz 00:00:00      
Postów: 251      

Visual Basic Lekcje 10-20

Zaczynamy nowy dział - pętle. Jednak przed tym muszę wam wyjaśnić jak pisze się komentarze w VB.
Po co mi komentarze i co to w ogóle jest ? Komentarz jest to pomocniczy tekst w projekcie służacy jedynie dla nas ! Visual Basic w ogóle na to nie zwraca uwagi. Po co to stosować... Na razie piszemy małe programy i komentarz jest zbyteczny. Jeśli jednak będziesz musiał wykonać skomplikowany program, sam się w nim pogubisz. Do deklaracji przykładów stosujemy znak '
Wszystko co znajdzie się po tym znaku aż do końca linijki jest komentarzem i VB nie zwraca na to najmniejszej uwagi. Komentarze zostają zaznaczone przez VB na zielono. Przykład

If x=0 then end  'Jeśli zmienna x będzie równa zero to zakończ program
lub
If x=0 then end
'Jeśli zmienna x będzie równa zero to zakończ program
Jak widzisz oba przypadki są dobra i czytelne. Dobra, to tyle wstępem - zaczynamy pętle.
Pętla, jak sama nazwa mówi to kilkukrotne powtórzenie się tych samych instrukcji kodu. Ile ich będzie, to zależy od warunku pętli. Najprościej jest to wyjaśnić na przykładzie.
Napiszemy program pytający się nas o wiek. Po jego podaniu wyskoczy komunikat "Masz x lat". Oczywiście program musi być głupioodporny i jeśli podamy, że mamy 0 lub 123 lata powinien zapytać nas jeszcze raz o wiek.
Zabieramy się więc do roboty. Jak zwykle tworzymy przycisk i dodajemy kod:
Dim wiek as string
Dim b,c as byte
wiek = InputBox ("Podaj ile masz lat","Pytanie")  'Tutaj program pyta nas o wiek
If wiek = "" then end    ' Jeśli nacisnęliśmy Cancel
wiek = Val(wiek)  'opis poniższej funkcji pod przykładem, na razie musisz wiedzieć, że działa podobnie jak CSng( )
Do While wiek<=0 or wiek>120
b = MsgBox ("Musisz podać prawidłowy wiek",vbCritical,"Błąd")
wiek = InputBox ("Podaj jeszcze raz swój wiek","Pytanie")  'Tutaj program znów pyta nas o wiek
If wiek = "" then end    ' Jeśli nacisnęliśmy Cancel
wiek = Val(Wiek)
Loop
c = MsgBox("Masz " & wiek & " lat" , vbInformation, "Odpowiedź") 
Ho, ho, ho - trzy nowości w programie. No to przetłumaczenie:
1. Dim wiek - deklarujemy zmienną wiek - czyli naszą odpowiedź
2. Dim x,y - deklaracja tego co zwraca MsgBox
3. Pytanie o wiek, który zostaje zapisany do zmiennej wiek
4. If... - jeśli naciśniemy cancel to koniec programu
5. wiek = Val(Wiek) - pierwsza nowość. Jest to funkcja bardzo podobna do CSng( ). W przyszłości właśnie ją będziemy używać. Ale czym się rożni? Jeśli byś napisał:
x = "12"
odp = CSng(x)
w zmiennej odp znalazło by się 12. Miałeś zapamiętać, że to co jest np. w polach tekstowych nazywa się stringami. Zapisuje się je właśnie w cudzysłowach. String "12" zostaje przekonwertowany na 12 i wszystko O.K. Ale zobaczmy co się teraz stanie:
x = "Tata i mama"
odp = CSng(x)

i w tym momencie wyskoczy błąd (13). Nie można przekonwertować "Tata i mama" na liczbę 9co jest chyba logiczne). Jednak funkcja VAL to potrafi...
x = "Tata i mama"
odp = Val(x)
teraz w zmiennej odp znajdzie się liczba 0.
No dobra - ale po co to mam stosować. Załużmy, że użyłeś funkcji CSng. Teraz program pyta się nas o wiek - ty mu podajesz jakiś string np. Ble, ble - i nagle błąd "Type mismath". Aby temu zapobiec zastosowałem funkcję VAL - która zwróci 0 i błędu nie będzie...
6. Do while wiek <= 0 or wiek >120 then
Jak widzisz funkcja jest bardzo podobna do funkcji IF - lecz nie oznacza ona jeśli a dopóki.
Czyli tłumacząc - dopóki wiek <= 0 lub wiek >120 wykonuj istrukcje do Loop. Innymi słowy mówiąc - jeśli podamy liczbę taką jak trzeba to program przeskoczy aż za funkcję Loop (Odpowiednik End IF). Jeśli jednak podamy np 140 to...
7. MesageBox, że zły wiek
8.InputBox - ponawiamy pytanie o wiek...
9. Znów sprawdzenie czy naciśnięto Cancel
10. Val - znów konwersja stringu Wiek na liczbę
11. Loop - funkcja która spowrotem przenosi nas do funkcji Do While
No to wracamy się, aż do linijki 6 i tu znowu rozstrzyga się czy będziemy już kończyć, czy jeszcze nie. Znów rozpatrzymy dwa przypadki:
a) Znów podaliśmy zły wiek, więc program ponownie wykonuje to co jest między Do While a Loop. Gdy dojdzie do końca to znów wraca do linii 6, i po raz kolejny rozstrzyga sprawę.
b) Podaliśmy dobry wiek - program więc przeskakuje przez funkcję Do While - Loop i lądujemy w linijce 12
12.MsgBox - w końcu dotarliśmy tutaj. Program daje nam odpowiedź ile mamy lat. Ale co tam znowu jest namieszane... Może przestraszyliście się troszkę wyrażenia "Masz " & wiek & " lat" - pamiętacie co robił symbol & - dla tych co zapomnieli:
x = "Mam " & 12 & " lat"
Dawało to w wyniku "Mam 12 lat"

Dzisiaj poznamy przeciwność funkcji Do While, będzie to funkcja Do Until. Działa dokłanie odwrotnie. Oto przykład:
Zamiast:
Do While wiek<=0 or wiek>120
możemy zapisać:
Do Until wiek > 0 and wiek <= 120
Pamiętaj, że przeciwnością < jest >=, a <= jest >. Przeciwnością <> jest =.
Pamiętaj także o zmianie operatorów - Or zamienia się na End i odwrotnie.
Linie możemy przetłumaczyć tak:
Dopóki wiek  będzie nie większy niż 0 i nie mniejszy niż 120 to...
Myślisz pewnie, że nigdy nie zastosujesz tej funkcji - bo i po co? Skoro można ją zamienić na bardziej zrozumiałą Do While, to po co zaprzątać sobie głowę tym. Sam przyznaję, że funkcję Do Until będziesz używał znacznie rzadziej, ale będziemy pisać takie programy, że będzie ona najwygodniejszym sposobem.
I co tu więcej pisać. Praktyczne zastosowanie tej funkcji poznasz już za niedługo. Skoro mowa o pętlach to powiemy jeszcze coś o pętlach odwrotnych.
Pętla:         Do While... Loop
Odwrotna: Do... Loop While
Tak samo możemy postąpić z Until... Dobra, ale czym ona się różni od normalnej pętli ? Najlepiej zobrazować to na małym shemaciku...
Blok instrukcji (1)
Do While...
Blok instrukcji (2)
Loop
Blok instrukcji (3)
W przypadku normalnej pętli program wykonuje się tak:
Blok instrukcji (1), teraz albo blok instrukcji (2), albo po kilku (lub jednej) pętli blok instrukcji (3)
A teraz funkcja odwrotna do poprzedniej
Blok instrukcji (1)
Do
Blok instrukcji (2)
Loop While...
Blok instrukcji (3)
A teraz program wykonuje się tak:
Blok instrukcji (1), Blok instrukcji (2), teraz albo blok instrukcji (3), albo znów Blok instrukcji (2) i tak kilka razy (lub raz) i na koniec blok instrukcji (3)
Generalnie różni się to tym, że w funkcji Do While - Loop, program może, ale nie musi wykonąć tego co znajduje się między DO - LOOP. Zaś w funkcji odwrotnej program musi wykonać przynajmniej jeden raz instrukcję zawartą między DO - LOOP.
Funkcja jest rzadko stosowana (sam nigdy jej nie używałem), zawsze ją można zastąpić zwykłym ułożeniem. Ale warto wiedzieć, że coś takiego jest . Zawsze się może zdarzyć, że akurat będzie ona lepsza.
 
Czym różni się ona od pętli Do While, Do Until ? Otóż, jak pamiętasz pętle Do - wykonywały się dopóki jej warunki nie zostały spełnione. Pętla for wykonuje się zaś określoną ilość razy. Tak np.
Dim x,y as byte
For x = 1 to 5
y = MsgBox("To jest MessageBox nr. " & x, vbinformation,"Przykład")
Next x
Ten program powoduje pięciokrotne wyświetlenie się MsgBox-a. Jak to działa ?
1. Dim - wiadomo co... ;)
2. Dla x = od 1 do 5
3. MsgBox...
4. Dodaj do x i wróć
No dobra, ale jak to działa ? Przeanalizujmy...

Najpierw zainicjowanie zmiennych x i y. Dalej jest instrukcja for. Decyduje ona ile razy ma zostać wykonana pętla. W naszym przypadku jeśli x=6 to przeskakuje za Next-a (Odpowiednik Loop-a z pętli DO-LOOP). Czyli tak - obecnie w zmiennej x jest 1 - to jest ta pierwsza liczba w FOR. Wykonuje się msgBox z wiadomością "To jest MessageBox nr 1". Program dochodzi do funkcji Next x - oznacza ona - dodaj (1) i wróć . Tak więc program wraca do For-a, tylko teraz w x jest liczba 2 - i znów MsgBox - To jest MessageBox nr 2. I znów dodaj 1 i wróć, aż tak do 5. Ale co potem... Załóżmy, że w x jest 5. Jesteśmy przy funkcji For - skoro do pięciu to jeszcze raz pętelka - MessageBox i dochodzimy do Next x. Po tej operacji x = 6. Program wraca do for-a i okazuje się, że x nie spełnia warunku pętli. Następuje przeskok za instrukcję Next - i program w ten sposób kończy działanie.
Dokładne i praktyczne zastosowanie tej funkcji poznasz dużo później - gdy będziemy mówić o dostępie do plików. Niemniej jednak będzie nam ona bardzo potrzebna i musisz ją znać.
Myślę, że nie będziesz mieć z nią żadnych problemów.
Ach, zapomniałem napisać o pewnym dopełnieniu funkcji FOR - jest nią Step (czyli krok). Po prostu do funkcji For dopisz jeszcze Step i pewną liczbę. Zastosujmy to do wcześniej napisanego przykładu. Będzie to wyglądać więc tak:
Dim x,y as byte
For x = 1 to 5 step 2
y = MsgBox("To jest MessageBox nr. " & x, vbinformation,"Przykład")
Next x
I co się tu dzieje... Pomyślmy. Wchodzimy w funkcję FOR, następnie zapisuje ona do zmiennej x wartość 1. Dostajemy wiadomość "To jest MessageBox nr. 1". I zatrzymujemy się na next. Pamiętasz co on oznaczał ? Tak, dodaj do x (w tamtym przypadku 1) i wróć do FOR. Teraz sytuacja się zmienia. Funkcja STEP nakazuje FOR-owi, aby teraz do x dodał 2. I co teraz. Wracamy się, i w x znajduje się liczba 3 ! A więc nie dostaniemy MessageBoxa z numerem 2 lecz 3. Znów NEXT czyli x+2 a to daje 5. Powrót, MessageBox nr 5. Znów Next, teraz x=7, powrót do FOR - ale niestety (?) For nie obejmuje już liczby 7, a więc przeskok za Next i koniec. programu...
Zauważyłeś różnicę? Chyba tak. Zamiast 5 Messag-ów otrzymałeś tylko 3 !
Teraz zastosujmy funkcję for do liczenia silni danej liczby.
Dobra, dobra - ale większość osób pewnie nie wie co to jest silnia.
7! (czytaj. 7 silnia) - 1*2*3*4*5*6*7
No dobra skoro wiesz co to jest już silnia, bierzemy się do pisania programu.
Na formie ułóż przycisk - jako wartość "Caption" wpisz Silnia, i nazwij go cmdSilnia. No dobra, ale gdzie będziemy wpisywać liczbę... Musimy zrobić textBox-a. Wyczyść wartość Caption i nazwij go txtSilnia. Teraz dodaj do przycisku następujący kod:
Dim x, odp
odp = 1
For x = 1 To txtSilnia
odp = odp * x
Next x
ss = MsgBox(txtSilnia & " ! to " & odp)
Czy potrafisz go przeanalizować? Przynajmniej powinieneś. Jeśli jednak nie potrafisz tego zrobić przeanalizujmy razem:
1. Dim - zainicjowanie zmiennych
2. Na początek ustalamy zmienną początkową. Ale dlaczego nie 0. Pomyśl - mnożenie przez 0 zawsze daje w wyniku 0 - a więc bez sensu. Przy dodawaniu jako stałą musisz dać 0, a przy mnożeniu 1 !!!.
3. Instrukcja for - od 1 do... ile? txtsilnia to jest właśnie liczba którą wpisałeś okienko.
4. Teraz następuje przemnożenie stałej przez x - czyli kolejną liczbę naturalną zaczynając od 1, a kończąc na txtSilnia. Czyli nasze równanie (załóżmy, że w okienko wpisałeś 7) 1*2*3*4*5*6*7 czyli 7!. Po 7 okrążeniach otrzymujemy nasz wynik.
ZADANIE DOMOWE:
Napisz program z przyciskiem i polem tekstowym. Program ma dodawać tylko liczby parzyste zaczynając od 2, a kończąc na liczbie wpisanej w pole textowe.
Może trochę trudne więc daję 2 podpowiedzi:
Po pierwsze skoro dodawanie zaczynamy od 2 (bo 1 jest liczbą nieparzystą) funkcję FOR też zaczniemy od 2.
Po drugie - liczby parzyste to co drugie liczby. Tak więc będziemy musieli użyć funkcji STEP.

(name)
W tym polu wpisujemy nazwę identyfikującą naszą etykietę – najlepiej używać skrótu lbl (od Label)  np. lblNazwa
Alignment
!!! Czyli wyrównanie tekstu który znajduje się na etykiecie. Domyślnie mamy ustalone 0 - Left Justyfy - czyli wyrównanie do lewej krawędzi. Można też ustawić 1 - Right... czyli wyrównanie do prawej oraz 2 - Center - czyli wyśrodkowanie tekstu.
caption
Chyba najważniejsza – Tu ustalamy wyrazy które mają znaleźć się na naszej etykiecie
Font
W tym oknie możemy ustalić czcionkę, wielkość i efekty dla napisu
Height
Wysokość etykiety. Raczej wygodniejsze jest rozciąganie bezpośrednio na formularzu
Left
Określa odległość etykiety od lewej krawędzi ekranu. Wygodniej jest przemieszczać etykietę bezpośrednio na formie.
BackColor
Tutaj kolor tła etykiety
ForeColor
Tutaj kolor tekstu
Top
Określa położenie etykiety od górnej krawędzi ekranu
Width
Określa szerokość etykiety
Visible
Określa czy etykieta ma być widoczna na formularzu. Jeśli zaznaczymy false, to po uruchomieniu programu zobaczymy pusty formularz.

O co chodzi z tym kodem ? Napiszmy mały program. Na formularzu umieśćmy pole tekstowe o nazwie txtWpis, wyczyść opcję Caption. Umieszczamy także etykietę o nazwie lblGotowe i także wyczyśćmy Caption. I jeszcze 3 przyciski o nazwach - Do lewej, Do prawej, Wyśrodkowanie. Nazwij je jak tam chcesz. 
Nasz program ma działać tak - Wpisujemy w pole tekstowe jakiś tekst, który automatycznie przenoszony jest do etykiety. A nasze trzy przyciski sterują położeniem tekstu na etykiecie.
No dobra, ale nie zapomniałem czasem o przycisku przenoszącym tekst z pola tekstowego do etykiety ? Zaraz, przecież to miało być automatyczne... Ale jak to zrobić. Po pierwsze musimy ocenić kiedy program ma zareagować. Oczywiście, że wtedy, gdy zaczniemy coś wpisywać do pola tekstowego. Czyli nasz kod będzie siedział w polu tekstowym. Tak więc klikamy na niego dwukrotnie i widzimy coś takiego:
Private Sub txtwpis_Change()

End Sub
Change - oznacza zmianę - czyli jeśli coś będziemy zmieniać w polu tekstowym to wykona nam się kod. No dobra, ale jaki ? Pomyślmy. Chodzi nam o przeniesienie tego co w txtWpis do lblGotowe. Wyjdzie proste równanie matematyczne:
lblGotowe.caption = txtwpis

I jak to ma prawo działać. Tu właśnie zmieniamy właściwość etykiety, mianowicie caption (czyli to co jest wpisane w etykietę). Przyporządkowujemy temu to co wpisujemy w txtwpis.
Myślę, że rozumiesz...
Sprawdźmy jak to działa. Uruchom program i wpisuj cokolwiek w pole tekstowe - działa nie ? No dobra, ale przyciski nie działają.
Wracamy do trybu projektowania, klikamy dwukrotnie przycisk Do lewej i dodaj kod:
lblGotowe.Alignment = 0
Co to oznacza. Zajrzyj do tabelki. To jest właśnie wyśrodkowanie. Ale dlaczego 0 ? Znów spójrz do tabelki - 0 to jest do lewej. Po przetłumaczeniu funkcja wygląda tak:
etykietaGotowe.wyrównanie = 0 czyli do lewej
No chyba wiesz co zrobić z pozostałymi przyciskami. Popatrz do tabelki i dopisz odpowiedni kod.
Teraz uruchom program i co? Super nie... ;)
Dobra. ni wyłączaj jeszcze VB. Zapisz program - będzie nam potrzebny za niedługo. W tym celu z menu file wybierz Save Project As... i zapisz obydwa pliki gdzieś na dysku.
Dobra. Jeszcze jedno zdanie na koniec. Pamiętaj, że tym sposobem możesz zmieniać właściwości wszystkich elementów ułożonych na formie!!!
 
Dzisiaj nauczysz posługiwać się polami wyboru – Check Box-em i Option Button-em (Radio). Znajdują się one na palecie narzędzi w czwartym rzędzie. Taki kwadracik „zafajkowany” i kółeczko z kropką. Na początek weżmy ten pierwszy czyli kwadracik.
Na pewno już się z nim gdzieś spotkałeś. Służy on do poinformowania programu czy coś chcemy czy też nie. Np. możemy nim sterować podkreślenie tekstu w etykiecie. Spróbujmy...
Na formie ułóż CheckBox-a. Nazwij go chkPodkreslenie. Właściwość Caption ustaw na „Podkreśl”. No dobra – ale co będzie podkreślane ? No oczywiście jakiś tekst w etykiecie. No więc tworzymy etykietę o nazwie lblTekst i tekscie (Caption) – „To jest jakiś tam tekst”. OK. Teraz nasz program po zaznaczeniu Check-a powinien podkreślić tekst. Oczywiście kod będziemy dodawać do Check-a. Klikamy więc go dwukrotnie i dopisujemy kod:
lblTekst.FontUnderline = True
Chyba jeszcze nie znasz właściwości FontUnderline – musisz wiedzieć, że służy ona do podkreślenia tekstu.
Myślę, że rozumiesz ten prosty kod. Jeśli klikniemy to podkreśl...
Odpal program, zaznacz Check-a i co podkreślił. Hurra ! No ale teraz odznacz. Podkreślenie nie znika – co jest. No tak. My mamy napisane, że program ma podkreślić jeśli klikniemy na pole – nie ma ani słowa o odznaczeniu. Pomyślmy jakby to zrobić. Musisz wiedzieć jedną bardzo ważną rzecz. Jak sprawdzić czy Check Box jesz zaznaczony czy też nie ? Steruje tym funkcja Value. Jeśli jest ona równa 0 to Check jest nezaznaczony, jeśl 1 to zaznaczony, a jeśli 2 to zszarzały. Jak to sprawdzić. Zaznacz na formularzy Check i w oknie properties zmień właściwość np. na 1 i co zaznaczył się... ? Procedura powinna wyglądać tak:
If chkPodkreslenie.Value = 1 Then
lblTekst.FontUnderline = True
Else
lblTekst.FontUnderline = False
End If 
Przetłumaczmy.
Jeśli Chec Box zostanie zaznaczony (bo Value będzie równe 1) to
Podkreśl tekst
W przeciwnym przypadku (czyli wyłączymy Checka – Value = 0)
Skasuj podkreślenie tekstu
Koniec
Twoje zadanie – dorób podobny CheckBox pogrubiający tekst. Służy do tego właściwość FontBold. Myślę, że sobie poradzicie.
No dobra – teraz zabieramy się za RadioButton – teraz nazwany OptionButton. Umieśćmy taki na formularzu. Fajnie wygląda – ale co poza tym. Czy on się różni od CheckBox-a – tylko wyglądem ? Nie, nie, nie... Aby się o tym przekonać umieść na formie dwa Check-i i dwa OptionButtony. Uruchom teraz program. Najpierw zaznacz pierwszego CheckBox-a a potem drugiego. Co ten SLASH kombinuje – oba się zaznaczyły i co z tego ? To miało być dziwne ? No dobra spróbuj to samo zrobić z Optionami. Co? nie da się ? :) No właśnie – tu jest różnica. Nie można zaznaczyć dwóch naraz.
Jak sama nazwa wskazuje to jest przycisk opcji – a więc tylko jedną opcję można wybrać. Napiszmy mały programik pokazujący praktyczne zastosowanie obu tych pól wyboru. Napiszemy małą ankietę
Na formularzu umieść dwa OptionButton-y jako Caption ponadawaj im kolejno etykiety – Pentium i AMD oraz nazwij je optPentium, optAMD. Stwórz także jeden CheckBox i jako właściwość Caption nadaj mu etykietę Posiadam akcelerator graficzny i nazwij go chkAkcelerator. Potrzebna nam także będzie etykieta. Skasuj zawartość Caption i nazwij ją lblEtykieta. Nasz program ma działać tak: W etykiecie ma się pojawić tekst – Masz komputer z procesorem (nazwa) i (masz/niemasz) akcelerator(a). I tu znów musisz wiedzieć jedną bardzo ważną rzecz. OptionButton-em też możesz sterować za pomocą opcji Value – tylko z tą różnicą, że nie ma tu już wartośći 0,1,2 tylko jest True lub False. Czyli klikamy dwukrotnie na pierwszym z optionButtonów i dodajemy następujący kod:
Dim procesor, akcelerator As String
If optPentium.Value = True Then
procesor = "Pentium"
Else
procesor = "AMD"
End If 
If chkAkcelerator.Value = 1 Then
akcelerator = "i posiadasz akcelerator graficzny"
Else
akcelerator = "bez akceleratora graficznego"
End If
lblEtykieta = "Masz komputer z procesorem " & procesor & " " & akcelerator
Przeanalizuj kod. Myślę, że nie będziesz mieć z nim żadnych problemów. Jeśli jednak ...
 
No dobra, ale program ma to samo wykonywać za każdym razem gdy coś wybierzemy. Dodajmy więc ten kod do pozostałych ptinButtonói i Check-a. Uruchom program. Działa !
Wszystko byłoby w porządku gdyby nie pojawił się 4x ten sam kod. Przecież to jest bez sensu pisać 4x to samo. A jak gdyby trzeba było to zrobić 20x to co? No właśnie – z pomocą przychodzi nam funkcja Call. Oznacza ona Połącz. Oto zasada jej działania:
Linijka1
Linijka2
Call Podprogram
Linijka3
Linijka4 
Private Sub Podprogram( )
Linijka5
Linijka6
Linijka7
End Sub
Program będzie się wykonywał tak – Pierwzse linijka 1 i 2. Następnie napotykamy Call – łączy nas z podprogramem – czyli następnie linijka 5,6,7 i do End Sub. W tym momencie program wraca do Call czyli teraz linijki 3 i 4.
No dobra – ale jak to zastosować do naszego programu ? Bardzo prosto !
Najpier musimy skasować wszystko co napisaliśmy (żeby się nie pogubić...). Kliknij dwukrotnie na czymkolwiek co znajduje się na formie (możesz nawet na niej samej). Wyświetli się kod – zaznacz wszystko co widzisz i skasuj przyciskiem Del – powinna zostać czysta strona. No dobra – oczyszczone z kodu.
Teraz musimy napisać procedurę która będzie wywoływana Call-em. W oknie kodu dopisujemy ją na samym końcu – zawsze za ostatnim End Sub. Jeśli mamy czystą stronę to gdziekolwiek (się da... ;) ) Napisz:
Private Sub Przelicz ( )
Po naciśnięci Enter VB dopisał End Sub i oddzielił procedurę od reszty. Piszemy dalej to co wpisywaliśmy wcześniej do każdego z przycisków opcji czyli:
Dim procesor, akcelerator As String
If optPentium.Value = True Then
procesor = "Pentium"
Else
procesor = "AMD"
End If 
If chkAkcelerator.Value = 1 Then
akcelerator = "i posiadasz akcelerator graficzny"
Else
akcelerator = "bez akceleratora graficznego"
End If 
lblEtykieta = "Masz komputer z procesorem " & procesor & " " & akcelerator 
No dobra najważniejsze zrobione. No ale skąd program ma wiedzieć, że po zaznaczeniu jednej z opcji ma się odwołać do tej procedury ?
No właśnie – w każdym przycisku opcji musimy dopisać linijkę:
Call Przelicz ( ) 
Sprawdź czy działa – przynajmniej powinno... ;)
Dobra – jak na dzisiaj starczy... 

Co by ty dzisiaj zrobić - może jakieś... zaraz dzisiaj chyba miałem napisać jak włączyć 2 OptionButtony, nie? No dobra, ale po co? Zastanówmy się nad rozszerzeniem programu z poprzedniej lekcji.
Ostatnio pisaliśmy program, gdzie OptionButtony decydowały o naszym procesorze (a CheckBox - czy mamy akcelerator graficzny). A jak byśmy jeszcze chcieli dorobić np. wybór prędkości CD-ROM-u ? Konieczne byłoby zaznaczenie dwóch OptionButtonów. Jednego decydującego o procesorze, a drugiego o CD-ROM-ie. No dobra ale jak to zrobić ?
Umieśćmy na formie dwa OptB (tak to będzie w skrócie) nadajmy im etykiety jak w programie z poprzedniej lekcji czyli Pentium i AMD. Teraz z 5 kolejnych OptB dla CD-ROM-u. Nadajmy im kolejno etykiety - wolniejszy, 24x, 32x, 40x, szybszy. Uruchamiamy program i spróbujmy zaznaczyć, że mamy procesor AMD i CD 40x. Niestety, nie da się. Gdy zaznaczamy AMD jest wszystko OK. Ale przy zaznaczaniu CD-ROM-u odznacza się procesor. Dlaczego to chyba wiesz? Nie da się zaznaczyć więcej niż jednej opcji. No dobra - ale powiedziałem, że jakoś się da. No ale jak ?
Do tego celu musimy użyć narzędzia o nazwie Frame (tłumacząc Ramka). Jest ono na palecie narzędzi w postaci szarego kwadracika i małym napisem xy u góry (3 rząd, 1 kolumna). Spróbujmy umieścić to na formularzu. No, takie sobie - ale do czego to właściwie służy ?
Jeśli w ramce utworzymy OptionButtony to nie będą one kolidowały z OptB z sąsiednich ramek, czy z poza formy. Czyli parę możemy stworzyć np.
OptB bezpośrednio na formie + OptB w ramce     lub
OptB w ramce1 + OptB w ramce2 itd..
Oczywiście par możemy tworzyć więcej. No to co - przenosimy nasze OptB (te co charakteryzują CD-ROM) na ramkę. Chwytamy, przenosimy i puszczamy - OptB zniknął ? Co jest ?
ZAPAMIĘTAJ !!!
Najpierw tworzymy ramkę, a potem przycisk opcji tworzymy bezpośrednio na niej. Nie możemy przenosić OptB-ów na ramkę.
Czyli stare usuwamy i tworzymy nowe bezpośrednio na ramce. Uruchamiamy nasz program i co, da się zaznaczyć dwie opcje ?
ZADANIE DOMOWE
Udoskonal program z poprzedniej lekcji, tak aby można było zaznaczyć prędkość CD-ROM-u. Napis wynikowy powinien być w tej formie:
Masz komputer z procesorem {AMD, Pentium}, CD-ROM-em {wolniejszym niż 24x, 24x, 32x, 40x, szybszym niż 40x} i {posiadasz akcelerator, nie posiadasz akceleratora}
Banalne nie ? To no do roboty...
Teraz dwa dopełnienia do poprzednich lekcji. Tak właściwie to jedno nowe, a jedno dopełnienie do funkcji DIM. Czy może pamiętasz dokąd funkcja DIM pamiętała zmienną ? Tak, do End Sub - czyli zakończenia procedury. No dobra - napiszmy króciutki program, aby zobrazować to co chcę wyjaśnić.
Na formie ułóż 2 przyciski - jako etykiety nadaj im Zapamiętaj i Odczytaj oraz 1 TextBox (Pole tekstowe) nadaj mu nazwę txtzmienna. I o co tu będzie chodziło... Po naciśnięci przycisku Zapamiętaj nasz program ma zapisać do zmiennej x to co będzie w TextBox-ie. Przycisk Odczytaj ma spowodować wyświetlenie się Okna komunikatu którego treścią będzie zmienna. 
Tak więc do przycisku Zapamiętaj dodajemy kod:
Dim x as string
x = txtzmienna   ' zapisujemy d x to co jest w TextBox-ie
A do przycisku Odczytaj:
Dim odp
odp = MsgBox (x)
Uruchom program. Najpierw naciśnij Zapamiętaj, a potem Odczytaj i co? Wyświetla się nam pusty komunikat - ale dlaczego. Przeanalizujmy program...

Po naciśnięci Zapamiętaj x to się równa to co jest w textboxie (pamiętaj, że DIM "podtrzymuje" x tylko do momentu zakończenia procedury czyli do End Sub na który waśnie natrafia nasz program. Po wciśnięciu drugiego przycisku x = nic i właśnie dlatego otrzymujemy puste okienko.
No dobra, ale jak zmusić program, aby pamiętał x przez cały czas ?
Do tego służy opcja                     global
Stosuje się ją jeszcze przed załadowaniem programu. Czyli w Form_Load ? Nie. Należy ją załadować jeszcze wcześniej. Ale gdzie ?
Musisz wiedzieć, że oprócz form są jeszcze moduły - one ładują się najwcześniej. No ale jak dodać moduł do mojego projektu ?
Z menu wybierz Project - Add Module. Teraz wyskoczy okienko- kliknij dwukrotnie na  Module. Zauważ z prawej strony w okienku projektu, że oprócz formy widzimy jeszcze dodany przez nas moduł. Wyskoczyło okienko tekstowe - pewnie je zamknąłeś - a jeśli nie to je zamknij. Po co? Skoro zamknąłeś to jak teraz przywrócisz to okienko z powrotem ? Do tego posłuży nam okienko projektu - kliknij dwukrotnie na pozycji Module1 - a okienko wróci. Teraz dopisz taką linijkę:
Global x as string
Funkcja jak widzisz działa identycznie jak DIM, z tą różnicą, że jest "długowieczna".
Ale musimy jeszcze usunąć funkcję Dim x as string z jednego z przycisków - przecież nie będziemy deklarować zmiennej dwa razy. No to teraz uruchom program i co? Działa ?

Jak za pomocą jednego formularza wywołać drugi ? Wiadomo - większe programy składają się z wielu formularzy. No dobra - pokaże Wam praktycznie...
Na formie ułóż przycisk o etykiecie Pokaż. Teraz stworzymy drugą formę - ona właśnie ukaże się po naciśnięciu przycisku Pokaż. No dobra - tworzymy - ale jak ? Bardzo podobnie jak Moduł. Z menu wybierz Project - Add Form (pierwsza pozycja) kliknij dwukrotnie na form. Na drugiej formie ułóż przycisk o etykiecie Ukryj i drugi przycisk o etykiecie Koniec. Jeszcze jedno - co by się stało jakbyś niechcący wyłączył formę2 - kliknij na krzyżyku w okienku z naszą formą (NIE na krzyżyku który jest na formie). I co - znikło... Przywracamy to tak samo jak moduł. W okienku project klikamy dwukrotnie na Form2 i znów widzimy naszą formę. No dobra - zajmijmy się dalej programem.
Jak spowodować aby po kliknięciu przycisku Pokaż (na Form1) wyświetlić  Form2. Proste - dodajemy kod:
Form2.visible = true
Uruchom program i przetestuj. Pojawiają się dwie formy. Teraz jeszcze dodamy kod do dwóch przycisków na formie 2.
Aby ukryć formę (właściwie to wyłączyć) należy dodać kod:
Unload Me

Aby zakończyć cały program - czyli do przycisku koniec:
Unload Form1
Unload Me
Wystartuj program i przetestuj - działa? Myślę, że tak. 
Teraz sprawdź jeszcze jedno. Uruchom program, wyświetl formę 2 i naciśnij ukryj. Teraz zamknij program "krzyżykiem" w prawym górnym rogu programu. Na niebiesko zaznaczyła się nam ikonka "Play" na pasku narzędzi w VB. Oznacza to, że program jest gotowy do następnego uruchomienia. I co z tego? Czytaj dalej...

Skoro już jesteśmy przy tym temacie to od razu wyjaśnię czym różni się ukrywanie formy od wyłączenia jej. Zastosujmy to do powyższego przykładu. W przycisku Ukryj zamiast Unload Me wpisz:
Form2.visible = false
Teraz uruchom program. Postępuj jak przedtem czyli
Uruchom program, wyświetl formę 2 i naciśnij ukryj. Teraz zamknij program "krzyżykiem" w prawym górnym rogu programu. Ale ikonka play nie zmieniła koloru na niebieski, co świadczy, że program jest jeszcze uruchomiony - ale gdzie ?
Naciśnij stop.
Uruchomiona jest forma2 gdyż ją tylko ukryliśmy, a nie zamknęli.
To po co w takim razie stosować funkcję Form2.Visible = false ?
Zróbmy jeszcze jeden test. Na formie 2 ułóż jeszcze TextBox-a . Wystartuj program. Naciśnij przycisk Pokaż - wpisz coś w TextBox (nie wystarczy to co jest tam domyślnie) i kliknij ukryj (czyli form2.visible = false). Wróciliśmy do formy 1. Kliknij jeszcze raz Pokaż i co jest w TextBox-ie. Właśnie to co wpisaliśmy. No dobra, a teraz zamień form2.visible = false na Unload Me. Zrób to samo jeszcze raz i co? Text box już nie wyświetli tego co wpisaliśmy.
Krótko:
Funkcja Form.visible = false ukrywa tylko formę, zachowując jej własności i dane na niej
Funkcja Unload Form kasuje bezpowrotnie wszystkie dane z formy. 
Dzisiaj przed Wami dość trudna lekcja - będziemy mówić o oknach dialogowych. Zacznijmy od tego co to jest okno dialogowe. Okna dialogowe spotkałeś pewnie setki razy. Pokaże ci je w Paincie. Uruchom Paint-a (Start - Programy - Akcesoria - Paint). Gdy się uruchomi to z menu wybierz plik i otwórz - pojawiło się okno dialogowe. Daj anuluj. Teraz z plik wybierz zapisz - pojawiło się drugie okno dialogowe bardzo podobne do otwórz. Dobra daj anuluj. Na dole jest paleta z farbami - kliknij dwukrotnie na jakimkolwiek kolorze. Wyskoczyło kolejne okno dialogowe - kolor. Są jeszcze okna dialogowe - czcionka i drukuj. W przykładzie posłużę się dwoma - kolor i czcionka.
Pamiętasz jeszcze lekcję 13 - kazałem tam zapisać sobie mały programik który potrafił wyrównywać tekst do prawej, lewej i wyśrodkowywać. Teraz uzupełnimy go o możliwość manipulowania czcionką tzn. wielkość, styl i rodzaj czcionki. Uzupełnimy go także o możliwość zmiany koloru czcionki. Do dzieła...
Uruchom VB. Z menu file wybierz open i odnajdź program (rozszerzenie VBP). No dobra uruchomił się - teraz dorabiamy dwa przyciski. Jako wartość kaption przypisz im kolejno - Czcionka, Kolor. No dobra - teraz musimy dopisać jakiś kod - ale jaki ?
No niestety - sam kod nie wystarczy - na formie musimy ułożyć element króry nazywa się Common Dialog Box. Jak się domyślasz będzie on na palecie narzędzi po lewej. No przynajmniej musi się tam znaleźć. Domyślnie jest wyłączony (chociaż nie wiem dlaczego). No to jak go dodać do palety ? Kliknij prawym klawiszem myszki (to ten drugi) na wolnym miejscu na pasku narzędzi, z powstałego menu kontekstowego wybierz Components. Wyskoczyło okienko dialogowe na którym widzimy listę dostępnych komponentów - my musimy znaleźć "Microsoft Common Dialog Control 6.0". Naciskamy Zastosuk i zamknij. Czy widzisz już nowy element na pasku narzędzi ? Tak, ten na samym dole - to ten prostokąt z dwoma kwadracikami i kropkami w środku). Wybierz go i ustaw gdzieś na formie. Obojętne gdzie - on i tak jest niewidoczny. Potrzebny jest on VB tylko po to aby zapamiętywał własności wybrane z okien dialogowych. Zmień tylko jego nazwę na cdb1. Wystartuj program i co? Widzisz go gdzieś ? No nie. Dobra wyłącz program - bierzemy się za kod. Kliknij dwukrotnie na przycisku Czcionka. Teraz dopiszemy kod:
cdb1.DialogTitle = "Zmień czcionkę"
cdb1.FontName = "MS Sans Serif"
cdb1.Flags = cdlCFBoth
cdb1.ShowFont
Uruchom program. Kliknij przycisk czcionka - pokazało się nam okno dialogowe. Wybierz cokolwiek i kliknij OK. Jak widzisz nasz program jeszcze nie działa. Na razie wyjaśnię poszczególne linijki kodu:
Najpierw tytuł okna dialogowego
Potem mamy domyślną czcionkę
Teraz bardzo ważna rzecz ! Informuje to CDB-a jakie czcionki ma wyświetlić - cdlCFBoth oznacza, że wszystkie
No i teraz pokaż okno dialogowe.
Teraz musimy spowodować aby to działało - poniżej jeszcze dopisujemy następujący kod:
lblgotowe.Font = cdb1.FontName
lblgotowe.FontBold = cdb1.FontBold
lblgotowe.FontItalic = cdb1.FontItalic
lblgotowe.FontSize = cdb1.FontSize
Jak to działa ? W chwili gdy ty wybierasz coś w Oknie dialogowym odpowiednie własności zostają zapisane do cdb1. Teraz musisz je tylko stamtąd wyciągnąć. Teraz kolejno wyciągaliśmy:
Nazwę czcionki, czy jest pogrubiona, czy może z kursywą, oraz jej rozmiar.
Uruchamiamy program i... działa !!!
No dobra, a co z drugim przyciskiem? Jeszcze został kolor czcionki... Do drugiego przycisku dodajemy więc następujący kod:
cdb1.dialogTitle = "Zmieniamy kolor"
cdb1.ShowColor
Uruchamiamy program - naciskamy przycisk kolor - wyskakuje okienko takie jak w Paint. Teraz wybieramy jakiś kolor i OK. Niestety, jeszcze nie działa. Teraz musimy jakoś z cdb1 wyciągnąć kolor - ale jak? Poniżej dopiszmy jeszcze:
lblGotowe.ForeColor = cdb1.color
Teraz uruchamiamy program iii... działa !!!

1. Aby wywołać okno otwórz należy posłużyć się następującym kodem:

cdb1.dialogTitle = "Tytuł"
cdb1.Filter = "Zwykły plik tekstowe|*.txt|Zdjęcia|*.bmp; *.jpg "
cdb1.showOpen

Pewnie zastanawiasz się jak zrobić taki znaczek:  |  . Znajduje się on nad Enter-em obok Backspace-a. Wpisujemy go z Shift-em. Wszystko pewnie jest jasne tylko nie wiesz co to są te filtry. Pewnie się spotkałeś z takimi programami które pozwalają otworzyć tylko niektóre pliki. W powyższym przykładzie program będzie tylko widział pliki txt, a po zmianie opcji także bmp i jpg. Jeśli chcesz aby program widział wszystkie pliki to                cdb1.Filter = "*.*"
No ale co to zwraca ? Zwraca to ścieżkę do pliku - możesz ją wyciągnąć w ten sposób:
Dim x
x = cdb1.fileName
2. Zapisz:

cdb1.DialogTitle = "Tytuł"
cdb1.Filter = "*.*"
cdb1.FileName = "Test.txt"    'Domyślna nazwa pliku
cdb1.ShowSave
Ta funkcja także zwraca właściwość FileName
3. Drukuj
cdb1.DialogTitle = "Tytuł"
cdb.ShowPrinter
Ta funkcja zwraca pewne ustawienia drukarki - ale o tym później
 
Hi ! Dzisiaj znów dość trudna lekcja przed Wami. Powiemy trochę o liście wyboru i listach Combo.
Najpierw zajmiemy się listami wyboru. Co to jest lista wybory - nasuwa się pytanie. Jest to takie "okienko" do którego możemy dodawać różne słowa i je np. posortować ? Zresztą cóż ja będę tu dużo mówił. Zobaczmy listę wyboru na praktycznym przykładzie. Uruchamiamy VB i na formie układamy element nazwany ListBox (kolumna 2 rząd 5 - taka ikonka z prawym paskiem przewijania i białym polem) Uwaga nie pomyl z ComboBox-em - o tym dopiero za chwilę. Pewnie pytasz jak rozpoznać który jest który. Najedź na ikonkę która według ciebie jest tą właściwą. Nic nie naciskaj, i nie ruszaj myszą - za chwilę się pojawi etykietka z nazwą elementu. Dobra - znalazłeś ? Teraz to ułóż na formie. Chmm... wygląda jak TextBox. No dobra, ale jak tym się posługiwać ? Pokaże to na malutkim przykładzie. ListBox nazwij lstLista teraz dodaj przycisk na formie i nazwij go cmdDodaj. Jako właściwość Caption nadaj mu Dodaj. Teraz na formie ułóżmy jeszcze TextBox-a - nazwij go txtWprowadz. No teraz wyjaśnię jak ma działać program. Gdy wpiszemy coś w pole tekstowe i klikniemy Dodaj, to zawartość tego pola tekstowego ma zostać przeniesiona do Listy. Teraz weźmy się za kod. Do przycisku dopisz:
lstLista.AddItem txtWprowadz
txtWprowadz = ""
Uruchom program - wpisz coś w pole tekstowe i kliknij Dodaj. Fajnie tekst przeniósł się do listy! Wpisz coś drugi raz i kliknij Dodaj. Wow, mamy już dwie pozycje.  Teraz przetłumaczymy powyższy kod:
Lista.Dodaj to co w txtWprowadz (czyli w naszym polu tekstowym)
wyczyść pole tekstowe - po co? Po co za każdym razem kasować słowo dodane do listy - lepiej żeby za nas to zrobił komputer :)
Dobra, myślę, że nie miałeś z tym problemu - teraz funkcja usuń. Dodajmy do naszego projektu jeszcze jeden przycisk - nazwij go cmdUsun i jako etykietę nadaj mu Usuń. Teraz jeszcze jeden textBox - nazwij go txtUsun. Teraz nasz program będzie jeszcze potrafił usunąć podaną pozycję listy. Tak więc do przycisku Usuń dodaj następujący kod:
Dim x
x = Val(Text1) - 1
lstLista.RemoveItem (x)
Ho, ho, ho !!! Co to znowu jest za kod. O tym za chwilę. Na razie uruchom program. Dopisz kilka elementów do listy. Teraz w nowe pole tekstowe wpisz liczbę, która będzie pozycją pewnej danej którą chcesz usunąć z listy. Wpisz np. 2 lub 3 (Tyle minimalnie musi być pozycji na liście !!!). Teraz Usuń. Działa. No dobra - ale jak ?
Tłumaczenie: Ostatnia linijka usuwa element x  listy. Ale dlaczego wcześniej jest x = to co w polu tekstowym - 1 ? Dla Visual Basica pierwsza pozycja na liście ma wartość 0, druga 1 itd. Aby to unormować odejmujemy jeden. No i jak to działa ? Jeśli w okienko tekstowe wpiszesz 1 program odejmie od tego 1 i wyjdzie mu zero - więc usunie pierwszą pozycję listy. Chyba kapujesz nie ? Myślę także, że pamiętasz do czego służyła funkcja VAL ( ) - tak ona zamieniała stringi (dane tekstowe) na liczby.
Może powiecie, że ten program jest bez sensu - przecież lepiej jest zaznaczyć ręcznie pozycję którą chcemy usnąć i kliknąć Usuń, zamiast ręcznie liczyć pozycje listy, wpisywać je do TextBox-a i dopiero Usuń. Tego też się nauczycie - ale później. Na razie chcę zobrazować działanie funkcji ListBox po to tylko, aby wyświetlała różne dane, a nie abyśmy nimi swobodnie operowali. No dobra, ale dlaczego nie teraz ? Kod jest pogmatwany i bardzo trudny. Dla zniechęcenia podaję kawałek kodu ;)
Etykieta = costam(LstLista.ItemData(LstLista.ListIndex))
To może nie wygląda tak źle - ale musimy to jeszcze połączyć z tablicami danych o których w następnej lekcji.
Dobra do rzeczy - teraz następna właściwość ListBox-a. Czyszczenie listy - jeśli chcesz usunąć wszystkie elementy list do jakiegoś nowego przycisku dodaj kod:
LstLista.Clear
No dobra - a jak policzyć wszystkie elementy na liście ? Bardzo prosto - wystarczy posłużyć się kodem:
Dim x
x = lstLista.ListCount
Ok - załatwiliśmy prawie wszystko. Zostało nam jeszcze podstawianie pod zmienne. Jeśli chcesz podstawić pod zmienną x np. 4 element listy posłuż się kodem
Dim x
x = lstLista.List(3)
Chyba zrobiłem pomyłkę - my chcemy podstawić 4 element listy, a ja w kodzie napisałem 3. Nie zapomnij, że VB zaczyna liczyć od 0. Dla nas 4 element listy to dla niego trzeci !!!
Teraz jeszcze pewne właściwości listy. 

Columns
Ta właściwość określa ilość kolumn. Jeśli jej wartość jest ustawiona na 0 to mamy zwykłą listę z pionowym paskiem przewijania. Jeśli damy 1 to elementy na liście będą wyświetlone w poziomie. Jeśli damy więcej to elementy będą się układać poziomo, na ekranie będzie widać n kolumn (n to liczba > 1 ). Uff...
MultiSelect
0 - None - oznacza, że możemy wybrać tylko jeden element listy (podobnie jak było z OptionsButton), jeśli 1- Simple, użytkownik może wybrać kilka elementów klikając na nich. 2 - Extended - użytkownik może wybrać kilka elementów listy pod warunkiem, że przytrzyma klawisz Shift
Sorted
Określa czy lista ma być posortowana alfabetycznie, czy też nie
Style
Określa, czy lista ma wyglądać "normalnie" czy bardziej jak zbiór CheckBox-ów ;)


No to by było tyle o liście wybory - został nam jeszcze ComboBox - ale nie bójcie się. Posługiwać się nim będziemy identycznie jak ListBox-em. Są tylko dwie różnice. W ListBox-ie mogliśmy ustawić czy będzie możliwość wybrania jednej czy wielu pozycji. W Combolu możliwe jest tylko wybranie jednej .
Druga - chyba najważniejsza - zamiast stosować ListBox-a + TextBoxa możemy zastosować sam ComboBox. Jak - musimy posłużyć się funkcją rozpoznającą wciśnięty klawisz (o tym będziemy uczyć się w przyszłości). Ułóż na formie ComboBox-a (to ten obok List Box-a, tylko trochę większy). Kliknij na niego dwukrotnie. Zobacz na górę okna - pisze coś takiego :
Private Sub Combo1_Click()
My zamiast click będziemy musieli posłóżyć się KeyDown. No ale jak ? Popatrz jeszcze wyżej. Widać dwa ComboBox-y. W jednym jest wpisane Combo1 a w drugim Click. Zmień to Click na KeyDown i dopisz następujący kod:
If KeyCode = vbKeyReturn Then
Combo1.AddItem Combo1.Text
Combo1.Text = ""
End If
Tłumaczę:
Jeśli nacisnąłeś Enter to
Dodaj do list Combo to co wpisaliśmy
Wyczyść to co wpisaliśmy
Koniec Jeśli
 
Jeśli wiesz do czego służy funkcja DIM i FOR (Właściwie skoro nie wiesz to po co czytasz? ;) ) to bez problemów zrozumiesz tablicę danych. Najczęściej używa się jej w parze z funkcją FOR. Tablica danych to nic innego jak lista zmiennych tego samego typu. Np. nie możemy pomieszać w tablicy stringów i liczb. Podaję praktyczne zastosowanie tablicy danych
Przypuśćmy, że musimy napisać program sumujący 20 zmiennych. Wykorzystując już zdobytą wiedzę napisalibyśmy tak:
Dim Liczba1, Liczba2, Liczba3, Liczba4, Liczba5, Liczba6, Liczba7, Liczba8  (itd...)as Single
wynik = Liczba1 + Liczba2 + Liczba3 + Liczba4 + Liczba5 + Liczba6 + Liczba7 + itd...
Sporo pisania. Gdybyśmy jednak zastosowali tablicę danych wyglądało by to tak:
Dim tablicaliczb(20)
Dim x as byte
For x = 1 to 20
wynik = wynik + tablicaLiczb(x)
Next x
Prawda, że krócej. Tak samo trwa zapisywanie do zmiennych. Gdybyśmy np. chcieli odczytać dane z pliku to musielibyśmy to robić tak:
Dim Liczba1, Liczba2, Liczba3, Liczba4, Liczba5, Liczba6, Liczba7, Liczba8  (itd...) as Single
--- odczyt z pliku - zapisz do zmiennej Liczba1 ---
--- odczyt z pliku - zapisz do zmiennej Liczba2 ---
--- odczyt z pliku - zapisz do zmiennej Liczba3 ---
--- odczyt z pliku - zapisz do zmiennej Liczba4 ---
--- odczyt z pliku - zapisz do zmiennej Liczba5 ---
itd...
Pomyśl sobie, jak byśmy musieli odczytać 300 danych z pliku... Lepiej nie myśleć. Za pomocą tablic danych nawet 1000000 jest dla nas błachostką :)  Oto sposób:
Dim tablicadanych(100)
Dim x as Single
For x=1 to 100
--- odczyt z pliku - zapis do zmiennej tablicadanych(x)
Next x
Prawda, że proste. Jeśli nawet jeszcze tego nie rozumiesz to nie przejmuj się zbytnio - okazję do poćwiczenia tego będziemy mieć za kilka lekcji, kiedy będziemy uczyć się dostępu do plików. Czyli jak odczytać dane, zapisać itp.
 No, teraz zajmiemy się ScroolBar-em. Co prawda jeszcze go nigdy nie użyłem - nawet nie widziałem jego praktycznego zastosowania, ale może się Tobie przydać. Jak go umieścić na formie. Bardzo łatwo. Znajduje się on (one - bo są dwa - poziomy i pionowy) zaraz pod ComboBox-em i ListBoxem. Tak to te 2 paski pionowy i poziomy z strzałeczkami na końcach. Umieść np. pionowy na formie. Rozciągnij go aby był jak najwyższy. Teraz uruchom program. Chmmm... Wygląda jak zwykły pasek do przewijania tekstu. Faktycznie, tak samo wygląda, ale służy do czego innego. Zwraca on wartość która może posłużyć np. do manipulacji wielkości czcionki w jakiejś etykiecie. Zanim napiszemy programik musisz poznać 4 właściwości ScrollBar-a.

SmallChange
Tłumacząc - Mała zmiana. Oznacza wartość o którą zmieni się ScrollBar po naciśnięciu jednej ze strzałek
LargeChange
Tłumacząc - Duża zmiana. Oznacza wartość o którą zmieni się ScrollBar po kliknięciu gdziekolwiek na pasku
Min
Wartość minimalna paska
Max
Wartość maksymalna paska


No to bierzemy się za pisanie programu:
Na formie mamy już ułożony scrollbar, teraz jeszcze ułóżmy dość dużą etykietę. Nazwijmy ją lblCzcionka jako wartość Caption nadaj jej TEST. OK. Teraz musimy spowodować, aby regulując ScrollBar-em regulować wielkość Czcionki. Musimy zmienić właściwości Min i Max. Dlaczego? Zaznacz ScrollBar i w okienku Properties odnajdź właściwość Min. Domyślnie jest 0. Wielkość czcionki 0? To chyba jest niemożliwe !!! Najmniejsza to 1. Zmieńmy więc Min z 0 na 1. Teraz powyżej mamy właściwość Max. 32767 - takiej wielkości czcionka ?! W życiu nie zmieściłaby się na monitorze. Zmieńmy na 50. Dobra - ustalmy jeszcze SmallChange. Jest 1 no i chyba tak zostanie. Po kliknięciu na strzałce wielkość czcionki zmieni się o jeden - mniej nie ma sensu a więcej też się nie opłaci, bo nie będziemy mogli dokładnie ustawić wielkości czcionki. W większości przypadków SmallChange zostaje 1. Teraz bierzmy się za LargeChange. Co też 1 ? Nie zmieńmy to na 5. OK. Właściwości paska ustawione. Teraz dopiszemy do niego kod. Kliknij więc na nim dwukrotnie i dopisz:
lblCzcionka.FontSize = VScroll1
Uruchom teraz program - musisz kliknąć aż 7 razy na strzałce w dół aby zobaczyć efekt.