Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Miten estää focuksen siirtyminen [VBA]

Marazo [11.04.2006 11:43:12]

#

Puuhastelen Access 2003:n kanssa.

Nyt pitäisi saada sellainen juttu aikaseksi, että eräästä popup-tyyppisestä formista ei saisi päästää käyttäjää mihinkään (paitsi cancel-nappulan kautta) ennen kuin se on täytetty oikein.

Olen kokeillut laittaa formin On_DeActivate-metodiin SetFocus:in, mutta tuo ei riitä. Focus palautuu kyllä formiin, mutta häviää kuitenkin saman tien.

Pitääköhän tässä tehdä kaikkiin muihinkin formeihin jotain koodia, esim. OnActivate kohdassa tarkastetaan onko Popup auki tai jotain?

BadSource [11.04.2006 12:17:42]

#

Lyhyt googletus antoi vastaukseksi laittaa avattavan formin Modal-asetus todeksi PopUp-asetuksen yhteydessä. Modal tarkoittaa juuri tuota, ettei focusta pysty siirtämään pois formista kun formi on auki. Asiasta täällä.

Arvojen tarkistuksen tekisin niin, että formille tultaessa OK-nappula (tms.) on disabloituna ja jokaisen täytettävän kentän yhteydessä tarkistetaan onko kentän arvo oikea. Jos arvo on halutunlainen, muutetaan kyseistä kenttää kuvaava boolean-muuttuja todeksi. Tämän jälkeen tarkistetaan onko kaikkien kenttien boolean-muuttujat tosia. Jos on, niin OK-nappula enabloidaan, että käyttäjä pääsee pois.

Marazo [26.04.2006 20:02:50]

#

Kiitos edellisestä vasstauksesta! Nyt minulla on taas vähän saman tyyppinen ongelma.

Koodi on seuraava:

If (Not(rs.EOF)) Then
    MsgBox "Dublicate Acces card number on active worker."
    Me.Tb_Access_Card_Number.SetFocus
End If

Tämä koodi ajetaan siis siinä vaiheessa kun kenttä on muuttunut (AfterUpdate).

Tarkoituksena siis tarkistaa onko kulkuluvan numero jo käytössä. Jos niin sattuu käymään, näytetään varoitus ja palautetaan focus kentään. Tämä ei nyt kuitenkaan toimi. Varoitus tulee oikein mallikkaasti näkyviin, mutta focus ei palaudu oikeaan kohtaan vaan jää sinne minne sen on tuosta kentästä siirtänyt.

Mitä minä nyt teen väärin?

BadSource [27.04.2006 07:35:57]

#

Voitko käyttää AfterUpdaten sijaan BeforUpdatea? Beforessa voit käyttää focuksen sijaan Cancelia, eli...

If (Not(rs.EOF)) Then
    MsgBox "Dublicate Acces card number on active worker."
    Cancel = True
End If

BeforeUpdate ei "luovuta focusta eteenpäin", ennen kuin oikeanlainen arvo on saatu, jos tarkastus tehdään sen sisällä ja Cancel aktivoituu.

Marazo [27.04.2006 10:19:39]

#

Kiitos avusta! Tuo BeforeUpdaten käyttäminen hoiti homman kotiin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta