kostenloser Webspace werbefrei: lima-city


Key Press

lima-cityForumProgrammiersprachenBasic

  1. Autor dieses Themas

    bene1989

    Kostenloser Webspace von bene1989

    bene1989 hat kostenlosen Webspace.

    Ich habe mal wieder eine Frage. Damit ihr sofort wisst, was ich m?chte, guckt euch bitte dieses Lima-Tutorial an: http://www.lima-city.de/tutorials.php?mode=show&id=1520

    Ich m?chte genau das gleiche, allerdings f?r VB .NET 2003.

    Wenn ihr Internetseiten findet, sendet bitte den Link dazu.
    Ich danke f?r eure Hilfe.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.

    Hier ist der Code f?r VB.NET 2003

    Ben?tigt wird eine Textbox mit Namen "TextBox1". (Es kann auch jedes andere Objekt verwendet werden, das einen Fokus erhalten kann.)

    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown

    Select Case e.KeyCode
    Case Keys.A, Keys.B, Keys.C
    MsgBox("Es wurde A, B oder C gedr?ckt.", MsgBoxStyle.Information, "Meldung")
    Case Keys.Escape
    MsgBox("Es wurde die Escape-Taste gedr?ckt.")
    Case Else
    MsgBox("Es wurde folgende Taste (auf der Tastatur, Maus oder Bildschirm) gedr?ckt:" & _
    vbNewLine & _
    "Tastaturcode: " & e.KeyCode.ToString & vbNewLine & _
    "Tastendaten: " & e.KeyData.ToString & vbNewLine & _
    "Tastaturwert: " & e.KeyValue.ToString, MsgBoxStyle.Information, "Meldung")
    End Select

    End Sub


    Eine Liste aller Tasten (Keys) gibt es in der VB.NET 2003 Hilfe.
    Adresse: ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1031/cpref/html/frlrfSystemWindowsFormsKeysClassTopic.htm
  4. Autor dieses Themas

    bene1989

    Kostenloser Webspace von bene1989

    bene1989 hat kostenlosen Webspace.

    Ich danke dir. Es funktioniert bei einer Textbox.

    Meine n?chste Frage: Wie muss das Skript aussehen, wenn ich das nicht auf die Textbox beschr?nken will sondern ?ber die gesamte Oberfl?che (z.B. Form1), also

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    Select Case e.KeyCode
    Case Keys.A, Keys.B, Keys.C
    MsgBox("Es wurde A, B oder C gedr?ckt.", MsgBoxStyle.Information, "Meldung")
    Case Keys.Escape
    MsgBox("Es wurde die Escape-Taste gedr?ckt.")
    Case Else
    MsgBox("Es wurde folgende Taste (auf der Tastatur, Maus oder Bildschirm) gedr?ckt:" & _
    vbNewLine & _
    "Tastaturcode: " & e.KeyCode.ToString & vbNewLine & _
    "Tastendaten: " & e.KeyData.ToString & vbNewLine & _
    "Tastaturwert: " & e.KeyValue.ToString, MsgBoxStyle.Information, "Meldung")
    End Select
    End Sub

    hat bei mir nicht funktioniert.
  5. Guck dir mal die Eigenschaften von Form1 an. Irgendwo muss man da einen Wert so umstellen, dass Tastenereignisse direkt ans Fenster und nicht an die Textbox(en) gesendet werden.

    Alternativ kannst du auch das Ereignis von der Textbox abfangen und an Form1 weiterleiten (die Routine Form1_KeyDown(...) ist eine ganz normale Funktion, die du auch direkt aufrufen kannst).

    MfG,
    thw
  6. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.


    Ich danke dir. Es funktioniert bei einer Textbox.

    Meine n?chste Frage: Wie muss das Skript aussehen, wenn ich das nicht auf die Textbox beschr?nken will sondern ?ber die gesamte Oberfl?che (z.B. Form1), also

    .....



    Damit die Form die Tastaturereignisse vor den Steuerelementen erh?lt, muss die Form-Eigenschaft "Me.KeyPreview = True" eingestellt werden.

    Der Code sieht wie gehabt aus:

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

    Select Case e.KeyCode
    Case Keys.A, Keys.B, Keys.C
    MsgBox("Es wurde A, B oder C gedr?ckt.", MsgBoxStyle.Information, "Meldung")
    Case Keys.Escape
    MsgBox("Es wurde die Escape-Taste gedr?ckt.")
    Case Else
    MsgBox("Es wurde folgende Taste (auf der Tastatur, Maus oder Bildschirm) gedr?ckt:" & _
    vbNewLine & _
    "Tastaturcode: " & e.KeyCode.ToString & vbNewLine & _
    "Tastendaten: " & e.KeyData.ToString & vbNewLine & _
    "Tastaturwert: " & e.KeyValue.ToString, MsgBoxStyle.Information, "Meldung")
    End Select

    End Sub




  7. Autor dieses Themas

    bene1989

    Kostenloser Webspace von bene1989

    bene1989 hat kostenlosen Webspace.

    Ich danke euch nochmal, es funktioniert. Neues Problem: Ich m?chte jetzt, das wenn ich z.B. Strg+P dr?cke, ein bestimmter Befehl ausgef?hrt wird, z.B. MsgBox("Taste Strg und P wurden gleichzeitig gedr?ckt.")

    Ich habe es schon mit If ausprobiert funktioniert aber nicht wirklich, vll habe ich ja auch nur einen dummen Anf?ngerfehler drin:

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

    If e.KeyCode = Keys.Controlkey and e.KeyCode = Keys.P Then
    MsgBox("Taste Strg und P wurden gleichzeitig gedr?ckt.")
    End If
    End Sub
  8. Autor dieses Themas

    bene1989

    Kostenloser Webspace von bene1989

    bene1989 hat kostenlosen Webspace.

    Konnte das Problem selbst l?sen:


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

    If Asc(e.KeyChar) = 16 Then
    MsgBox("Taste Strg und P wurden gleichzeitig gedr?ckt.")
    End If

    End Sub
  9. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.


    Konnte das Problem selbst l?sen:


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

    If Asc(e.KeyChar) = 16 Then
    MsgBox("Taste Strg und P wurden gleichzeitig gedr?ckt.")
    End If

    End Sub



    Das ist leider nicht korrekt. Denn Asc(16) ist die Shift-Taste und nicht Strg+P.

    Der Code muss wie folgt lauten. (Hinweis: Hier verwende ich das KeyUp-Ereignis, da das Ergebnis dann erst ausgewertet wird, wenn die Tasten wieder losgelassen werden, d.h. alle Tasten gedr?ckt worden sind. In diesem Fall Strg+P)

    Der Code:

    Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp

    If e.Control = True AndAlso e.KeyCode = Keys.P Then
    MsgBox("Taste Strg und P wurden gleichzeitig gedr?ckt.")
    Else
    Select Case e.KeyCode
    Case Keys.A, Keys.B, Keys.C
    MsgBox("Es wurde A, B oder C gedr?ckt.", MsgBoxStyle.Information, "Meldung")
    Case Keys.Escape
    MsgBox("Es wurde die Escape-Taste gedr?ckt.")
    Case Else
    MsgBox("Es wurde folgende Taste (auf der Tastatur, Maus oder Bildschirm) gedr?ckt:" & _
    vbNewLine & _
    "Tastaturcode: " & e.KeyCode.ToString & vbNewLine & _
    "Tastendaten: " & e.KeyData.ToString & vbNewLine & _
    "Tastaturwert: " & e.KeyValue.ToString, MsgBoxStyle.Information, "Meldung")
    End Select
    End If

    End Sub


    Erkl?rung mit der Abfrage "e.Control" kannst du den Status der Steuerung-Taste abrufen ("true" oder "false"). Ebenso die Shift-Taste mit "e.Shift" oder die Alt-Taste mit "e.Alt"

  10. Autor dieses Themas

    bene1989

    Kostenloser Webspace von bene1989

    bene1989 hat kostenlosen Webspace.

    Ich danke f?r deine Antwort, aber bei mir ging das mit Strg+P und Asc(16). Egal, dein Script gef?llt mir besser.

    Frage: Kann man das nur mit KeyUp machen?

    EDIT: Ich habe noch eine Frage: Ich muss leider die Taste F10 belegen. Es ist Gewohnheit f?r mich, das ich beim WMP F10 f?r lauter dr?cke und das soll bei meinem Player auch so sein. Eigentliches Problem: Wenn ich F10 dr?cke wird nach dem Loslassen mein Mainmenu makiert. Das wirst du auch in anderen Programmen finden, z.B. Excel. Ich m?chte aber, das mein Mainmenu nicht makiert wird. Kann man das ausschalten? Ich habe schon in meinem Mainmenu unter Eigenschaften gesucht aber nichts gefunden. W?re ?ber deine Antwort sehr dankbar.

    Beitrag ge?ndert: 14.9.2006 19:15:13 von bene1989
  11. cbhp

    Co-Admin Kostenloser Webspace von cbhp

    cbhp hat kostenlosen Webspace.


    Ich danke f?r deine Antwort, aber bei mir ging das mit Strg+P und Asc(16). Egal, dein Script gef?llt mir besser.

    Frage: Kann man das nur mit KeyUp machen?

    EDIT: Ich habe noch eine Frage: Ich muss leider die Taste F10 belegen. Es ist Gewohnheit f?r mich, das ich beim WMP F10 f?r lauter dr?cke und das soll bei meinem Player auch so sein. Eigentliches Problem: Wenn ich F10 dr?cke wird nach dem Loslassen mein Mainmenu makiert. Das wirst du auch in anderen Programmen finden, z.B. Excel. Ich m?chte aber, das mein Mainmenu nicht makiert wird. Kann man das ausschalten? Ich habe schon in meinem Mainmenu unter Eigenschaften gesucht aber nichts gefunden. W?re ?ber deine Antwort sehr dankbar.

    Beitrag ge?ndert: 14.9.2006 19:15:13 von bene1989



    1. Kann man das nur mit KeyUp machen:
    Um eine Tastenkombination (d.h. mehr als 1 Taste soll gleichzeitig gedr?ckt werden) abzufragen, kann nur das KeyUp-Ereignis verwendet werden. Das KeyDown-Ereignis reagiert n?mlich dann, sobald 1 Taste gedr?ckt wird. Somit k?nnen beim KeyDown-Ereignis nicht mehrere Tasten gleichzeitig das Ereignis ausl?sen, denn die Tastenkombinationen m?ssten exakt gleichzeitig erfolgen und das ist nicht m?glich. Das KeyPress-Ereignis funktioniert genauso wie das KeyDown-Ereignis.

    KeyDown wird zuerst ausgel?st: Taste wird gedr?ckt.
    KeyPress wird danach ausgel?st: Taste wird gehalten.
    KeyUp wird anschlie?end ausgel?st: Alle Tasten werden losgelassen.

    Antwort: Tastenkombinationen nur mit KeyUp m?glich. (Es w?re m?glich auch die anderen beiden Ereignisse zu verwenden, dies ist aber komplizierter und viel zu aufwendig.)


    2. Es ist nicht m?glich, die Funktion "F10 - Men? markieren" zu deaktivieren, das sind einfach Standard-Windows-Befehle. (Genauso auch: "Alt = Men? markieren", "Tab - N?chstes Element" usw...)

    Aber es ist m?glich die F10-Taste anders zu belegen und somit wird die Funktion "Men? markieren" verworfen:

    Da du ein MainMenu verwendest, kannst du zum Beispiel einen Eintrag "Leiser" und einen Eintrag "Lauter" erstellen.
    Dann legst du die Eigenschaft "ShortCut" von dem "MenuItem_Lauter" auf "F10" fest.
    ?brigens kannst du das auch mit Strg+P machen. Somit muss kein Extra-Code geschrieben werden, der die KeyDown-,KeyPress-,KeyUp-Ereignisse ?berwacht.

    Wenn du dein Programm jetzt ausf?hrst und die F10-Taste dr?ckst passiert das Gleiche, wie wenn du auf den Men?eintrag "Lauter" klickst. Der Code in der Prozedur "MenuItem_Lauter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem_Lauter.Click" wird ausgef?hrt.

    Standardm??ig werden die festgelegten Tastenkombinationen neben den Men?eintr?gen bei der Ausf?hrung (nicht in der Entwurfsumgebung) angezeigt.
    Falls du die Tastenkombinationen nicht anzeigen lassen willst, musst du nur die Eigenschaft "ShowShortCut" auf "False" setzen beim MenuItem.

  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!