1

私は DataGridView でコーディングしており、セルの形式が数字とコンマのみであるかどうかを検証しています。セルはドキュメント ページ用であり、true を返すサンプル形式であるか、受け入れます: 1,2 または 1,2,5 BUT NOT 1,,2 または 1,,,6,2

そのための関数を作成しましたが、問題なく動作しますが、コードの使用に慣れていません。自分よりも優れたコードがあることを願っています。

私のコードをより良く修正してください。

ありがとう。

Private Function isCELLPageNumb(ByRef valyo As String, ByVal origMaxPage As String) As Boolean
    If valyo = "0" Or valyo = "," Then
        valyo = origMaxPage 
        Return False
    End If
    Dim allowedChars As String = "0123456789,"
    For i As Integer = (valyo.Length - 1) To 0 Step -1
        If allowedChars.IndexOf(valyo(i)) = -1 Then
            valyo = origMaxPage 
            Return False
        End If
        Try
            If valyo(i) = "," Then
                If valyo(i + 1) = "," Then
                    valyo = origMaxPage 
                    Return False
                End If
            End If
        Catch ex As Exception
            valyo = origMaxPage 
            Return False
        End Try

        ''I THINK I HAVE TO SEE IF THE COMMA NEXT NUMBER IS GREATER THAN THE MAXPAGE
        ''If valyo(i)>origMaxPage then
        ''End If 

    Next
    Return True
End Function

origMaxPage を編集しました

Private Function isCELLPageNumb(ByRef valyo As String, ByVal origMaxPage As String) As Boolean
    If valyo = "0" Or valyo = "," Then
        valyo = origMaxPage
        Return False
    End If


    Dim allowedChars As String = "0123456789,"
    For i As Integer = (valyo.Length - 1) To 0 Step -1

        ''IF ALLOWED CHARACTERS NOT IN THE INDEX
        If allowedChars.IndexOf(valyo(i)) = -1 Then
            valyo = origMaxPage
            Return False
        End If

        Try
            ''IF VALYO IS COMMA REPEATED
            If valyo(i) = "," Then
                If valyo(i + 1) = "," Then
                    valyo = origMaxPage
                    Return False
                End If
            End If
        Catch ex As Exception
            valyo = origMaxPage
            Return False
        End Try

        Try
            ''IF VALYO GREATHER THAN THE MAXPAGE
            If valyo(i) = "," Then
                Dim twodigit As String = valyo(i + 1) & valyo(i + 2)
                Dim numtwodigit As UInt32 = Val(twodigit)
                If numtwodigit > origMaxPage Then
                    valyo = origMaxPage
                    Return False
                End If
            End If
        Catch ex As Exception
            valyo = origMaxPage
            Return False
        End Try

    Next
    Return True
End Function

コードの問題、maxpage が 12 の場合、ユーザーが 1,3,5,1111 を入力した場合はどうなるでしょうか。

入力は、-1 や -123 のような負の数を受け入れない場合があります。

ありがとう

4

3 に答える 3

2

いずれにせよページ番号を取得する必要があると思いますので、それから始めるべきです:

Public Function ParsePageNumbers(value As String, maxPage As Integer) As List(Of Integer)
        Dim values As New List(Of Integer)()


        For Each strNumber As var In value.Split(","C)
            Dim intValue As Integer
            ' if it wasn't an integer or it's greater than the max page, restore the original value
            If Not Integer.TryParse(strNumber, intValue) OrElse intValue > maxPage Then
                Return Nothing
            End If

            values.Add(intValue)
        Next

        Return values
    End Function

この関数はNothing、ページ番号に無効な値が含まれている場合に返されます。次に、実際のメソッドで、このメソッドを呼び出して次を確認できますNothing

Private Function isCELLPageNumb(ByRef valyo As String, ByVal origValue As String) As Boolean
    Dim maxPage As Integer = Integer.Parse(origMaxPage)
        ' if it's not parsible, restore the original value
        If ParsePageNumbers(value, maxPage) Is Nothing Then
            value = origMaxPage
            Return False
        End If

        ' it was all valid
        Return True
End Function
于 2013-06-09T19:32:28.407 に答える