В моем вычислительном классе мы работали над использованием контрольных массивов для создания базового калькулятора. Имейте в виду, что я никогда раньше не работал с контрольными массивами. Это код, который у меня сейчас есть:
Option Explicit
Private Sub CmdCalc_Click(Index As Integer)
Dim TempSave1 As Double
Dim Answer As Double
Dim Symbol As String
Dim TempSave2 As Double
If CmdCalc(Index) = 10 Then
TempSave1 = LblOutput.Caption
Symbol = "/"
ElseIf CmdCalc(Index) = 11 Then
TempSave1 = LblOutput.Caption
Symbol = "*"
ElseIf CmdCalc(Index) = 12 Then
TempSave1 = LblOutput.Caption
Symbol = "-"
ElseIf CmdCalc(Index) = 14 Then
TempSave1 = LblOutput.Caption
Symbol = "+"
End If
LblOutput.Caption = ""
If Index = 13 Then
TempSave2 = LblOutput.Caption
Answer = TempSave1 & Symbol & TempSave2
End If
If Index = 0 Or 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Or 14 Then
LblOutput.Caption = LblOutput.Caption & CmdCalc(Index).Caption
End If
End Sub
Private Sub CmdClear_Click()
LblOutput.Caption = ""
End Sub
Единственная проблема, с которой я столкнулся, заключается в том, что после нажатия кнопки "=" переменная TempSave2 (используемая для получения моего ответа) остается пустой вместо числа, введенного пользователем. Я не уверен, как это исправить. Пытался все это переставить. Любая помощь приветствуется.
Первый пост здесь, пожалуйста, извините за плохой макет!
Спасибо, Кейран.
Простите за ужасную цветовую схему. Моя идея заключалась в том, что если мой учитель заставляет меня изучить эту ужасную концепцию, он сможет справиться с ужасными цветами: P
Кроме того, линия If Index = 0 Or 1 Or 2 Or 3 ... работает не так, как вы думаете. Это будет побитовое Or для этого целого числа, чтобы создать единственное целочисленное значение, а затем сравнить это единственное значение с переменной index.
Джоэл Кохорн, К сожалению, это единственная среда, в которой преподает моя школа :( Я понимаю, что она устарела, и я уже попросил либо обновить среду, либо использовать совсем другую. Ха-ха



Во-первых, вы хотите проверить значение индекса ниже, а не CmdCalc (Index):
If Index = 10 Then
TempSave1 = LblOutput.Caption
Symbol = "/"
ElseIf Index = 11 Then
TempSave1 = LblOutput.Caption
Symbol = "*"
ElseIf Index = 12 Then
TempSave1 = LblOutput.Caption
Symbol = "-"
ElseIf Index = 14 Then
TempSave1 = LblOutput.Caption
Symbol = "+"
End If
Далее ваша строка:
If Index = 0 Or 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Or 14 Then
не делает то, что вы думаете. Он оценивает все операторы Or вместе, а затем сравнивает их с Index. Это как если бы это было написано со следующими круглыми скобками:
If Index = (0 Or 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Or 14) Then
Я считаю, что этот код будет оцениваться ТОЛЬКО как истина, если Index = 14, но я не выполнял фактическую битовую математику, но, тем не менее, это явно не то, что вы хотите.
Есть несколько способов написать это, но самый короткий из них:
If (Index >= 0 And Index <= 12) Or Index = 14 Then
Не видя фактического экрана, я не могу комментировать остальную часть кода.
Результатом экспрессии Or является 15. См. Здесь: rextester.com/HBRS42698 Link использует VB.Net, но я был бы удивлен, если vb6 отличается от этого. Лично я бы сделал If Index >=0 And Index <= 14 And Index <> 13 Then
1, 2, 4 и 8 - or'ed действительно было бы 15. Остальное не имело значения - я виню задержку с распространением кофеина :) Спасибо за другой пример - новые программисты должны понимать, что (почти) всегда больше, чем один «правильный» ответ.
Я все еще не могу заставить TempSave2 сохранить второе число, которое вводит пользователь. Вместо этого он дает мне ошибку несоответствия типа. :(
Вам нужно преобразовать подписи (строки) в двойные. TempSave1 = CDbl(LblOutput.Caption) или TempSave1 = Val(LblOutput.Caption)
Спасибо! Решено сейчас. Я сделал свою переменную глобальной вместо локальной, чтобы они не перезаписывались каждый раз при запуске подпрограммы.
Объяснение скобок Or совершенно неверно. Первый If оценивается как True для любого значения Index (попробуйте -1, 42 и т. д.), В то время как повторная запись оценивается как True только для Index = 15 - почему?
Вы прямо сейчас изучаете vb6? Соболезнования. Массивы управления больше не являются частью современного языка VB.