Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Moja pierwsza tablica - proszę mi pomóc, pilne
Tamgo




Typ: neutral
Postów: 129
Zarejestrowany: Aug 2004
Moja pierwsza tablica - proszę mi pomóc, pilne

Witam wszystkich
W moim progu mam trochę Optionów. W jednym z okien zaznaczeniem jednego lub drugiego Optiona chcę powodować odpowiednie wyświetlenie nazw jednostek (stopni lub procentów) w Labelach 6 innych okien.
W związku z tym chcę zbudować tablicę jednowymiarową. Elementami tablicy mają być poindeksowane Captiony Labeli mające wyświetlać nazwy jednostek. 12 elementów dla symbolu stopni i 12 elementów dla symbolu procenta.

Chcę w bas module określić elementy tablicy i zadeklarować zmienne publiczne:

Public Jedn As Boolean  ' zmienna przyjmująca nazwę jednostki
Public Stop 0 To 11 As Boolean  ' tablica jedn. stopni
Public Proc 0 To 11 As Boolean  ' tablica jedn. procentów
Public Index As Integer

poniżej:

i = Index

Wk.lbl1.Visible = Stop(0) ' określenie tablicy dla stopni
Mg.lbl1.Visible = Stop(1) ' Wk czy Mg to nazwy Form
....... itd

Wk.lbl2.Visible = Proc(0) ' określenie tablicy dla procentów
Mg.lbl2.Visible = Proc(1)
....... itd.

Procedura:
Sub Zmien()
If WSP.OptStop.Value = True Then ' WSP to okno z którego jest sterowanie
  Jedn = Stop
    For i 0 To 5
      Stop = True
    Next
ElseIf Wsp.OptProc.Value = True Then
  Jedn = Proc
    For i 0 To 5
      Proc = True
    Next
End If
End Sub

Czy jest to prawidłowy zapis?

Z góry dziękuję

05-03-2005 14:59
Pokaż profil Tamgo  Wyślij email do Tamgo        4484571
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Public tStop (0 To 11) As Boolean  ' stop jest poleceniem vb i nie możesz tak nazwać tablicy
Public Proc (0 To 11) As Boolean  ' tablica jedn. procentów
Public Index As Integer



i = Index

Wk.lbl1.Visible = tStop(0) ' określenie tablicy dla stopni
Mg.lbl1.Visible = tStop(1) ' Wk czy Mg to nazwy Form
....... itd

Wk.lbl2.Visible = Proc(0) ' określenie tablicy dla procentów
Mg.lbl2.Visible = Proc(1)
....... itd.

Procedura:
Sub Zmien()
If WSP.OptStop.Value = True Then ' WSP to okno z którego jest sterowanie
  Jedn = Stop 'muszisz podać element
    For i = 0 To 5
      Stop = True
    Next
ElseIf Wsp.OptProc.Value = True Then
  Jedn = Proc
    For i = 0 To 5
      Proc = True
    Next
End If
End Sub


_____________________________________________
www.mob.abc.pl - moja strona o VB

05-03-2005 18:52
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
Tamgo




Typ: neutral
Postów: 129
Zarejestrowany: Aug 2004

Tak jest, mój VB zaczął się buntować przez tego STOP'A, intuicyjnie zminiłem zmienne na... jak widać. Także VB dopomniał się o określenie elementów (zaznaczone na czerwono). Również wymusił na mnie prawidłową deklarację tablicy - bo chyba tak jest dobrze, określa tablice 12 - to elementowe. Jednak coś jest jeszcze do luftu. Efekt jest taki, że nie odkrywa mi ukrytych labelek. Sprawdzałem w Immediate Window, wszystkie pętle pracują prawidłowo. Dlaczego mi w takim razie nie odkrywa?

Public Jedn As Boolean  ' zmienna przyjmująca nazwę jednostki
Public Stp (11) As Boolean  ' tablica kontrolek z jedn. stopni
Public Prc (11) As Boolean  ' tablica kontrolek z jedn. procentów
Public Index, i As Integer

poniżej:

i = Index

Wk.lbl1.Visible = Stp(0) ' określenie tablicy dla stopni
Mg.lbl1.Visible = Stp(1) ' Wk czy Mg to nazwy Form
....... itd

Wk.lbl2.Visible = Prc(0) ' określenie tablicy dla procentów
Mg.lbl2.Visible = Prc(1)
....... itd.

Procedura:
Sub Zmien()
If WSP.OptStop.Value = True Then ' WSP to okno z którego jest sterowanie
  Jedn = Stp (index)
    For i 0 To 5
      Stp (index) = True
    Next
ElseIf Wsp.OptProc.Value = True Then
  Jedn = Prc (index)
    For i 0 To 5
      Prc (index) = True
    Next
End If
End Sub

Zauważyłem też, że prog wykonuje dla wszystkich okien polecenie Load -(F8), może tutaj coś sknociłem. Ale przecież dla Load przez te tablice nic się chyba nie zmienia, a może się mylę?

[Post edytowany dnia 05-03-2005 21:03 przez Tamgo]

05-03-2005 20:57
Pokaż profil Tamgo  Wyślij email do Tamgo        4484571
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Tomaszu

1. Wywołanie jakiejkolwiek właściwości formy, która jeszcze nie była załadowana do pamięci np:

Wk.lbl2.Visible

powoduje wykonanie procedury Load tej formy (MSDN - "Life Cycle of Visual Basic Forms" ), ale poniższe linijki powodują wywołanie już tylko Initialize dla form2

Dim ofrm As Form2
Set ofrm = New Form2
call ofrm.ProcAla  ' gdzie ProcAla jest publiczną procedurą w Form2

ale już poniższa linijka wywoła zdarzenie Load dla Form2

ofrm.Command1.Caption = "xxxxx"

2. Twoja zmienna index jest variant powinna być integer raczej...integer

a w pętli:

For i 0 To 5
      Stp (index) = True
Next


zmienia się tylko zmienna "i" a pozycja Stp(index) to stale ten sam element tablicy...indeks "index" nie ulega zmianie w tej pętli, więc jak potem korzystasz z tej tablicy to masz False tam wpisane.

Nazwanie zmiennej "index" nie jest szczęśliwym wyborem...


_____________________________________________
Karolina

06-03-2005 13:05
Pokaż profil karolinavb  Wyślij email do karolinavb   
Tamgo




Typ: neutral
Postów: 129
Zarejestrowany: Aug 2004

Oczywiście, oświeciłaś mnie, lecz nadal czegoś nie rozumiem.  Żeby nie wdawać się w zbędną polemikę - bo dla mnie Twoje wypowiedzi są autorytatywne, wiem że masz rację co do nazwy zmiennej. Właśnie Bisiek i Ty mi to uświadomiliście. Chcę powiedzieć, że ja pamiętam o żelaznej zasadzie nadawania nazw zmiennym, a te błędy wynikają jedynie z braku znajomości wszystkich słów zastrzeżonych  jak również z małej znajomości sztuki. Intencją było zadeklarowanie indeksu, zrobiłem to oczywiście źle. Załóżmy, że nadam jej inną nazwę, jednak zadeklarowałem tę zmienną jako Integer - na czerwono zaznaczone słowo index powininno być zapisane dużą literą "Index", popełniłem błąd prezentując przykład, czemu zatem twierdzisz, że jest Variantem? Hmm proponuję -  może zbyt dużo czekuję - czy możesz mi wykonać fragmentaryczny zapis na przykładzie tego mojego zapisu, myślę, że wtedy moje komóry dostaną lepszego "kopa" i zwyczajnie załapię..... A...StatusBar - wymyśliłem, aby to on był odbiorcą tych zmiennych, to by mi trochę uprościło bo ilość obiektów zmniejszyłbym do 5, natomiast pouczenie na temat budowania tablicy kontrolek i wykorzystania zmiennej do sterowania właściwościami w tej tablicy z pewnością mi się przyda.
Będę wdzięczny, pozdrawiam.

07-03-2005 11:03
Pokaż profil Tamgo  Wyślij email do Tamgo        4484571
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

1. W linijce
Public Index, i As Integer

zmienna "i" została zadeklarowana jako Integer, zmiennna natomiast "Index" nie ma zadeklarowanego jawnie typu jest zatem typu Variant.

"By default, if you don't supply a data type, the variable is given the Variant data type"


2. Jeśli chodzi o słowo Index , to jeżeli na przykład dołączysz w projekcie refrencje do Microsoft DAO X.X Objects Library (biblioteka obsługi baz danych) to zobaczysz wtedy, że Index jest wówczas słowem kluczowym, nawet użyte bez przedrostka ( o które zawsze tak walczę) , ponadto w niektorych zdarzeniach jest nazwą parametru i dlatego niebezpiecznie jest uzywać takiej nazwy zmiennej.
3. Ja Cię nie pouczałam (to słowo nieładnie brzmi) ja tylko na wszelki wypadek opisałam sposób tworzenia tablic kontrolek, gdybyś nie znał... sorry jak to wygladało na pouczenie , pewnie to taka moja brzydka maniera, ale jutro Dzień Kobiet, wiec wybaczysz mi chyba...

4.  "czy możesz mi wykonać fragmentaryczny zapis"  - tu nie wiem o jaki zapis chodzi, mnie chodziło o to by nazwa zmiennej Index była zamieniona chociażby na słowo mojIndeks w kodzie, a deklaracja wygladała tak:

Public mojIndeks as integer ' albo long jak trzeba
Dim i As Integer

5. Nie jestem autorytetem.... chociaż może czasem zwłaszcza w męskim gronie bym chciała , jeśli chodzi o programownaie oczywiście tylko...

[Post edytowany dnia 07-03-2005 12:04 przez karolinavb]


_____________________________________________
Karolina

07-03-2005 11:54
Pokaż profil karolinavb  Wyślij email do karolinavb   
Tamgo




Typ: neutral
Postów: 129
Zarejestrowany: Aug 2004

Karolino, dobra kobieto. Nie jestem samcem, który się puszy tylko dlatego, że jest właśnie samcem. Mnie wcale nie ujmuje słowo pouczenie. Jeśli jednak to Ciebie irytuje, to przepraszam, nie użyję go więcej, ale... jesteś kobietą, która wg mnie doskonale się orientuje, bo wie co mówi i umie to zasadnić. Nie ma dla mnie znaczenia, kto  udziela mi rady, jeśli jest w niej zawarta mądrość, która może tylko pomóc. Więc nie odwołuję słowa "autorytatywnie". Autorytetem jest tu każdy, kto ma coś mądrego do powiedzenia i dla mnie każdy, kto umie mi pomóc nim jest. To tak na marginesie.
Widzisz, deklarując zmienne "w jednej serii" np;
Dim a,b,c,d As Integer
byłem przekonany, że robię prawidłowo, a tu się okazuje, że nie. Stąd moje zaskoczenie.
Aprop's kodu chodziło mi o ten mój zapisany poprawnie, ale w pkt4 już wszystko wyjaśniłaś.
Będę dalej walczył, może coś zwojuję.
Dzięki za podpowiedzi, życzę na zakończenie Kobiecie wszystkiego naj...... nie tylko z okazji 8 marca, ale wogóle na codzień. Trzymaj się.

07-03-2005 13:01
Pokaż profil Tamgo  Wyślij email do Tamgo        4484571
Wszystkich odpowiedzi: 6 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1