2015-11-03 5 views
1

Кусок кода, который у меня есть, делает это так, чтобы при проверке переключателя общая сумма умножалась на 2. Уравнение 500 раз 2, а 1000 хранится но я не могу его каким-либо образом показать.Невозможно отправить вывод на метку в VB

Код:

If radMeter.Checked Then 
     intTotal = CInt(intMeter.ToString("C")) 

    ElseIf radZone.Checked Then 
     intTotal = CInt(intParking.ToString("C")) 

    ElseIf radBlocking.Checked Then 
     intTotal = CInt(intDriveway.ToString("C")) 

    ElseIf radHandicap.Checked Then 
     intTotal = CInt(intHandicap.ToString("C")) 

     If radRepeat.Checked Then 
      lblTotal.Text = CStr(2 * CDbl(intTotal.ToString("C"))) 
     End If 

    End If 

    'Output 
    lblTotal.Text = intTotal.ToString("C") 

В частности в строке 13 "radRepeat"

+2

'CDbl (intTotal.ToString (" C "))' ... вы берете целое число, преобразуете его в строку и затем снова разбираете, чтобы удвоить. Зачем ты это делаешь? Это не имеет смысла. – Heinzi

+1

Как именно это происходит? Когда вы проходите через это в отладчике, где это происходит неправильно? Каковы значения времени выполнения, когда это происходит? Установка значения 'lblTotal.Text' будет устанавливать текст этой метки. – David

ответ

3

Обзор код внимательно - вы на самом деле писать ДВАЖДЫ этикетки (в результате чего ваши изменения будут перезаписаны, и никогда не сохраняются в переменной intTotal):

If radRepeat.Checked Then 
     **lblTotal.Text** = CStr(2 * CDbl(intTotal.ToString("C"))) 
    End If 

End If 

'Output 
**lblTotal.Text** = intTotal.ToString("C") 

Вы должны заменить:

lblTotal.Text = CStr(2 * CDbl(intTotal.ToString("C"))) 

С

intTotal = (2 * intTotal) 

А затем пусть ваше последнее заявление писать на этикетке, как обычно.

Если вы пытаетесь НЕ изменить значение в intTotal, но по-прежнему показывать удвоенное количество в метке, то вы должны переместить метку записи в вашем If ... Else ... блокировать

3

В последней строке:

'Output 
lblTotal.Text = intTotal.ToString("C") 

перезаписывается lblTotal с текущего значения intTotal, которые вам не умножить на 2 (т. е. вы переписываете то, что вы сделали в строке 13).

Самый простой способ исправить это, чтобы заменить

lblTotal.Text = CStr(2 * CDbl(intTotal.ToString("C"))) 

с

intTotal = 2 * intTotal 
2

Что вы может попытаться сделать, чтобы увидеть, действительно ли ошибка с кодом или просто простая логическая ошибка вставляет несколько разрывов после каждого блока кода.

Что я мог бы увидеть, так это то, что когда у вас установлен гандикап радиокнопки, и, кроме того, повторен флажок переключателя, код будет вычислять значение * 2, но после того, как оператор if будет закрыт, он снова напишет в текстовое поле lblTotal, создавая впечатление, будто он не вычисляет.

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

Я хотел бы предложить следующее исправление:

If radRepeat.Checked Then 
     intTotal = CStr(2 * CDbl(intTotal.ToString("C"))) 
End If 

Таким образом, ваш выход будет работать для всех предыдущих если/тогда заявления.

Редактировать: Я понимаю, что это по существу было покрыто комментарием выше меня и немного почищено.

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

Это будет выглядеть примерно так:

If radMeter.Checked Then 
    intTotal = intMeter 

ElseIf radZone.Checked Then 
    intTotal = intParking 

ElseIf radBlocking.Checked Then 
    intTotal = intDriveway 

ElseIf radHandicap.Checked Then 
    intTotal = intHandicap 

    If radRepeat.Checked Then 
     intTotal = (2 * intTotal) 
    End If 

End If 

'Output 
lblTotal.Text = intTotal.ToString("C") 

Конечно, это при условии, что эти Int (переменные) были введены правильно.