Inactief

Status
Niet open voor verdere reacties.

frenske1964

Gebruiker
Lid geworden
3 dec 2007
Berichten
25
Heb een userform met password, nu wil ik dat als het proggie een tijd niet gebruikt word, hij automatisch weer terug gaat naar het inlogscherm.
Proggie bestaat uit 5 forms
Iemand een goed idee?
 
Stel een Timer in en laat deze dan vervolgens de home form aanroepen zodra de timer verlopen is.

Byess VRC
 
Stel een Timer in en laat deze dan vervolgens de home form aanroepen zodra de timer verlopen is.

Bedoel je met 'home form' hetzelfde als wat ik doorgaans main form noem?
Als het home form in eerste instantie alle andere forms aanroept, dan lijkt het me uit design oogpunt een slecht idee dat die andere forms nu ineens het home form gaan aanroepen.

Ik zou daar eerder een hierarchie aanhouden:
home form roept sub form aan --> sub form is klaar en sluit zichzelf af --> home form treedt op de voorgrond omdat het nog open stond.
 
Beste evertvb.

Ben nieuw in deze materie, en ben je kwijt bij je hierarchie denk ik.
Ik heb een inlogscherm, van waaruit ik doorga naar het hoofdmenu, alwaar een keuze gemaakt moet worden uit verschillende buttons, de hele opzet werkt tot nu toe, werkend vanuit de volgende code om naar het volgende venster te gaan, en vice versa

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Me.Visible = False
Material.Visible = True
End Sub
Wat ik nu wil is dat na een inactivieteit van b.v. 10 min. zonder data verlies van wat eventueel al is ingegeven, het inlogscherm weer verschijnt, en na het ingeven van het password je weer verder kunt waar je gebleven was.

B.v.d.

Frans
 
ooh sorry ik bedoelde met home form de inlogscherm.
als de timer voorbij is dan log je de user uit ofzo en dan als hij weer het scherm wilt benaderen moet hij inloggen.
tja het is makkelijker gezegd dan gedaan maar dit is wel de logica.

logica :
Code:
Boolean userIsLoggedIn = true

if(timer == 0)
{
userIsLoggedIn = false;
}
 
beste,

Ik zou het op deze manier doen:

(vlug voor de duidelijkheid: vblogin is je loginscherm, vbformulier is je formulierscherm)

maak een timer aan, zet deze op 300 000 (5 minuten)

Dan in de timer.tick:

Code:
me.enabled = false '--> zorgen dat je niet meer in deze form kan schrijven
me.hide() '--> deze form verstoppen voor de gebruiker
vblogin.show() '--> het loginscherm tonen aan de gebruiker
timer1.enabled = false '--> de timer afleggen

bij het inlogscherm als hij op de 'ok' of whatever knop klikt:

Code:
vbformulier.show()  '--> het formulierscherm tonen
vbformulier.enabled = true '--> zorgen dat de gebruiker erin kan schrijven
vblogin.dispose '--> het loginscherm vernietigen (kan later terug opgeropen worden maar er zal niets meer ingevuld staan
timer1.enabled=true '--> de timer voor het inactief zijn aanleggen

Een laatste stap: telkens de gebruiker iets doet, moet de timer gereset worden...
Dus bij elke textbox.textchanged enzo moet je deze code hebben:

Code:
timer1.reset()

have fun!
 
Of je gebruikt gewoon een variabele die de laatste tijd van activiteit bijhoudt en controleert vervolgens of de maximum tijd van inactiviteit verstreken is:

[cpp]
DWORD dwLaatsteTijdVanActiviteit;

// bij elk change event stel je de huidige tijd in
dwLaatsteTijdVanActiviteit = GetTickCount(); // tijd in ms

// en in de timer
const DWORD dwTijdslimiet = dwLaatsteTijdVanActiviteit + 30 * 1000; // tijd in ms
if (GetTickCount() >= dwTijdslimiet) // tijdslimiet is bereikt
[/cpp]

M'n VB is erg roestig, dus vandaar dat het voorbeeld in C++ is. Maar het principe blijft hetzelfde. Met de code van jordumus bereik je hetzelde,
maar het zou kunnen zijn dat het resetten van een timer trager is dan het ophalen van GetTickCount. Maar dat heb ik niet getest, het verschil zal
in dit geval sowieso niet merkbaar zijn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan