Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Käyttämättömän ohjelman sulkeminen? VB 2005

Sivun loppuun

Sam76 [12.03.2008 09:45:52]

#

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.

JussiR [12.03.2008 13:20:00]

#

Form_MouseMove:
Timer1=False
Timer1=True

Form_KeyDown
Text1_KeyDown
jne.

Sam76 [12.03.2008 18:16:24]

#

Kiitos. Löysin jotain aiheeseen liittyvää mutta en saanut vielä ks. ominaisuutta toimimaan. Voisitko ohjeistaa vähän enemmän?

Meitzi [12.03.2008 23:08:32]

#

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.

Sam76 [12.03.2008 23:39:30]

#

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.

Metabolix [13.03.2008 03:34:16]

#

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.)

Sam76 [13.03.2008 18:58:28]

#

Kiitti, nyt alkoi ongelma selviämään. En tiedä tarkoitatko jotain muuta mutta otin käyttöön MouseHover-tapahtuman :)

Metabolix [13.03.2008 19:17:39]

#

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.

neau33 [13.03.2008 19:57:39]

#

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

Sam76 [13.03.2008 20:59:32]

#

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


Sivun alkuun

Vastaus

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

Tietoa sivustosta