2016-10-28 3 views
0
Private Sub btnConfirmInfantry_Click(sender As Object, e As EventArgs) Handles btnConfirmInfantry.Click 
    Dim input = InputBox("How many do you want to attack with?", "Choose how many Infantry:") 
    Dim infantry As Integer 
    If (input > frmMainGame.lblInfantryNumberPlayer.Text) Then 
     MessageBox.Show("Error: The inputted number has to be <= current number of infantry.") 
    Else 

     If Integer.TryParse(input, infantry) Then 
      Dim hpai = Integer.Parse(frmMainGame.lblHPAI.Text, Globalization.NumberStyles.AllowThousands, Globalization.CultureInfo.InvariantCulture) 
      frmMainGame.lblHPAI.Text = String.Format("{0:n0}", hpai - infantry * 2) 

      Dim numPlayer = frmMainGame.lblInfantryNumberPlayer.Text 'Integer.Parse(frmMainGame.lblInfantryNumberPlayer.Text) 
      frmMainGame.lblInfantryNumberPlayer.Text = (numPlayer - input).ToString("N0") 

     End If 
    End If 
End Sub 

Я пытаюсь получить If (вход> frmMainGame.lblInfantryNumberPlayer.Text) Тогда Пропустите оставшуюся часть строки кода. Но проблема в том, что номера lblInfantry указаны в миллионах, и это только чтение первого числа, которое равно 2. Поэтому, если я ввещу 3, произойдет ошибка msgbox. Я пробовал Globilization.NumberStyles.AllowThousands, положив его после frm .... но это не сработало. Какие-либо предложения? Благодаря!Система ввода Box Значение

Примечание: Я хочу ввести входное значение как 30 дюймов, а если lblInfantry равно 100 000, тогда msgbox НЕ будет появляться, и код будет читаться после Else.

Update:

Private Sub btnConfirmInfantry_Click(sender As Object, e As EventArgs) Handles btnConfirmInfantry.Click 
      Dim input = InputBox("How many do you want to attack with?", "Choose how many Infantry:") 
    Dim infantry As Integer 

    Dim intInfanty As Integer = 0 
    Dim intInput As Integer = 0 
    Dim txt As String = frmMainGame.lblInfantryNumberPlayer.Text, intInfantry 

    If Integer.TryParse(input, intInput) AndAlso Integer.TryParse(txt, intInfantry) AndAlso (intInput > intInfantry) Then 
     If (IsNumeric(input) AndAlso IsNumeric(frmMainGame.lblInfantryNumberPlayer.Text) AndAlso CInt(input) > CInt(frmMainGame.lblInfantryNumberPlayer.Text)) Then 
      MessageBox.Show("The value can not be a letter.") 
     Else 

      If Integer.TryParse(input, infantry) Then 
       Dim hpai = Integer.Parse(frmMainGame.lblHPAI.Text, Globalization.NumberStyles.AllowThousands, Globalization.CultureInfo.InvariantCulture) 
       frmMainGame.lblHPAI.Text = String.Format("{0:n0}", hpai - infantry * 2) 

       Dim numPlayer = frmMainGame.lblInfantryNumberPlayer.Text 'Integer.Parse(frmMainGame.lblInfantryNumberPlayer.Text) 
       frmMainGame.lblInfantryNumberPlayer.Text = (numPlayer - input).ToString("N0") 

      End If 
     End If 
    Else 

     MessageBox.Show("Error: The inputted number has to be <= current number of infantry.") 
    End If 
End Sub 
+0

Результаты InputBox и свойства текста являются строками. Перед тем, как оценивать их, вы должны попробовать их запрудить. – LarsTech

ответ

1

Вы должны преобразовать входные значения в целые числа. Используя сравнительный оператор, такой как > на строках, вы сделаете сравнение в алфавитном порядке, так, например, "20000" < "3" возвращает true - в алфавитном порядке, 20000 на первом месте.

Dim intInfanty as int = 0; 
Dim intInput as int = 0; 
Dim txt as String = frmMainGame.lblInfantryNumberPlayer.Text, intInfantry; 

If Int.TryParse(input, intInput) AndAlso Int.TryParse(txt, intInfantry) Then 
    If (intInput > intInfantry) Then 
     'Input > InfantryNumberPlayer 
    Else 
     'Input <= InfantryNumberPlayer 
    End If 
Else 
    'Skipped the > comparison because one of them wasn't a number 
    '"Please make sure you entered a valid number" 
End If 

Если вы хотите, чтобы объединить If заявления, так что не-числовые значения попадают в ту же else как > сравнения, вы можете сделать это:

Dim intInfanty as int = 0; 
Dim intInput as int = 0; 
Dim txt as String = frmMainGame.lblInfantryNumberPlayer.Text, intInfantry; 

If Int.TryParse(input, intInput) AndAlso Int.TryParse(txt, intInfantry) AndAlso (intInput > intInfantry) Then 
    'Input > InfantryNumberPlayer 
Else 
    'Anything else happened 
    '(Input was <= InfantryNumberPlayer, OR one wasn't a number) 
End If 
+0

Это сработало. Большое спасибо! Я буду помнить об этом в следующий раз. –

+0

Нет проблем. Сценарий, который я написал выше, является, по общему признанию, быстрым и грязным. Если числа не могут быть преобразованы в целые числа, * скрипт выдаст ошибку *. Я напишу более правильное решение. ** EDIT: ** Я добавил отказоустойчивость. Если любое из значений не является числовым, код попадает в регистр 'else'. – Santi

+0

Я добавлю это в свой код. Большое спасибо! –

Смежные вопросы