User Control Problem

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von mikeb69.

    Hi @xtts02
    Danke für den Tip.
    Für Space klappt das schon mal bestens.
    Ich vermute aber, das ich die Sub für Shift noch so anpassen muss, das nach einem Grossbuchstaben direkt wieder auf Klein umgeschaltet wird.

    Bei Enter passiert eigentlich nichts anderes als das ins nächtse Textfeld gesprungen wird.

    VB.NET-Quellcode

    1. Private Sub LabelsClick(ByVal sender As Object, ByVal e As EventArgs)
    2. Select Case True
    3. Case sender Is lblBackSpace
    4. RaiseEvent BackSpace("{BKSP}")
    5. Case sender Is lblShift
    6. ShiftHandle(lblShift)
    7. Case sender Is lblEnter
    8. RaiseEvent EnterClick("{TAB}")
    9. Case Else
    10. If sender Is lblSpace Then
    11. RaiseEvent KeyPressed(DirectCast(sender, Label).Text)
    12. ShiftHandle(lblShift)
    13. Else
    14. RaiseEvent KeyPressed(DirectCast(sender, Label).Text)
    15. End If
    16. End Select
    17. End Sub
    18. Private Sub ShiftHandle(ByVal sender As Object)
    19. If lblShift.Tag = "Shift" Then
    20. lblShift.Tag = "Caps"
    21. lblShift.Image = My.Resources.Capslock
    22. For Each lb As Label In flpKeyboard.Controls.OfType(Of Label)()
    23. lb.Text = lb.Text.ToUpper
    24. Next
    25. RaiseEvent KeyPressed(DirectCast(sender, Label).Text.ToUpper)
    26. Else
    27. lblShift.Tag = "Shift"
    28. lblShift.Image = My.Resources.Shift
    29. For Each lb As Label In flpKeyboard.Controls.OfType(Of Label)()
    30. lb.Text = lb.Text.ToLower
    31. Next
    32. RaiseEvent KeyPressed(DirectCast(sender, Label).Text.ToLower)
    33. End If
    34. End Sub

    "Hier könnte Ihre Werbung stehen..."
    So, nun klappt es soweit wie ich es haben möchte. Nun die Frage, ob es auch sinnvoll ist, es so zu gestalten oder ob es einen "richtigen", besseren Weg gibt.

    Wie gesagt, es klappt Einwandfrei:

    Tastaturcode:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. <DefaultEvent("KeyPressed")>
    3. Public Class touchKeyboard
    4. Public Event KeyPressed(ByVal var As String)
    5. Public Event BackSpace(ByVal key As String)
    6. Public Event EnterClick(ByVal key As String)
    7. Private Sub touchKeyboard_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    8. For Each lbl As Label In flpKeyboard.Controls.OfType(Of Label)()
    9. AddHandler lbl.Click, AddressOf LabelsClick
    10. AddHandler lbl.MouseEnter, AddressOf LabelsMouseEnter
    11. AddHandler lbl.MouseLeave, AddressOf LabelsMouseLeave
    12. Next
    13. ShiftHandle(True)
    14. End Sub
    15. Private Sub LabelsClick(ByVal sender As Object, ByVal e As EventArgs)
    16. Select Case True
    17. Case sender Is lblBackSpace
    18. RaiseEvent BackSpace("{BKSP}")
    19. Case sender Is lblShift
    20. ShiftHandle(True)
    21. Case sender Is lblEnter
    22. RaiseEvent EnterClick("{TAB}")
    23. ShiftHandle(True)
    24. Case Else
    25. If sender Is lblSpace Then
    26. RaiseEvent KeyPressed(DirectCast(sender, Label).Text)
    27. ShiftHandle(True)
    28. Else
    29. RaiseEvent KeyPressed(DirectCast(sender, Label).Text)
    30. ShiftHandle(False)
    31. End If
    32. End Select
    33. End Sub
    34. Public Sub ShiftHandle(shift As Boolean)
    35. If shift Then
    36. lblShift.Image = My.Resources.Capslock
    37. For Each lb As Label In flpKeyboard.Controls.OfType(Of Label)()
    38. lb.Text = lb.Text.ToUpper
    39. Next
    40. Else
    41. lblShift.Image = My.Resources.Shift
    42. For Each lb As Label In flpKeyboard.Controls.OfType(Of Label)()
    43. lb.Text = lb.Text.ToLower
    44. Next
    45. End If
    46. End Sub
    47. Private Sub LabelsMouseEnter(ByVal sender As Object, ByVal e As EventArgs)
    48. DirectCast(sender, Label).BackColor = Color.Gray
    49. End Sub
    50. Private Sub LabelsMouseLeave(ByVal sender As Object, ByVal e As EventArgs)
    51. DirectCast(sender, Label).BackColor = Color.FromArgb(64, 64, 64)
    52. End Sub
    53. End Class


    FormCode:

    VB.NET-Quellcode

    1. Private Sub touchKB_KeyPressed(var As String) Handles touchKB.KeyPressed
    2. Dim tb As TextBox = TryCast(scForeign.ActiveControl, TextBox)
    3. If tb IsNot Nothing Then
    4. tb.Text &= var
    5. tb.SelectionStart = tb.Text.Length
    6. End If
    7. End Sub
    8. Private Sub touchKB_BackSpace(key As String) Handles touchKB.BackSpace
    9. SendKeys.Send(key)
    10. End Sub
    11. Private Sub touchKB_EnterClick(key As String) Handles touchKB.EnterClick
    12. SendKeys.Send(key)
    13. End Sub
    14. Private Sub txt_Enter(sender As Object, e As EventArgs) Handles txtCompany.Enter, txtContact.Enter, txtName.Enter
    15. touchKB.ShiftHandle(True)
    16. End Sub
    "Hier könnte Ihre Werbung stehen..."
    @MichaHo,

    auf den ersten Blick würde ich meinen, dass

    VB.NET-Quellcode

    1. Private Sub touchKB_BackSpace(key As String) Handles touchKB.BackSpace
    2. SendKeys.Send(key)
    3. End Sub
    4. Private Sub touchKB_EnterClick(key As String) Handles touchKB.EnterClick
    5. SendKeys.Send(key)
    6. End Sub
    7. Private Sub txt_Enter(sender As Object, e As EventArgs) Handles txtCompany.Enter, txtContact.Enter, txtName.Enter
    8. touchKB.ShiftHandle(True)
    9. End Sub

    nichts im Code der form zu suchen hat.

    Gruss

    mikeb69
    Hallo @mikeb69.
    naja, wo denn sonst?
    Ich habe von dem Usercontrol (die Tastatur) ja keinen Zugriff auf die Controls der Form (Textboxen).
    Daher kann ich im Tastaturcode ja cuh das Sendkeys nicht verwenden, das benötige ich aber um Zeichen zu löchen oder eben ins nächste Feld zu springen.
    Und durch das txt_Enter will ich ja erreichen das wenn ich mit dem Finger in das Textfeld tippe, die Tastatur wieder auf Groß gestellt ist.
    Die Anwendung läuft auf einem HP-TouchPC (und nur diese Anwendung) und darf ausschließlich mit der onScreen Tastatur die dazu eifgens erstellt habe genutzt werden.
    Wie löse ich diese 3 Anforderungen denn sonst?
    "Hier könnte Ihre Werbung stehen..."