Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Dużo opcji wyboru
Tamgo




Typ: neutral
Postów: 129
Zarejestrowany: Aug 2004
Dużo opcji wyboru

Witam.
W moim programie, który "składam" znajduje się sporo optionów. Na jednym z okien mam ich 7. Nazwę je dla przykładu Opt1, Opt2 .......Opt7.

Opt1 i Opt2  TO OPCJE DWÓCH RÓŻNYCH TEMATÓW

Po wykonaniu się Form_Load() ustawione "wyjściowo" są: Opt1, Opt3 i Opt5.

Opt1 wyłącza Opt2 lub odwrotnie - niezależnie od pozostałych
Opt3 wyłącza Opt4 lub odwrotnie - niezależnie od pozostałych
Opt5,6 i 7 wzajemnie sie wykluczają - nie wpływają na pozostałe

Ale dla Opt1 rozszerzeniem jest zarówno Opt3 lub Opt4
Dla Opt2 również rozszeżeniem są Opt3 lub Opt4
           
Wymyśliłem sobie, że userowi najwygodniej bedzie przywracać ustawienia "wyjściowe" przechodząc z Opt2 na Opt1. Bardzo prostym zapisem.Chodzi o to, że przechodząc z jednego tematu (Opt2) do drugiego tematu (Opt1) niejako z powrotem, wygodnie jest mieć wszystko przygotowane.

Private Sub Opt1_Click()
Opt1.value = true
Opt3.value = true
Opt5.value = true
End Sub

Tu mam pytanie. Czy nie wywołam zakłóceń, bo przecież user zechce korzystać z innych opcji przy aktywnej Opt1. A ja w kodach będę miał uwarunkowania chyba (tak mi się zdaje) wymuszające. Np:
Co bedzie gdy user włączy Opt4 (wyłączy wówczas Opt3)- bo można to zrobić przy takim zapisie.
Czy takie działanie może "namieszać" w obliczeniach. A tak wogóle, czy muszę dla przełączania optionów stosować If - owanie, czy też można posłużyć się takim jak wyżej "lekkim" zapisem?.
Nie wiem czy zrozumiale napisałem, za wyjaśnienie bedę wdzięczny.

26-02-2005 00:23
Pokaż profil Tamgo  Wyślij email do Tamgo        4484571
Ravender




Typ: neutral
Postów: 30
Zarejestrowany: Feb 2005

Wiesz co? Problem moze nie jest zbyt trudny, ale sposob jego opisania .. nie daje szans na jego zrozumienie. Jakbys mogl uproscic swoj przyklad do poziomu powiedzmy 2 czy 3 optionow.

26-02-2005 12:29
Pokaż profil Ravender  Wyślij email do Ravender   Odwiedź stronę Ravender       2854667
Tamgo




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

Starałem się maksymalnie opisać sytuację. Ale już doszedłem sam - nie ma znaczenia dla prawidłowej pracy programu przestawianie optionów w moim progu, bo zmiana ustawień optionów po wykonaniu Load jest tylko dla zdarzenia Click. Więc nie ma znaczenia co jest w liniach kodu, po prostu Click je ustawi, jak zechcę i nic złego nie ma.

Aktualne pozostaje pytanie:
Czy muszę dla przełączania optionów stosować koniecznie warunek czyli If - owanie, czy też można posłużyć się takim "lekkim" zapisem?.

Przykład: mam 2 optiony
linie kodów:

Private Sub Form_Load() 
Opt1.value = true
End Sub

Private Sub Opt1_Click()
Opt1.value = true
Opt2.value = false
End Sub

Private Sub Opt2_Click()
Opt2.value = true
Opt1.value = false
End Sub

Czy muszę koniecznie stosować instrukcję warunkową

Private Sub Opt1_Click()
If Opt1.value = true Then
Opt2.value = false
End If
End Sub

itd.....

Który zapis jest prawidłowy (wg mnie oba), który daje lepszą jakość pracy progu i stwarza mniej zagrożeń? Dotyczy oczywiście to sytuacji, gdy zechcę aby w momencie przełączenia wydarzyło się coś więcej, niż tylko zmiana opcji np; gdzieś zmieniam obrazek, czy nawet wywołam zmienną dla innego obiektu, czy wywołać mam zupełnie inne zdarzenie.

[Post edytowany dnia 26-02-2005 14:56 przez Tamgo]

26-02-2005 14:48
Pokaż profil Tamgo  Wyślij email do Tamgo        4484571
Ravender




Typ: neutral
Postów: 30
Zarejestrowany: Feb 2005

Na moj gust przy dwoch Optionach zapis "lekki" jest calkiew ok. Pozostaje jedynie dopisanie jakies procedury sprawdzajacej, ktore optiony sa wybrane.. czyli cos na ksztalt

Public Sub SPRAWDZENIE()
if opt1.value = true then
'JAKEIS TAM LINIE PROGRAMU
end if

if opt1.value = true then
'JAKIES TAM INNE LINIE PROGRAMU
end if

a potem wstawienie tego tutaj:

Private Sub Opt1_Click()
Opt1.value = true
Opt2.value = false
Sprawdzenie
End Sub

Taki zapis wydaje mi sie bezpieczny, dosc przejrzysty i z pewnoscia sam bym taki zrobil. Ale to oczywiscie moje zdanie

[Post edytowany dnia 26-02-2005 15:22 przez Ravender]

26-02-2005 15:20
Pokaż profil Ravender  Wyślij email do Ravender   Odwiedź stronę Ravender       2854667
karolinavb




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

Tomaszu, ja mam takie pytanie:
- skoro np. opt1 i opt2 są zależne wzajemnie (nie wiem w jakim kontenerze je obie umieściłeś, aby stanowiły zależną od siebie grupę w PictureBox czy Frame ?) to kod jak niżej:

Private Sub Opt1_Click()
Opt1.value = true
Opt2.value = false
End Sub


Private Sub Opt2_Click()
Opt2.value = true
Opt1.value = false
End Sub

jest nie potrzebny, ponieważ zawsze kliknięcie w 1-den z zależnych od siebie Option Button włącza ten "kliknięty" (pojawia się kropka) , a wyłącza pozostałe, które znajdują się z nim w grupie ?
Bo jak inaczej je grupujesz czyniąc wzajemnie zależnymi w poszczególnych grupach?
A jeśli są właściwie pogrupowane w swoich kontenerach wówczas dla przywrócenia ustawień początkowych w innej grupie np wystarczy:

Private Sub Opt1_Click() 
'''''''''' Opt1.value = true
Opt3.value = true
Opt5.value = true
End Sub


_____________________________________________
Karolina

27-02-2005 01:01
Pokaż profil karolinavb  Wyślij email do karolinavb   
Tamgo




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

Umieściłem je w trzech niezależnych kontenerach - Frame, bo tak mi odpowiadało. Tworzą odzielne sekcje w układzie:

opt1  opt2   
opt3  opt4    op3 i opt4 rozszerza zakres opt1 lub opt2

opt5
opt6  (opt5,6 i 7  wybierane tylko dla aktywnej opt1)
opt7

Masz rację Karolino, to również upraszcza linie chociaż....Revender zasugerował mi procedurkę sprawdzającą, które optiony są właśnie aktywne. Czy wg Was , muszą być procedury sprawdzające? Jeśli tak w jakich okolicznościach. Czy program wymaga takiego nadzoru.
Wypada mi więc tutaj uzupełnić, że program ma "niestety" 15 okien (myślałem ,że będzie mniej), a optionów łącznie 45. Dla atrakcyjniejszej wizualizacji, aktywne optiony przyjmują inne kolory liter i tła, natomiast ich rozmaite konfiguracje umożliwiają dokonywanie obliczeń uwzględniających pełne spectrum potrzeb użytkownika. Tak więc optionami sterowana jest głównie metodyka dokonywania obliczeń (co i w jaki sposób ma być policzone). Również sprzęgane są poszczególne gałęzie programu ze sobą. Mają więc istotną rolę do spełnienia. Okna zaś chowane są poleceniem Unload Me. Za wszelkie sugestie będę wdzięczny, pozdrawiam.

[Post edytowany dnia 27-02-2005 16:34 przez Tamgo]

27-02-2005 16:16
Pokaż profil Tamgo  Wyślij email do Tamgo        4484571
karolinavb




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

Jeśli jeszcze mogę sobie Tomaszu pozwolić na dodatkowe uwagi....Sorry jeśli to już wiesz, ale nie wynikało to z powyższej dyskusji...

Skorzystałabym z tablicy kontrolek dla każdej Frame i tak na przykład (oczywiście nazwy są tylko umowne) dla Frame1 :

kontrolki opt1  opt2  objęłabym, jeśli tak można powiedzieć tablicą OptionNazwaGrupyPrzeznaczenie1 i wówczas

opt1 byłaby kontrolką OptionNazwaGrupyPrzeznaczenie1(0)
opt2 byłaby kontrolką OptionNazwaGrupyPrzeznaczenie1(1)

dla np. Frame2 kontrolki opt3  opt4  opt5 objęłabym tablicą np. OtionNazwaGrupyPrzeznaczenie2 i wówczas

Opt3 byłaby kontrolką OptionNazwaGrupyPrzeznaczenie2(0)
Opt4 byłaby kontrolką OptionNazwaGrupyPrzeznaczenie2(1)
Opt5 byłaby kontrolką OptionNazwaGrupyPrzeznaczenie2(2)

itd... analogicznie dla pozostałych grup zależnych od siebie grup kontrolek.

Celowo wpisałam tak długą nazwę OptionNazwaGrupyPrzeznaczenie aby zaznaczyć, że uważam iż nazwy poszczególnych grup powinny mieć związek z rolą jaką pełnią te grupy kontrolek, to bardzo ułatwia pisanie kodu i identyfikację "co do czego służy".

Przy zastosowaniu tablic kontrolek dla poszczególnych grup OptionButton możemy posługiwać się dla każdej grupy 1-dnym zdarzeniem Clik (i innymi zdarzeniami analogicznie). Zdarzenie to wówczas ma parametr Index, który identyfikuje, która z pojedynczych kontrolek w grupie objętej tablicą została wybrana i tak na przykład:

Private Sub OptionNazwaGrupyPrzeznaczenie1_Click(Index As Integer)
    MsgBox Index
    Select Case Index
        Case 0
            ' tu piszemy co mamy robić gdy zdarzenie
            ' click wystapiło dla 1-szej kontrolki w tej grupie
        Case 1
            ' analogiczni dla 2-giej kontrolki w grupie
    End Select
End Sub

Gdzie Index, od 0 do (liczby kontrolek w danej grupie-1) tablicy kontrolek w grupie  identyfikuje daną kontrolkę w grupie, w ten sposób nie szukamy w kodzie poszczególnych zdarzeń dla każdej kontrolki OptionButton, a tylko dla grupy ( i mamy mniej "punktów" do edycji kodu i "zbiorczo zestawione" operacje jakie dane zdarzenia mają powodować.


_____________________________________________
Karolina

28-02-2005 09:39
Pokaż profil karolinavb  Wyślij email do karolinavb   
Tamgo




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

Od początku tak myślałem, a ty mnie tylko utwierdziłaś w tym przekonaniu. Tylko, kurczę tablice są moją słabą stroną - dobrze - przyznaję się , ja się w nich gubię. Nie umiem sobie z nimi poradzić. Jak tu w ten swój "tępy łeb" wbić te tablice? Może masz jakieś źródło z których jasno można ten temat zrozumieć, tylko proszę nie po angielsku, nie dobijaj leżącego.
Pozdrawiam.

28-02-2005 18:21
Pokaż profil Tamgo  Wyślij email do Tamgo        4484571
karolinavb




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

Tablicę kontrolek można stworzyć dla każdej grupy "manualnie".
Może opiszę sposób tworzenia tablicy na przykładzie:

- nanieś na formę kontrolkę OptionButton

- nazwij ją OptionNazwaGrupyPrzeznaczenie1 (przykładowo oczywiście, nazwę nadajesz taką jak chcesz by dana grupa się nazywała) wszystkie kontrolki w tej grupie  będą miały w nazwie jako prefiks  tę nazwę + Index w nawiasie

- skopiuj tę kontrolkę do schowka (Edit/ Copy)

- wklej kontrolkę (Edit/ Paste) , na pytanie czy utworzyć tablicę kontrolek (Do you want to create a control array?) odpowiedz twierdząco (wklej tyle razy kontrolkę ile ich ma być w danej grupie -czyli u  Ciebie na przykład  dla grupy 1-szej 1 raz bo jest ich 2 sztuki  a dla innej grupy tyle razy ile trzeba, dla 3-ch 2 razy)

- otrzymasz 2 kontrolki ponumerowane z indeksem 0 i 1 (indeksy możesz zobaczyć w oknie właściwości) w tym przykładzie: OptionNazwaGrupyPrzeznaczenie1(0) i OptionNazwaGrupyPrzeznaczenie1(1) czyli w tej tablicy OptionNazwaGrupyPrzeznaczenie1  są 2 kontrolki

- zaznacz obie te kontrolki i wytnij je (w opcji menu Edit/Cut)

- zaznacz Frame, w której mają być na przykład  Frame1 i wstaw je (w opcji Edit/ Paste) powinny się znaleźć w ramce, poprzesuwaj jak Ci pasuje w obrębie Frame1


Od tej pory w kodzie możesz się odnosić do tych przykładowo 2-ch kontrolek OptionNazwaGrupyPrzeznaczenie1(0), a zdarzenie na przykład Clik dla tej grupy będzie miało postać jak w poprzednim moim poście.
Nie wiem czy to jest przejrzyste, ale jak już mówiłam nie za dobry ze mnie wykładowca.

P.S. W katalogu przykładów w VB 6 jest aplikacja Calc.vbp gdzie
do tworzenia kalkulatora użyto tablicy kontrolek CommanButton

[Post edytowany dnia 28-02-2005 21:06 przez karolinavb]


_____________________________________________
Karolina

28-02-2005 21:01
Pokaż profil karolinavb  Wyślij email do karolinavb   
Wszystkich odpowiedzi: 8 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1