Как проверить, является ли ввод отрицательным числом в VB

Я пытаюсь выполнить некоторую проверку, которая проверяет, является ли значение в текстовом поле целым числом, а затем проверяет, является ли значение отрицательным. Он правильно проверяет, является ли значение целым числом, но я не могу заставить его проверить, является ли значение отрицательным.

Примечание. Вводимое значение представляет собой количество посещенных соревнований, поэтому соревнования = соревнование и т. д.

Dim comps As Integer
    Dim value As Double
    If Integer.TryParse(txtCompsEntered.Text, integer) Then
        value = txtCompsEntered.Text
        If value < 0 Then
            lblcompsatten.ForeColor = Color.Red
            txtCompsEntered.ForeColor = Color.Red
            lblcompsatten.Text = "No negative numbers"
        Else
            lblcompsatten.ForeColor = Color.Black
            txtCompsEntered.ForeColor = Color.Black
            lblcompsatten.Text = ""
        End If
        lblcompsatten.ForeColor = Color.Black
        txtCompsEntered.ForeColor = Color.Black
        lblcompsatten.Text = ""
    Else
        lblcompsatten.ForeColor = Color.Red
        txtCompsEntered.ForeColor = Color.Red
        lblcompsatten.Text = "Not a number"
    End If

Я уже просмотрел этот поток, но, похоже, он не работает in-vb">как-проверить-на-отрицательные-значения-в-текстовом-поле-в-vb


person user2970059    schedule 07.11.2014    source источник
comment
Если ответ Джона Скита не работает, вы почти наверняка сделали что-то не так. вы смешиваете типы Integer и Double и вообще не используете TryParse.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 07.11.2014


Ответы (3)


Tryparse преобразует ввод в целое число в случае успеха — вам не нужны переменные comps и value. Вот пример того, как это работает:

Dim comps As Integer
Dim input As String = "im not an integer"
Dim input2 As String = "2"

'tryparse fails, doesn't get into comps < 0 comparison
If Integer.TryParse(input, comps) Then
    If comps < 0 Then
        'do something
    End If
Else
   'I'm not an integer!
End If

'tryparse works, goes into comps < 0 comparison
If Integer.TryParse(input2, comps) Then
    If comps < 0 Then
        'do something
    End If
End If
person maxedev    schedule 07.11.2014
comment
Спасибо. Дело в том, что у меня не было второго integer.tryparse. - person user2970059; 11.11.2014
comment
Вам не нужно иметь оба ... это был просто пример того, как он вводит строку comps ‹ 0 на основе того, что ввод действительно может быть проанализирован до целого числа. - person maxedev; 11.11.2014

В вашем коде есть пара вещей, но основная проблема заключается в неправильном использовании Integer.TryParse.

Неправильно:

Dim value As Double
If Integer.TryParse(txtCompsEntered.Text, integer) Then
    value = txtCompsEntered.Text
        If value < 0 Then

Правильный:

Dim value As Integer
If Integer.TryParse(txtCompsEntered.Text, value) Then
    If value < 0 Then

Следует отметить, что Integer.TryParse вернет логическое значение (true, если значение может быть преобразовано в целое число, false, если нет). Они будут сбрасывать преобразованное значение во второй параметр, который вы ему передаете. В вашем случае у вас было «целое число», что неверно. Вы должны передать переменную, а затем использовать эту переменную для сравнения.

Также будьте осторожны с типами. У вас есть «значение» как двойное, когда вы, кажется, работаете с целыми числами.

person deloaf    schedule 07.11.2014

Может, попробовать это?

If myinteger.toString.Contains("-") Then
    'it's negative
Else
    'it isn't
End If

Или еще проще

If myinteger < 0 Then
    'it's not negative
Else
    'it is negative
End if
person Stefan Đorđević    schedule 27.06.2017