0

次のコードは、ユーザーがテキストボックス内のスペースを使用するのをブロックしていることを知っていますが、ユーザーがnumbbersとfulstopのみを使用できるようにするにはどうすればよいですか(1.5などの値を追加できます)

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

    If e.KeyCode = Keys.Space Then
        TextBox4.Clear()
        MsgBox("Invalid character. No spaces Permited...")

    End If
4

4 に答える 4

2

ユーザビリティの観点からは、KeyDownイベントで有効な入力をテストすることは適切ではありません。たとえば、ユーザーがテキスト ボックスにテキストを貼り付けたい場合はどうなるでしょうか。

さらに、ユーザーは TextBox のコンテキスト メニューを使用して無効な入力を貼り付けることができますが、コードはこれに気付きません。

すべての入力を許可し、ユーザーがテキスト ボックスを離れたときに有効性をテストする必要があります。VB には、このための特別なイベントがあり、テキスト ボックスがフォーカスを失うたびに発生します: Validating. このイベント (およびこのイベントのみ) を使用して、有効な入力をテストします。

于 2011-02-17T15:23:04.267 に答える
0

次のコードは、Firefox、IE 8、Chrome、Safari、および iPhone で機能しました。

function dotplaced(myfield){ if(myfield.indexOf(".")===-1){ return false; 真を返します。
} 関数 NumbersOnly(myfield, e) { var key; var keychar;

if (window.event) {
    key = window.event.keyCode;
}
else if (e) {
    key = e.which;
}
else {
    return true;
}

keychar = String.fromCharCode(key);

// control keys
if ((key == null) || (key == 0) || (key == 8) ||
(key == 9) || (key == 13) || (key == 27)) {
    return true;
}
// numbers
else if ((("0123456789").indexOf(keychar) > -1)) {
    return true;
}
// decimal point jump
else if (!dotplaced(myfield.value) && (keychar == ".")) {
    //myfield.form.elements[dec].focus();        
    return true;
}
else {
    return false;
}

}

于 2011-04-15T13:17:47.977 に答える
0

過去 20 年間コードを書いてきましたが、私は常に TextBox のチェック文字について次の論理的根拠を使用しています。
最初に、(便宜上) Char_Validation と呼ぶ別のクラスを作成する必要があります。
このクラス内に、次のようにブール値を返す関数を配置します。

Public Class Char_Validation
    Public Const Gr As String = "Greek"
    Public Const En As String = "English"
    Public Const Num As String = "Numbers"
    Public Const FullGr As String = "Full Greek"
    Public Const FullEn As String = "Full English"
    Public Const EnN As String = "English with Numbers"
    Public Const GrN As String = "Greek with Numbers"

    Public Shared Function ValidateChar(ByVal AsciiChar As String, ByVal CharTable As String, ByVal sender As Object, ByVal e As System.EventArgs) As Boolean
        Dim ConvChar As Integer = CUInt(Microsoft.VisualBasic.Asc(AsciiChar))
        Dim ConvCharW As Integer = CUInt(Microsoft.VisualBasic.AscW(AsciiChar))

        ValidateChar = False

        Select Case CharTable
            Case En
                Select Case ConvChar
                    Case 65 To 126, 145 To 150, 8, 32 To 47, 58 To 64, 128, 130
                        ValidateChar = True
                End Select
            Case EnN
                Select Case ConvChar
                    Case 48 To 57, 65 To 126, 8, 32, 45
                        ValidateChar = True
                End Select
.
.
.
.
.
            Case Num
                Select Case ConvChar
                    Case 44 To 57, 92, 8
                        ValidateChar = True
                End Select
        End Select

    End Function
End Class

フォームのクラスでは、次のコードを使用する TextBox_KeyPress を使用します。

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        ErrorProvider1.Clear()
        ErrorLabel.ForeColor = Drawing.Color.Black
    Select Case Char_Validation.ValidateChar(e.KeyChar, Char_Validation.Num, sender, e)
            Case True
            Case False
                ErrorProvider1.SetError(TextBox1, "Wrong Character Only Numbers")
                Beep()
    e.KeyChar = ""
        End Select
    End Sub

したがって、ユーザーがあなたの決定から文字を配置することを禁止します。
それがこれからあなたをカバーすることを願っています。

于 2011-02-18T19:13:06.190 に答える
0

これに対する簡単なアプローチは、「許可された」文字を探すことです。それらの文字の 1 つでない場合は、エラー メッセージを表示します。

于 2011-02-17T15:20:43.030 に答える