2017-02-19 4 views
-2

Вот мой код: Он предназначен для вызова invalidinput когда dblprevious больше dblcurrent но показывают отрицательные выходы вместо этого я знаю его должен быть простымпочему мое сообщение коробка не работает

Public Class Form1 
'names the the class veriables 
Dim dblCurrent As Double 
Dim dblPervious As Double 
Private Sub invalidinput() 
    Const Message As String = "check your input" 
    Const title As String = " Attention!" 
    Const buttons = MessageBoxButtons.OK 
    MessageBox.Show(Message, title, buttons) 
End Sub 

Private Sub Total() 

    Dim dblTotalP As Double 
    Dim dblTotalG As Double 
    Const dblPerGC As Double = 5.15 
    Const dbltMinC As Double = 19.69 

    'stores the veriables 
    Double.TryParse(txtCurrentreading.Text, dblCurrent) 
    Double.TryParse(txtPerivousreading.Text, dblPervious) 
    dblTotalG = dblCurrent - dblPervious 
    dblTotalP = dblTotalG/1000 * dblPerGC 
    If dblTotalP < dbltMinC Then 
     dblTotalP = dbltMinC 
    End If 


    'displays totals 
    lblTotalG.Text = dblTotalG 
    lblTotalP.Text = dblTotalP.ToString("C2") 
End Sub 

Private Sub bntExit_Click(sender As Object, e As EventArgs) Handles bntExit.Click 
    Me.Close() 

End Sub 

Private Sub txtCurrentreading_keypress(sender As Object, e As KeyPressEventArgs) Handles txtCurrentreading.KeyPress 
    'allows text box to accept only numbers and the back space key 

    If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back Then 
     e.Handled = True 
    End If 

End Sub 

Private Sub txtPerivousreading_keypess(sender As Object, e As KeyPressEventArgs) Handles txtPerivousreading.KeyPress 
    'allows text box to accept only numbers and the back space key 


    If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back Then 
     e.Handled = True 
    End If 

End Sub 

Private Sub bntCalculate_Click(sender As Object, e As EventArgs) Handles bntCalculate.Click 

    'determines which calculations to do 
    If dblCurrent >= dblPervious Then 
     Call Total() 
    ElseIf dblPervious < dblCurrent Then 
     Call invalidinput() 
    End If 
End Sub 
End Class 
+0

используйте ваш отладчик, он входит в состав MS Access, и это поможет вам разобраться, в чем проблема, вы можете установить точку останова и пройти через код по строкам. – nicomp

+0

Пожалуйста, прочитайте [mcve] и специально прочитайте очень полезную страницу, связанную в нижней части отладки небольших программ. Многие люди считают, что создание [mcve] помогает им самим решать проблему. – AdrianHHH

+0

Вам не нужно использовать ключевое слово 'Call'. Это просто лишнее. –

ответ

0

Он предназначен для вызова invalidinput когда dblprevious больше dblcurrent

Изменение:

If dblCurrent >= dblPervious Then 
    Call Total() 
ElseIf dblPervious < dblCurrent Then 
    Call invalidinput() 
End If 

To:

If dblCurrent >= dblPervious Then 
    Call Total() 
Else 
    Call invalidinput() 
End If 

Ваш оригинальный чек на еще блок If dblPervious < dblCurrent Then прямо противоречит тому, что диктуется ваши требования! Если «dblCurrent» не больше или равно «dblPervious», тогда «dblPervious» должен быть больше, чем «dblCurrent», что позволяет нам полностью удалить вторую проверку.

+0

пытался, что иногда он работает другими, это не –

+0

Глупый вопрос ... если 'Total()' анализирует значения из ваших текстовых полей в переменные dblCurrent и dblPervious, как вы можете использовать эти значения переменных непосредственно над этим вызовом в вашей инструкции 'If' ... прежде чем они будут назначены? Что вы ожидаете там? Вы также не учитываете, что должно произойти, если 'Double.TryParse()' терпит неудачу. –

+1

о, боже, спасибо, ты этого не заметил, пока не сказал, что это исправлено –

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