Не удается отправить вывод на метку в VB

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

Код:

    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"


person Community    schedule 03.11.2015    source источник
comment
CDbl(intTotal.ToString("C")) ... вы берете целое число, преобразуете его в строку, а затем снова анализируете его, чтобы оно удвоилось. Зачем ты это делаешь? Это не имеет смысла.   -  person Heinzi    schedule 03.11.2015
comment
Как именно это не удается? Когда вы выполняете это в отладчике, что может пойти не так? Каковы значения времени выполнения, когда это происходит? Установка значения lblTotal.Text установит текст этой метки.   -  person David    schedule 03.11.2015


Ответы (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...

person vbnet3d    schedule 03.11.2015

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

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

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

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

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

с

intTotal = 2 * intTotal
person Heinzi    schedule 03.11.2015

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

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

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

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

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

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

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

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

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

    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(Variables) были правильно введены.

person Brett Reinhard    schedule 03.11.2015