I have a problem with "left"syntax
when i operate it in console application, it works
but when i operate it in windows application, the left syntax is error...
this is my code, can someone check my code please

' get and validate order no
Dim strOrderNo As String = _ ValidateOrderNumber(txtOrderNumber.Text)
If strOrderNo = "" Then
MessageBox.Show("Error: Invalid Order Number")
With txtOrderNumber
.SelectAll()
.Focus()
End With
Return
End If

Private Function ValidateOrderNumber(ByRef strOrderNo As String) _ As String

strOrderNo = strOrderNo.ToUpper

If Left(strOrderNo, 2) <> "SO" Then
' returns an empty string to denote error
Return ""
End If

' return valid order no
Return strOrderNo
End Function

the description say that 'Public Property Left() As Integer' has no parameters and its return type cannot be indexed.


can someone help me please..............
thanks

Left is no longer used in vb net. Instead of

If Left(strOrderNo, 2) <> "SO" Then

use

If strOrderNo.Substring(0, 2) <> "SO" Then

The first number is the starting position and the second is the number of characters to get.
This also replaces the mid and right string operations. If the second number is omitted then all the characters from the starting place are returned.

i still got the error on my program. the error is in red color font, it say that "Index and length must refer to a location within the string."
what it does mean? and can you check my coding. i want to validate the order number. the order number must be started with "SO" and then followed with 3 or 5 number. is the coding correct?

Thanks


Dim strOrderNo As String = ValidateOrderNumber(txtOrderNumber.Text)
If strOrderNo = "invalid" Then
MessageBox.Show("Error: Invalid Order Number")
With txtOrderNumber
.SelectAll()
.Focus()
End With
Return
End If


Private Function ValidateOrderNumber(ByRef strOrderNo As String) As String

strOrderNo = strOrderNo.ToUpper

If Not (Len(strOrderNo) >= 5 And Len(strOrderNo) <= 7) Then
Return "invalid"
End If
If Not (strOrderNo.Substring(0, 2)) = "SO" Then
Return "invalid"
End If
If Not (IsNumeric(strOrderNo.Substring(2, 5)) Or _
IsNumeric(strOrderNo.Substring(2, 7))) Then
Return "invalid"
End If

Return strOrderNo
End Function

Your problerm is if you have a string length of 5 and you are starting at the third position(2) and then going 5 more positions then you are past the end of your line. Same thing with length of 7.

'If Not (IsNumeric(strOrderNo.Substring(2, 5)) Or _
        'IsNumeric(strOrderNo.Substring(2, 7))) Then

Like vb6 if you did not give mid$ a second number it would take all the numbers from that starting position, substring does the same thing. So you do not need to check if it is 5 or 7 characters long.

If Not IsNumeric(strOrderNo.Substring(2)) Then

One other thing in this code:

If Not (Len(strOrderNo) >= 5 And Len(strOrderNo) <= 7) Then

if 4 numbers are entered it will accept them. I don't know if it is a typeing error or not but you said "followed with 3 or 5 number." If so then change it to the following"

If Len(strOrderNo) <> 5 Or Len(strOrderNo) <> 7 Then

Hope this helps.

Thanks for your suggestion. This thread is 3 years old. Please do not resurrect old/solved threads. If you want to ask question then start your own thread.

Thread Closed.

This article has been dead for over six months. Start a new discussion instead.