Hallo
ich habe ein recht seltsames Problem: Meine Anwendung läuft auf einem Panel-PC mit Touchscreen; um Eingaben zu ermöglichen habe ich selbst eine Touch-Tastatur erstellt (um das betätigen "ungewollter" Tasten zu verhindern, habe ich nicht die OSK verwendet).
Bediene ich meine Anwendung mit der Maus funktioniert alles einwandfrei, nutze ich jedoch zur Eingabe den Touchscreen, reagieren die Tasten erst ab dem 2. Klick. Es scheint, als würde der erste Klick erst das Fenster aktivieren, und erst beim zweiten mal die Tasten reagieren.
Ich verstehe jedoch nicht, warum das nur beim Touch so ist?!
Ich habe nach dem Laden auch schon "Me.Focus" versucht, jedoch ohne Erfolg.
Hier mal die wesentlichen Teile des Codes für die Tastatur, vielleicht fällt ja jemandem etwas auf:
Partial Public Class mjsKeyboard
#Region "Allgemein"
Public Sub New(ByVal ShowKeyboard As Boolean, Optional ByVal Content As _
String = Nothing, Optional ByVal PasswordInput As Boolean = False)
MyBase.New()
Me.InitializeComponent()
Me.Owner = Application.Current.MainWindow
GenerateDictionary()
If PasswordInput Then
txbInput.Visibility = Windows.Visibility.Collapsed
PWInput.Visibility = Visibility.Visible
bPasswordInput = True
btnLEFT.Visibility = Windows.Visibility.Hidden
btnRIGHT.Visibility = Windows.Visibility.Hidden
End If
lblWindowContent.Content = Content
bShowKeyboard = ShowKeyboard
'Schriftsatz auf den Buttons initialisieren
CAPoff()
End Sub
Public Overloads Function ShowDialog(ByRef Text As String) As MsgBoxResult
If bShowKeyboard Then
'Text eintragen
txbInput.Text = Text
PWInput.Password = Text
MyBase.ShowDialog()
If _MsgBoxResult = MsgBoxResult.Ok Then
If bPasswordInput Then
Text = PWInput.Password
Else
Text = txbInput.Text
End If
End If
Return _MsgBoxResult
Else
Return Microsoft.VisualBasic.MsgBoxResult.Cancel
End If
End Function
Private Sub mjsKeyboard_ContentRendered(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles Me.ContentRendered
' Me.Focus()
End Sub
Private Sub mjsKeyboard_Loaded(ByVal sender As Object, ByVal e As _
System.Windows.RoutedEventArgs) Handles Me.Loaded
If Not bPasswordInput Then
'txbInput.Focus()
If txbInput.Text.Length > 0 Then
txbInput.CaretIndex = txbInput.Text.Length
End If
Else
'PWInput.Focus()
End If
'Me.Focus()
End Sub
#End Region
#Region "Private Sub und Function"
Private Sub GenerateDictionary()
Dict.Add(0, {"0", "="})
Dict.Add(1, {"1", "!"})
Dict.Add(2, {"2", "'"})
'...
Dict.Add(40, {",", ";"})
Dict.Add(41, {".", ":"})
Dict.Add(42, {"-", "_"})
Dict.Add(43, {" ", " "})
End Sub
Private Sub InsertOnCarret(ByVal index As Integer)
If bPasswordInput Then
If SHIFT Or CAP Then
PWInput.Password = PWInput.Password.Insert( _
PWInput.Password.Length, Dict(index)(1))
Else
PWInput.Password = PWInput.Password.Insert( _
PWInput.Password.Length, Dict(index)(0))
End If
Else
Dim cIndex As Integer = txbInput.CaretIndex
If SHIFT Or CAP Then
txbInput.Text = txbInput.Text.Insert(cIndex, Dict(index)(1))
Else
txbInput.Text = txbInput.Text.Insert(cIndex, Dict(index)(0))
End If
txbInput.CaretIndex = cIndex + 1
txbInput.Focus()
End If
SHIFT = False
End Sub
#End Region
#Region "Tastatureingaben"
Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As _
System.Windows.RoutedEventArgs)
InsertOnCarret(1)
End Sub
Private Sub btn2_Click(ByVal sender As System.Object, ByVal e As _
System.Windows.RoutedEventArgs)
InsertOnCarret(2)
End Sub
'...
Private Sub btnZ_Click(ByVal sender As System.Object, ByVal e As _
System.Windows.RoutedEventArgs)
InsertOnCarret(35)
End Sub
#End Region
End Class |