-4

私は以前にwinfomsで働いていました。KeyPress イベントがありました。これで KeyChar を取得できます。

以下のコードはwinformで機能しました

Dim allowedChars as String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "

If allowedChars.IndexOf(e.KeyChar) = -1
    If Not e.KeyChar = Chr(Keys.Back) Then
        e.Handled = True
        Beep()
    End If
End If

しかし、WPFでは上記のコードを実装する方法がわかりませんか?

4

2 に答える 2

4

以下はC#ですが、簡単にVB.NETに変換できます。

private void NumericTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    char c = (char)KeyInterop.VirtualKeyFromKey(e.Key);

    if ("ABCDEF".IndexOf(c) < 0)
    {
        e.Handled = true;
        MessageBox.Show("Invalid character.");
    }
}

System.Windows.Inputを取得するにはインポートが必要な場合がありますKeyInterop。上記のコード セグメントPreviewKeyDownは、TextBox のイベントに入ります。

上記のすべてとそれ以上はここで見ることができます

于 2013-06-14T09:44:34.733 に答える
1

C# の場合

private bool ValidChar(string _char)
{
   string Lista = @" ! "" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ";
   return Lista.IndexOf(_char.ToUpper()) != -1;
}

private void textBoxDescripcion_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    if (!ValidChar(e.Text))
         e.Handled = true;
}

vb で

Private Function ValidChar(_char As String) As Boolean
    Dim Lista As String = " ! "" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z "
    Return Lista.IndexOf(_char.ToUpper()) <> -1
End Function

Private Sub textBoxDescripcion_PreviewTextInput(sender As Object, e As TextCompositionEventArgs)
    If Not ValidChar(e.Text) Then
        e.Handled = True
    End If
End Sub
于 2013-06-14T13:44:05.563 に答える