VB 2008 Express und Tastatureingaben

06/08/2009 - 19:19 von Andreas Erber | Report spam
Hi,

ein Freund von mir muß für seine Diplomarbeit Vögel beobachten und hat mich
gebeten was zu schreiben das ihn dabei untersützt, z.b. automatisch die Zeit
nimmt. Das klang erst mal leicht allerdings offenbarte er mir dann dass er
das (nachvollziehbarer weise) per per Tastatur haben wolle und nicht per
Mausklick was mich vor Schwierigkeiten stellt.

Das Programm funktioniert soweit, allerdings sobald ich irgendwelche
klickbaren Steuerelemente einbaue funktionieren die Tastatureingaben nicht
mehr so wie ich es will sondern wirken auf die Steuerelemente.

Der PRogrammteil der die Tastatureingaben einfàngt lautet (es gibt ein paar
gobale Variablen die woanders definiert sind):

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

Dim tut As String
zeit = DateAndTime.Timer

If e.KeyChar = Chr(113) Then 'q
ort = "FB"
ElseIf e.KeyChar = Chr(121) Then 'y
ort = "NB"
ElseIf e.KeyChar = Chr(115) Then 's
ort = "weg"
ElseIf e.KeyChar = Chr(117) Then 'u
tut = "u"
ElseIf e.KeyChar = Chr(105) Then 'i
tut = "i"
ElseIf e.KeyChar = Chr(111) Then 'o
tut = "o"
ElseIf e.KeyChar = Chr(112) Then 'p
tut = "p"
ElseIf e.KeyChar = Chr(109) Then 'm
sichern() 'speichert eingaben in
Datei
ElseIf e.KeyChar = Chr(108) And lauf = False Then 'l
lauf = True
zeit2 = DateAndTime.Timer
ort = ""
ereignis_alt = -1
ElseIf e.KeyChar = Chr(108) And lauf = True Then 'l
lauf = False
ort = ""

End If

Kann man das irgendwie hinbekommen dass die Tastatureingaben von diesem Teil
abgefangen werden wenn man das Windowsprogrammchen irgendwo hinklickt wo es
keine Steuerelemente hat und nur dann zu den Steuerelementen geleitet wird
wenn man diese vorher anklickt?

Falls mans noch nicht gemerkt hat, bin ich Anfànger auf dem Gebiet...

LG Andy
 

Lesen sie die antworten

#1 Peter Götz
07/08/2009 - 09:52 | Warnen spam
Hallo Andreas,

ein Freund von mir muß für seine Diplomarbeit Vögel
beobachten und hat mich gebeten was zu schreiben
das ihn dabei untersützt, z.b. automatisch die Zeit
nimmt. Das klang erst mal leicht allerdings offenbarte er
mir dann dass er das (nachvollziehbarer weise) per per
Tastatur haben wolle und nicht per Mausklick was mich
vor Schwierigkeiten stellt.

Das Programm funktioniert soweit, allerdings sobald ich
irgendwelche klickbaren Steuerelemente einbaue funktionieren
die Tastatureingaben nicht mehr so wie ich es will sondern
wirken auf die Steuerelemente.



Ja, natürlich und das sollen sie ja auch.
Das Steuerelement, welches gerade den Focus besitzt
erhàlt im Normalfall die Tastaturereignisse.

Der PRogrammteil der die Tastatureingaben einfàngt lautet
(es gibt ein paar gobale Variablen die woanders definiert sind):



Globale Variablen sollte man, wann immer es möglich ist,
vermeiden, da dies ein offenes Tor für versehentliche oder
auch böswillige Änderungen ist. Irgendwelche Werte kannst
Du von einer Form zu einer anderen, bzw. von einem Klassen-
modul zu einem anderen sicherer und auch noch mit definierten
Zugriffsmöglichkeiten (Nur Lesen, nur Schreiben, Lesen u.
Schreiben) per Properties (Eigenschaftenprozeduren)
weitergeben.

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

Dim tut As String
zeit = DateAndTime.Timer

If e.KeyChar = Chr(113) Then 'q
ort = "FB"
ElseIf e.KeyChar = Chr(121) Then 'y
ort = "NB"
ElseIf e.KeyChar = Chr(115) Then 's
ort = "weg"
ElseIf e.KeyChar = Chr(117) Then 'u
tut = "u"
ElseIf e.KeyChar = Chr(105) Then 'i
tut = "i"
ElseIf e.KeyChar = Chr(111) Then 'o
tut = "o"
ElseIf e.KeyChar = Chr(112) Then 'p
tut = "p"
ElseIf e.KeyChar = Chr(109) Then 'm
sichern() 'speichert eingaben


in
Datei
ElseIf e.KeyChar = Chr(108) And lauf = False Then 'l
lauf = True
zeit2 = DateAndTime.Timer
ort = ""
ereignis_alt = -1
ElseIf e.KeyChar = Chr(108) And lauf = True Then 'l
lauf = False
ort = ""

End If



Diesen Else-IF-Schlauch kannst Du durch ein
Select - Case - Konstrukt ersetzen.

Select Case e.KeyChar
Case Chr(...)
' tu dies
Case Chr(...)
' tu das
Case Chr(...)
' tu jenes
Case Else
' tu was anderes
End Select

Da Dein obiger Code offenbar zu VB.net gehört, bist
Du hier in der falschen Newsgroup.
Fragen rund um VB.net werden in

microsoft.public.de.german.entwickler.dotnet.vb

behandelt. Du solltest Deine entspr. Fragen also
künftig besser dort stellen.
Mehr zu den verschiedenen MS-Entwicklernewsgroups
findest Du unter

www.gssg.de -> Newsgroups


Kann man das irgendwie hinbekommen dass die
Tastatureingaben von diesem Teil abgefangen werden
wenn man das Windowsprogrammchen irgendwo
hinklickt wo es keine Steuerelemente hat und nur
dann zu den Steuerelementen geleitet wird
wenn man diese vorher anklickt?



So ganz verstehe ich diesen Satz nicht.
Wenn Du erreichen willst, dass die Form Tastaturereignisse
empfàngt, auch wenn gerade ein darauf befindliches Steuer-
element den Focus besitzt, dann musst Du die Eigenschaft
Form.KeyPreview auf True setzen.
Also

FormX.KeyPreview = True

oder innerhalb des Codes des betr. Formmoduls in einer
Sub oder Function

Me.KeyPreview = True


Falls mans noch nicht gemerkt hat, bin ich Anfànger auf
dem Gebiet...



Ja, natürlich merkt man das und Du wàrst gut beraten,
Dich erst mal mit einigen unerlàsslich notwendigen Grundlagen
zur Programmierung mit dem .net-Framework und VB.net
vertraut zu machen, weil Du dann ganz sicher zu völlig
anderen, aufgabengerechteren Lösungsansàtzen kàmst.

Für den Einstieg und auch zum Kennenlernen fortgeschrittener
Programmiertechniken mit VB.net kann ich Dir das Buch

Entwicklerbuch
Microsoft Visual Basic 2008
Grundlagen, Techniken, Profi-Know-how
von Klaus Löffelmann

erschienen bei Microsoft Press
ISBN 978-3-86645-506-1

empfehlen.

Ansonsten findest Du auch in der MSDN-Library unter

http://msdn.microsoft.com/de-de/lib...h1hfk.aspx

reichlich Lesestoff zum Einstieg in VB.net.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen