Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

492 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

27 april 2024, 08:01:55

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: A97: ververs/positioneer  (gelezen 8175 keer)

0 leden en 1 gast bekijken dit topic.

Offline NLCOMP

  • Forumheld
  • *****
  • Berichten: 14.666
    • NL Computer Forum
A97: ververs/positioneer
« Gepost op: 9 november 2009, 19:16:10 »
Bericht 1 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:19-10-2004
 Aan:AllMsgID:1464.1
 Onderwerp:A97: ververs/positioneerForum:ws-nlcomputer
Hoi allemaal,

Een tijdje geleden was ik in Access 97 bezig een mechanisme te ontwikkelen om bij het (tijdelijk) verlaten van een formulier (bijvoorbeeld door een klik op een button die een ander formulier opent) de positie in de rijbron te bewaren; als het formulier weer actief wordt, wordt de rijbron ververst (om eventuele wijzigingen meteen in beeld te krijgen), maar wl de oude positie teruggezicht. Naar aanleiding van een vraagje over hoofd- en kleine letters ben ik toen uitstekend verder geholpen (zie thread: Case-sensitive).


Het werkt nu BIJNA helemaal zoals ik wil. Er is n kleine uitzondering. Ik heb op een aantal schermen een button die een ander formulier opent, waarvan de instellingen pop-up en modaal beide op true zijn ingesteld. Nu blijkt dat na een bezoek aan dit formulier de rijbron van het onderliggende formulier niet ververst wordt. Ik heb eens gekeken welke gebeurtenissen allemaal plaatsvinden als ik op de betrefffende knop klik - helaas blijken dat uitsluitend de eigenschappen on_click etc. van de betreffende button te zijn.


Het bewaren van de huidige positie is ondanks dit nog steeds geen probleem; dat kan ik gewoon toevoegen in de on_click routine. Maar de instructies om de rijbron te verversen en de oude positie te herstellen, die kan ik nergens meer kwijt! Aangezien er bij het openen (en later weer sluiten) van een modaal popup formulier kennelijk in het onderliggende formulier geen gebeurtenisprocedures gestart worden (zelfs niet voor LostFocus en GotFocus!) heb ik geen idee hoe ik moet detecteren dat het modale popup formulier gesloten wordt en het onderliggende formulier weer actief wordt.


Een voor de hand liggende oplossing zou kunnen zijn de OnClose gebeurtenis van het modale popup formulier te gebruiken. Dit gaat echter niet, omdat dit formulier vanuit tientallen andere formulieren kan worden geopend.


Is er een elegante oplossing voor dit probleem? Of zit er niks anders op dan de eigenschappen popup en/of modaal van dat andere formulier maar op false te zetten en te leren leven met dan nadelen die dat weer met zich meebrengt?

Groetjes, Hugo


Bericht 2 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:Michel Uphoff (Sysop)Datum:19-10-2004
 Aan:Hugo KornelisMsgID:1464.2
 Onderwerp:A97: ververs/positioneerForum:ws-nlcomputer
>> heb ik geen idee hoe ik moet detecteren dat het modale popup formulier gesloten wordt en het onderliggende formulier weer actief wordt. <<

Hoi Hugo,

Misschien kan je met de OnClick event van de Commandbutton die dat formulier opent een variabele van 0 op 1 zetten of mooier een Boolean van false op true zetten? Vervolgens kan je de status van die Boolean of de waarde van de variable weer gebruiken om te detecteren dat het formulier mbv *die knop* geopend is en niet door een ander event, en dat combineren met het OnClose event.

Elegant is het echter niet zo'n "verklikker" variable.

Michel Uphoff
(Sysop)

http://tinyurl.com/m8fp



Bericht 3 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:John Kopmels (Sysop)Datum:20-10-2004
 Aan:Hugo KornelisMsgID:1464.3
 Onderwerp:A97: ververs/positioneerForum:ws-nlcomputer
Hoi Hugo

> bij het (tijdelijk) verlaten van een formulier de positie in de rijbron
te bewaren; als het formulier weer actief wordt wordt de rijbron ververst
om evt wijzigingen meteen in beeld te krijgen maar wl oude positie terug

> Het werkt nu BIJNA helemaal zoals ik wil. Er is n kleine uitzondering.
Ik heb op een aantal schermen een button die een ander formulier opent,
waarvan de instellingen pop-up en modaal beide op true zijn ingesteld.
Nu blijkt dat na bezoek aan dit formulier de rijbron van onderliggende
formulier niet ververst wordt. Ik heb eens gekeken welke gebeurtenissen
allemaal plaatsvinden als ik op betrefffende knop klik - helaas blijken
dat uitsluitend eigenschappen on_click etc. van betreffende button te zijn.

> Het bewaren van de huidige positie is ondanks dit nog steeds geen probleem;
dat kan ik gewoon toevoegen in de on_click routine. Maar de instructies om
verversen en de oude positie te herstellen, die kan ik nergens meer kwijt!

Aangezien er bij het openen (en later sluiten) van een modaal popup formulier
kennelijk in het onderliggende form geen gebeurtenisprocedures gestart worden
(zelfs niet voor LostFocus en GotFocus!) heb ik geen idee hoe te detecteren
dat modale popup form gesloten wordt en onderliggende form weer actief wordt.

Een voor de hand liggende oplossing zou kunnen zijn de OnClose gebeurtenis vh
modale popup formulier te gebruiken. Dit gaat echter niet, omdat dit formulier
vanuit tientallen andere formulieren kan worden geopend.

Is er een elegante oplossing voor dit probleem? Of zit er niks anders op dan
de eigenschappen popup en/of modaal van dat andere form op false te zetten
en te leren leven met dan nadelen die dat weer met zich meebrengt?

---------------------------------------------------------------------------------

Verschillende mogelijkheden

je kan je een form ook Dialoog openen, en dan hoef je de property's Popup
en Modaal niet in te stellen: DoCmd.OpenForm "frmModaal", , , , , acDialog

bijkomend voordeel is dat lopende code *tijdelijk* stop gezet wordt,
en dat kan je hier nu net mooi gebruiken, simpele code achter de knop

DoCmd.OpenForm "frmModaal", , , , , acDialog
Call Form_Activate

de code stopt dus na de eerste regel en gaat verder na sluiten calling form
maar wel eerst de property's modaal en pop up weghalen h

---------------------------------------------------------------------------------


Als je deze niet kan gebruiken dan:

Als je een form modaal opent gebeurt er op dat moment niets,de focus
is nergens op gezet, het application object heeft alleen (tijdelijk)
de controle ovegenomen, als je terugkeert idem er is niets gebeurt,

dus moet je met een trigger werken, dat kan zoals Michel ook al zei een
boolean zijn, of de focus verplaatsen simuleren, als je een form hebt wat
altijd open staat (een menu form ?), kan je even de focus daarop plaatsen
en dan naar het calling form terug, een Public houd het calling form bij

Public psPrevForm As String

Private Sub cmdOpenModaal_Click()
'
' bewaar de naam van calling form en open modaal
'
psPrevForm = Screen.ActiveForm.Name
DoCmd.OpenForm "frmModaal", , , , , acDialog
'
End Sub

Private Sub Form_Close() ' dit in het modale form
'
' terug in 2 stappen naar waar je vandaan komt
'
Forms("frmStayOpen").SetFocus
Forms(psPrevForm).SetFocus
'
End Sub

als je het wat vind, plaats dan beide in een globale module:

Public Function OpenModal(sForm As String)
'
psPrevForm = Screen.ActiveForm.Name
DoCmd.OpenForm sForm, , , , , acDialog
'
End Function

Public Function CloseModal()
'
Forms("frmMenu").SetFocus
Forms(psPrevForm).SetFocus
'
End Function

en roep het aan vanuit het eigenschappen venster => bij betreffende event

=OpenModal("frmModaal")

=CloseModal()

Groetjes --John



Bericht 4 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:20-10-2004
 Aan:John Kopmels (Sysop)MsgID:1464.4
 Onderwerp:A97: ververs/positioneerForum:ws-nlcomputer
Hoi John,

> je kan je een form ook Dialoog openen, en dan hoef je de property's Popup
> en Modaal niet in te stellen: DoCmd.OpenForm "frmModaal", , , , , acDialog
>
> bijkomend voordeel is dat lopende code *tijdelijk* stop gezet wordt,
> en dat kan je hier nu net mooi gebruiken, simpele code achter de knop
>
> DoCmd.OpenForm "frmModaal", , , , , acDialog
> Call Form_Activate

Geweldig!!!! Zo heb ik 'm precies zoals ik 'm hebben wil.

Je andere oplossing was voor mij minder geschikt, omdat er geen enkele formulier is dat altijd open staat. Maar gelukkig was die ook niet nodig!

Bedankt!!

Groetjes, Hugo


Bericht 5 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:20-10-2004
 Aan:Michel Uphoff (Sysop)MsgID:1464.5
 Onderwerp:A97: ververs/positioneerForum:ws-nlcomputer
Hoi Michel,

> Misschien kan je met de OnClick event van de Commandbutton die dat
> formulier opent een variabele van 0 op 1 zetten of mooier een Boolean van
> false op true zetten? Vervolgens kan je de status van die Boolean of de
> waarde van de variable weer gebruiken om te detecteren dat het formulier
> mbv *die knop* geopend is en niet door een ander event, en dat combineren
> met het OnClose event.

Hmmm. Het popup formulier moet dan natuurlijk wel "weten" vanuit welk ander formulier hij geopend is, maar dat is dan nog op te lossen via de OpenArgs. Ja, ik denk dat dit wel zou kunnen werken. Maar ik ben het met je eens:

> Elegant is het echter niet zo'n "verklikker" variable.

En daarom heb ik gekozen voor John's suggestie. Evengoed bedankt voor het meedenken!!

Groetjes, Hugo