Kokeillaan jos täällä joku osaisi neuvoa.
Ongelmana on saada ohjelma sulkeutumaan automaattisesti jos sitä ei käytetä esim. 10 minuuttiin. Hommahan on kätevä toteuttaa ajastimella mutta miten saan ajastimen toimimaan siten, että se nollautuu jos liikuttaa hiirtä tai kirjoittaa tekstiä? En löydä VB:n metodia joka tutkisi näitä (mouselistener, actionlistener..)
Ja jos löytyy jotain koodiesimerkkiä, niin aina parempi.
Form_MouseMove:
Timer1=False
Timer1=True
Form_KeyDown
Text1_KeyDown
jne.
Kiitos. Löysin jotain aiheeseen liittyvää mutta en saanut vielä ks. ominaisuutta toimimaan. Voisitko ohjeistaa vähän enemmän?
Ensiksi sinun tietysti tulisi miettiä mitä tarkoittaa ohjelman käyttäminen, jos se tarkoittaa että ikkuna on aktiivisena niin silloin helpoin tapa on:
Form_Activated ja Form1_Deactivate tapahtumat. Eli lasketaan 10 minuuttia deactivate tapahtumasta jos aktivointia ei tapahdu.
Jos taas ohjelman käyttäminen mitataan hiiren/näppäimistön/jonkun muun? käytöstä, pitää sinun kytkeä ajastin niihin tapahtumiin. (lasketaanko hiiren liike ohjelmaikkunan yli käytöksi?)
Eli pistetään ajastin päälle 10 minuutista alaspäin, kun aika loppuu sammutetaan. Aina kun tehdään jotain, ajastin alustetaan 10 minuuuttiin.
Kiitos ohjeistuksesta. Tässä tapauksessa ajattelin ohjelman käyttämättömäksi silloin kun mitään ei tapahdu. Eli esimerkiksi kun käyttäjä lähtee koneelta pois ja ohjelma jää päälle, niin se sulkee itsensä jonkin ajan kuluttua. Tuossa ensimmäisessä tapauksessahan ohjelma jää päälle, jos ohjelmaa ei käytetä mutta ikkunan on aktiivinen, eikö?
Yritin etsiä MSDN:stä toiminnan/hiiren liikkeen kuuntelijaa mutta en löytänyt. Jonkinlainen esimerkki olisi kyllä poikaa.
Käytä Formin MouseOver-tapahtumaa hiireen. Muistaakseni formeilla on myös jokin KeyPreview-ominaisuus tms, jonka asettaminen Trueksi saa jokaisen napinpainalluksen aiheuttamaan Formin KeyDown-tapahtuman. (Vai olikohan niin, että juuri .Net-jutuista sitä ei löytynyt... Jos näin, niin joudut lisäämään alustuksen kaikkien eri kontrollien näppäinkäsittelijöihin ja OnChange-tapahtumiin.)
Kiitti, nyt alkoi ongelma selviämään. En tiedä tarkoitatko jotain muuta mutta otin käyttöön MouseHover-tapahtuman :)
Näköjään kyseinen ominaisuus on .Netissä MouseMove, ja näppäinten tunnistaminen tosiaan onnistuu KeyDown-tapahtumassa KeyPreview-asetuksen ollessa päällä. Hiiri on ilmeisesti suurempi ongelma, koska esimerkiksi napin päällä ollessaan hiiri ei lähetä tietojaan formille vaan suoraan napille. Joko voit luottaa siihen, ettei kukaan jaksa heilutella hiirtä kontrollien päällä koko kymmentä minuuttia, tai voit lisätä ajastimen päivityksen myös kaikkien kontrollien MouseMove-tapahtumiin.
Heippa Sam76!
Tässä hieman lisää infoa...
Jos sun .NET Framework 3.0 tai 3.5 pyörii Vistan päällä niin kaikki ongelmat, jotka sisältyvät gategoriaan Input alkavat selvitä 'raahaamalla' projektiin assemblyn WindowsBase, viittaamalla NameSpaceen System.Windows.Input ja tutkimalla mitä kivaa löytyy .Keyboard-luokan takaa...
Vistaa edeltävissä versioissa on paras tyytyä Win32-API ratkaisuihin, koska KeyEventtien tutkimiseen kontrollien ulkopuolelta vaaditaan kilometrien mittaisia koodiviritelmiä. Hiiri sensijaan taipuu vanhemillakin alustoilla suhteellisen näppärästi...
Public Partial Class MainForm Private Shared ladattu As Boolean = False Private Shared hiirix As Integer = 0 Private Shared hiiriy As Integer = 0 '... Sub MainFormShown(sender As Object, e As EventArgs) If Not ladattu Then ladattu = True timer1.Interval = 10000 hiirix = Me.MousePosition.X hiiriy = Me.MousePosition.Y PääLuuppi() End If End Sub Sub PääLuuppi() Do: Application.DoEvents If Me.MouseButtons.ToString <> "None" _ Or Me.MousePosition.X <> hiirix Or _ Me.MousePosition.Y <> hiiriy Then Label1.Text = "MouseEventFired" 'testi hiirix = Me.MousePosition.X hiiriy = Me.MousePosition.Y timer1.Enabled = False Else Label1.Text = "" 'testi timer1.Enabled = True End If Loop End Sub Sub Timer1Tick(sender As Object, e As EventArgs) Me.Close End Sub Sub MainFormFormClosing(sender As Object, e As FormClosingEventArgs) Me.Dispose End Sub Sub MainFormFormClosed(sender As Object, e As FormClosedEventArgs) End End Sub End Class
PS. .NET ympäristössä löytyy myös Form.KeyPreview
Ok. Kiitos avustuksesta. Ominaisuus toimii nyt noinniinkuin periaatteessa. Pientä viilausta se vielä vaatii mutta periaate on nyt selvillä.
Niin ja alla mulla on XP ja NET Framework 3.5
Aihe on jo aika vanha, joten et voi enää vastata siihen.