2015-07-08 6 views
1

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

Public Class VehicleAudit 

Private Sub Calculate() 
    Dim validMiles As Boolean = False 
    Dim validPercent As Boolean = False 
    Dim validAvg As Boolean = False 

    Dim inputtedMiles As Double 
    Dim inputtedPercent As Double 
    Dim inputtedAvgCost As Double 
    Dim servTruck As Integer 
    Try 
     inputtedMiles = Double.Parse(txtMilesDriven.Text) 
     inputtedPercent = Double.Parse(txtPercent.Text) 
     inputtedAvgCost = Double.Parse(txtAvgCost.Text) 
    Catch ex As FormatException 
     MessageBox.Show("Please enter all values and try again") 
     Return 
    End Try 

    Dim cal As String = FormatCurrency(Convert.ToString(inputtedAvgCost * inputtedMiles * (1.0 + inputtedPercent))) + " dollars." 

    ValidateBoxes(inputtedMiles, 0, 10000, "Miles must range from 0-10000.", validMiles) 
    ValidateBoxes(inputtedPercent, 0.1, 0.5, "Please enter percent from .10 to .50", validPercent) 
    ValidateBoxes(inputtedAvgCost, 0.25, 0.75, " Please enter Average cost from .25 to .75", validAvg) 

    If (validAvg And validMiles And validPercent) Then 
     Dim totalCost As Double 
     If boxVehicleSelect.SelectedIndex = 9 Then 
      servTruck = inputtedMiles/100 'this way we lose precision using the integer, so values below 100s are dropped. 
      totalCost = servTruck * 15.46 
     Else 
      totalCost = inputtedAvgCost * inputtedMiles * (1.0 + inputtedPercent) 
     End If 
    End If 


End Sub 

Private Sub txtTotalCost_TextChanged(ByVal Calculate As String, e As EventArgs) Handles txtTotalCost.TextChanged 

End Sub 
+0

Я не вижу, где вы меняете переменную в (validMiles, validPercent и validAvg). Вы передаете их в 'ValidateBoxes', но что это делает? Пожалуйста, обновите вопрос. – Codexer

+0

Private Sub ValidateBoxes (ByVal boxVal As Double, ByVal testLowVal As Double, ByVal testHighVal As Double, ByVal эээ As String, ByRef errCheck As Boolean) Если (boxVal testHighVal) Тогда MessageBox.Show (ERR) Else errCheck = True End If End Sub –

+0

Я не указал его, потому что его метод проверки ввода. Я просто хочу принять этот метод расчета и передать результат в txtTotalCost textBox –

ответ

1

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

If (validAvg And validMiles And validPercent) Then 
    Dim totalCost As Double 
    If boxVehicleSelect.SelectedIndex = 9 Then 
     servTruck = inputtedMiles/100 'this way we lose precision using the integer, so values below 100s are dropped. 
     totalCost = servTruck * 15.46 
    Else 
     totalCost = inputtedAvgCost * inputtedMiles * (1.0 + inputtedPercent) 
    End If 

    ' Output the computed "totalCost" some where. 
    ' Here I'm using a Textbox called "txtTotalCost": 
    txtTotalCost.Text = totalCost.ToString() 

End If 

Edit ...

Также вызовите ваш метод Calculate() всякий раз, когда один из ваших Textboxes изменений:

Private Sub TextChanged(sender As Object, e As EventArgs) Handles txtMilesDriven.TextChanged, txtAvgCost.TextChanged, txtPercent.TextChanged 
    Calculate() 
End Sub 

Обратите внимание, как все три текстовые поля перечислены после ключевого слова handles.

+0

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

+0

См. Мое редактирование. ... –

+0

Да, у меня это было первоначально в текстовом поле txtTotalCost и без кости, но когда я добавляю это в другие текстовые поля, теперь он постоянно работает в цикле. Я могу сказать, что каждый раз, когда я ввожу числовую позицию, он выдает сообщение об ошибке –

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