#validation #textbox #vb6 #label #currency
Вопрос:
Я пытался изменить код, но это не сработало. Вот мой код:
Private Sub CTcash_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
bill = Val(CTcash.Text - CLtotaloutput.Caption)
If Val(bill) > 0 Then
Change.CLchange.Caption = Val(bill)
Change.CLchange.Caption = Format(bill, "Rp. ###,###,###.-")
Change.Show
End If
If Val(bill) < 0 Then
MsgBox "Not Enough Money", vbOKOnly, "Invalid"
End If
End If
End Sub
Выделенный код
bill = Val(CTcash.Text - CLtotaloutput.Caption)
Ответ №1:
Оба CTcash.Текст и вывод CLTotaloutput.Подписи-это текстовые строки, поэтому вы не можете вычесть их напрямую. Попробуй:
bill = Val(CTcash.text) - Val(CLtotaloutput.Caption)
Вы действительно должны убедиться, что обе строки являются числовыми в первую очередь!
Комментарии:
1. Это правильно, но
Val
будет анализировать только целые числа и возвращать 0, если их нет или они находятся в конце строки. Ошибки не будет, если строки не являются числовыми.2. @eglease Вот почему я добавил свое последнее предложение!
3. Он работает не идеально, он продолжает показывать значение Val(CTcash.text) при изменении. CLchange. Подпись idk почему? Я пробовал этот код раньше, но я его меняю (
bill = Val(CTcash.text) - Val(CLtotaloutput.Caption)
)4. Что именно это не показывает правильно? Может ли быть проблема с форматированием? Я получаю странное форматирование, но правильные ответы при тестировании.
5. Хммм, Я форматирую вывод Cltotal. Подпись к «Rp. ###,###,###.-«. Я думаю, что в этом и заключается проблема
Ответ №2:
@Джон Исон прав. Вам также не нужно использовать Val
on bill
, так как это уже целое число. И вы ничего не делаете, если счет равен 0, но это может быть нормально в зависимости от ваших требований.
Private Sub CTcash_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
bill = Val(CTcash.Text) - Val(CLtotaloutput.Caption)
If bill > 0 Then ' Note that when bill is 0 nothing happens but that might be fine
'Change.CLchange.Caption = bill 'Not sure why this is needed but it may be
Change.CLchange.Caption = Format(bill, "Rp. ###,###,###.-")
Change.Show
End If
If bill < 0 Then
MsgBox "Not Enough Money", vbOKOnly, "Invalid"
End If
End If
End Sub
Я думаю, что лучшим подходом было бы использовать Select Case
утверждение.
Private Sub CTcash_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
bill = Val(CTcash.Text) - Val(CLtotaloutput.Caption)
Select Case True
Case bill > 0
Change.CLchange.Caption = Format(bill, "Rp. ###,###,###.-")
Change.Show
Case bill < 0
MsgBox "Not Enough Money", vbOKOnly, "Invalid"
Case Else
' Do nothing - this documents that this is done on purpose
End Select
End If
End Sub
Вы можете использовать IsNumeric
функцию, чтобы проверить, являются ли входные данные числовыми, и выполнить соответствующий анализ. Используйте эту Right
функцию, чтобы удалить все не-числа с левой стороны. Например, Right("$123", Len("$123") - 1)
удалит ведущую $
.
Чтобы удалить все нечисловые значения из строки:
Dim ResultString As String
myString = "aaa34BB12,000xcv9.9zz"
Dim i As Integer
For i = 1 To Len(myString)
myChar = Mid(myString, i, 1)
If IsNumeric(myChar) = True Then
ResultString = ResultString myChar
End If
Next
MsgBox ResultString
Обратите внимание, что это может вызвать проблему с десятичными суммами, так как 1.23 будет перед 123. Не то, чего ты хочешь. Попробуйте воспользоваться этой CCur
функцией. Я сам никогда им не пользовался, но, возможно, это именно то, что вам нужно.
Комментарии:
1. Ваш код, похоже, VB.Net, а не VB6, так как Q помечен
2. Это VB6 с тех пор, как я запустил его в Visual studio 6.
3. Извините, нет.
OrElse
, например, это не конструкция VB64. Ты прав. Я думал, вы имели в виду пример ответа с
Val
использованием. Последний код, который я только что скопировал из примера vbforum, отсюда ссылка, в качестве примера того, что можно сделать для удаления не-чисел.
Ответ №3:
Сначала я скучаю по константе, я помещаю ее в другую подложку:
Private Sub CTcash_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
bill = Val(CTcash.Text) - totalsum
Select Case True
Case bill > 0
Change.CLchange.Caption = Format(bill, "Rp. ###,###,###.-")
Change.Show
Case bill < 0
MsgBox "Not Enough Money", vbOKOnly, "Invalid"
Case Else
End Select
End If
End Sub
Private Sub CTbarcode_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case Is = vbKeyF6
totaldiscount = 200
totalsum = Val(CLsuboutput.Caption) - totaldiscount
CLtotaloutput.Caption = Format(totalsum, "Rp. ###,###,###. ,-")
CLdiscoutput.Caption = Format(totaldiscount, "Rp. ###,###,###. ,-")
CTcash.Enabled = True
CTcash.SetFocus
End Select
End Sub
Вот оно после того, как я его отредактирую:
Private Sub CTcash_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
totaldiscount = 200
totalsum = Val(CLsuboutput.Caption) - totaldiscount
bill = Val(CTcash.Text) - totalsum
Select Case True
Case bill > 0
Change.CLchange.Caption = Format(bill, "Rp. ###,###,###.-")
Change.Show
Case bill < 0
MsgBox "Not Enough Money", vbOKOnly, "Invalid"
Case Else
End Select
End If
End Sub