Discussion:
Focus - raz jeszcze - nie wiem jak sobie z tym poradzic :((
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
kowal
2004-09-12 10:51:21 UTC
Permalink
Mam formularz z podformularzem

Podformularz zawiera wszystkie formanty parami: pole tekstowe i pole kombi

W formularzu glowny jest dwustanowy przycisk Edytuj

Jesli przycisk jest wylaczony to w podformularzu nie mozna nic edytowac i
wartosci formantow sa wyswietlane w polu tekstowym a pole kombi jest wowczas
ukryte.
Po nacisnieciu przycisku Edytuj w formularzu glownym, podformularz staje sie
edytowalny i pola tekstowe staja niewidoczne a widoczne staja sie pola kombi
ktore umozliwiaja wprowadzanie i edycje wartosci.

Problem pojawia sie wowczas gdy bedac np. w trybie edycji (mam widoczne pola
kombi) kliknę na jakimś polu kombi ( czyli ustawię tam focus) i spróbuję
wyłączy edycję przyciskiem Edytuj z formularza glownego. W tym momencie
Access krzyczy mi ze nie moge ukryc formantu posiadajacego fokus.

Probowałem zrobić to tak ze zanim ukryje pole kombi robie widoczne pole
tekstowe ustawiam na nim focus i ukrywam pole kombi - bez efektu.
Próbowałem również ustawić focus na jakiś formant w formularzu głównym w
momencie zmiany stanu przycisku Edytuj - bez efektu.

Nie mam żadnego pomysłu jak to rozwiązać, całkiem sie zamotałem w tych
ustawieniach focusa, powinieniem ponoć użyć gdzieś metody repaint ale moje
próby z ta metodą też nie przyniosły efektu.

Wszelkie ukrywania i odkrywania w podformularzach wykonuje z poziomu
formularza głównego.

Bardzo prosibym o jakiś łopatologiczny opis jak to rozwiązać bo odnoszę
wrażenie że zaczynam się krecić w kółko.

Dzieki za pomoc,

kowal
Krzysztof Jarocki
2004-09-12 13:09:32 UTC
Permalink
Post by kowal
Problem pojawia sie wowczas gdy bedac np. w trybie edycji (mam widoczne pola
kombi) kliknę na jakimś polu kombi ( czyli ustawię tam focus) i spróbuję
wyłączy edycję przyciskiem Edytuj z formularza glownego. W tym momencie
Access krzyczy mi ze nie moge ukryc formantu posiadajacego fokus.
Gdybys do calego zagadnienia podszedl obiektowo
i kazdemu obiektowi przekazal odpowiedzialnosc za swoje czynnosci
moglo by to wygladac tak:

1. Podformularz ustawia wlasciwosci Enabled, Visible i Focus swoich
kontrolek
lacznie z przekazaniem Focus swemu obiektowi nadrzednemu Parent.
2. Formularz nadrzedny odpowiadal by tylko i wylacznie za stan przycisku i
zaleznie
od tego stanu uruchamial by zdarzenia inicjujace w podformularzu.

W Twoim przypadku formularz z przyciskiem w momecie zdarzenia Click
powienien sprawdzic swoj stan i jesli to konieczne w danym kontekscie,
wydac polecenie podformularzowi aby ten zainicjowal ponownie swoj stan
(w tym wypadku blokada edycji).
Podformularz powinien przekazac Focus swojemu Parent lub jakiemus
wlasnemu przyciskowi,
a nastepnie powinien zainicjowac stan swoich kontrolek.

Np. tak:

'Przekazanie fokusu do formularza nadrzednego
Dim frm As Form_FormularzNadrzedny
Set frm = Me.Parent
frm.SetFocus

'ustawienie wlasnych kontrolek
Me.NazwaKontrolki.Enabled = False 'lub True
Me.NazwaKontrolki.Visible = False 'lub True
Krzysztof Jarocki
2004-09-12 13:43:20 UTC
Permalink
Jeszcze zasadnicza Uwaga.
kontrolki edytowalne w podformularzu, zawsze beda mialy fokus i aby sie tego
pozbyc
najlepiej stworzyc sobie jakas kontrolke pomocnicza
np. TextBox i nadac jej wlasciwosci Color i SpecialEffect takie,
aby nie byla ona widoczna na tle podformularza.
Teraz mozemy tej kontrolki uzyc do przeniesienia na nia Focus w momencie
ustawiania
wlasciwosci innych kontrolek

Utworzylem w podformularzu dodatkowy TextBox: tbTemp.
Post by Krzysztof Jarocki
'Przekazanie fokusu do formularza nadrzednego
Dim frm As Form_FormularzNadrzedny
Set frm = Me.Parent
Me.tbTemp.SetFocus '<---------------------------------------
Post by Krzysztof Jarocki
frm.SetFocus
'ustawienie wlasnych kontrolek
Me.NazwaKontrolki.Enabled = False 'lub True
Me.NazwaKontrolki.Visible = False 'lub True
Teraz nastepuje wymuszenie przeniesienia Focus wewnatrz podformularza
dezaktywacja kontrolek i przeniesienie Focus do formularza nadrzednego.
kowal
2004-09-12 16:19:02 UTC
Permalink
Dziękuję za wszystkie sugestie, sam próbowałem zaimplementować obsługę
widoczności za pomocą wewnętrznej funkcji podformularza.
Potem tą funkcję wywoływałem z poziomu formularza na zasadzie:
Form_Podformularz.Widocznosc(True|False), ale coś mi to nie chciało działać
i się z tego wycofałem ( dlaczego ? nie pamiętam - odłożyłem ten problem na
poźniej i zająłem się innym zagadnieniami )

Spróbuję zrobić tak jeszcze raz ....

Dzięki :)

kowal
Adam Kowal
2004-09-12 17:18:15 UTC
Permalink
No niestety nie działa :(

W podformularzu jest zaimplementowana procedura publiczna Edytowalany która
m.in. ustawia focus na dodatkowe pole tekstowe o nazwie F_Focus
W formularzu jest wywolywana procedura: call
PodFormularz.Edytowalny(False|True)
W której na początku po poleceniach:

Me.AllowEdits = Znak
Me.AllowAdditions = Znak

jest:
Me.F_FOCUS.SetFocus

Niestety na tej linii Access zgłasza błąd:

Run-time error '2105'
Przejście do podanego rekordu nie jest możliwe


kowal
Krzysztof Wi¶niewski
2004-09-12 21:01:59 UTC
Permalink
U?ytkownik "kowal" <***@zigzag.pl> napisa? w wiadomo?ci news:JSV0d.280485$***@news.chello.at...
| Mam formularz z podformularzem
|
| Podformularz zawiera wszystkie formanty parami: pole tekstowe i pole kombi
|
| W formularzu glowny jest dwustanowy przycisk Edytuj
|
| Jesli przycisk jest wylaczony to w podformularzu nie mozna nic edytowac i
| wartosci formantow sa wyswietlane w polu tekstowym a pole kombi jest
wowczas
| ukryte.
| Po nacisnieciu przycisku Edytuj w formularzu glownym, podformularz staje
sie
| edytowalny i pola tekstowe staja niewidoczne a widoczne staja sie pola
kombi
| ktore umozliwiaja wprowadzanie i edycje wartosci.
|
| Problem pojawia sie wowczas gdy bedac np. w trybie edycji (mam widoczne
pola
| kombi) kliknę na jakimś polu kombi ( czyli ustawię tam focus) i spróbuję
| wyłączy edycję przyciskiem Edytuj z formularza glownego. W tym momencie
| Access krzyczy mi ze nie moge ukryc formantu posiadajacego fokus.
|
| Probowałem zrobić to tak ze zanim ukryje pole kombi robie widoczne pole
| tekstowe ustawiam na nim focus i ukrywam pole kombi - bez efektu.
| Próbowałem również ustawić focus na jakiś formant w formularzu głównym w
| momencie zmiany stanu przycisku Edytuj - bez efektu.
|
| Nie mam żadnego pomysłu jak to rozwiązać, całkiem sie zamotałem w tych
| ustawieniach focusa, powinieniem ponoć użyć gdzieś metody repaint ale moje
| próby z ta metodą też nie przyniosły efektu.
|
| Wszelkie ukrywania i odkrywania w podformularzach wykonuje z poziomu
| formularza głównego.
|
| Bardzo prosibym o jakiś łopatologiczny opis jak to rozwiązać bo odnoszę
| wrażenie że zaczynam się krecić w kółko.
|
| Dzieki za pomoc,
|
| kowal

Albo czegoś nie załapałem, albo rozwiązanie leży jak na dłoni:

W kodzie przycisku "Edytuj" ustaw focus na czymś innym, zanim zmienisz stan
podformularza!

Czyli:
Me.GdziekolwiekPozaPodformularzem.SetFocus
'i dalej to samo co masz!

Uwaga na stan "Dirty"! Warto zapisać dane w podformularzu:

If Me.NazwaPodformularza.Form.Dirty = true then
Me.NazwaPodformularza.Form.Dirty = False

i po krzyku.

Pozdrawiam,
Krzysiek
kowal
2004-09-13 10:02:06 UTC
Permalink
Sprawa się wyjaśniła - funkcja głupiała gdy podformularz nie miał żadnych
rekordów i wtedy generował ten komunikat.
Pojawiał się on w momencie uruchomienia formularza głównego ( na
nieszczeście - pierwszy rekord w formularzu głównym nie posiadał żadnych
rekordów do wyświetlenia w podformularzu. )

Jak to poprawiłem to wszystko zaczeło działać.

Dzieki za pomoc :))

kowal

Loading...