Ошибка при простой арифметике
Код:
Option Explicit
Private Sub Text1_Change()
If Text1.Text = False Then
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
End If
If Text1.Text = "" Then
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
End If
If Text1.Text > 0 Then
Text3.Text = Sin(Text1.Text)
Text4.Text = Cos(Text1.Text)
Text5.Text = Tan(Text1.Text)
Text6.Text = Atn(Text1.Text)
End If
End Sub
Private Sub Text1_Change()
If Text1.Text = False Then
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
End If
If Text1.Text = "" Then
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
End If
If Text1.Text > 0 Then
Text3.Text = Sin(Text1.Text)
Text4.Text = Cos(Text1.Text)
Text5.Text = Tan(Text1.Text)
Text6.Text = Atn(Text1.Text)
End If
End Sub
При введении в текст1, остальные обновляются, а вот когда уже этот текст1 очищаешь бекспейсом то дает ошибку.
Я новичок, помогите разобраться.
Text1.Text - строка. Как Вы сравниваете ее с булевским False или числом 0?
Это мой первый калькулятор, помогите как лутьше сделать.
Код:
Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const ES_NUMBER = &H2000
Private Const GWL_STYLE = (-16)
Private Sub Form_Load()
Call SetWindowLong(Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER)
Call SetWindowLong(Text2.hwnd, GWL_STYLE, GetWindowLong(Text2.hwnd, GWL_STYLE) Or ES_NUMBER)
End Sub
Private Sub Text1_Change()
If Text1.Text = 0 Then
Text3.Text = 0
Text4.Text = 0
Text5.Text = 0
Text6.Text = 0
End If
If Text1.Text > 0 Then
Text3.Text = Sin(Text1.Text)
Text4.Text = Cos(Text1.Text)
Text5.Text = Tan(Text1.Text)
Text6.Text = Atn(Text1.Text)
End If
End Sub
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const ES_NUMBER = &H2000
Private Const GWL_STYLE = (-16)
Private Sub Form_Load()
Call SetWindowLong(Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER)
Call SetWindowLong(Text2.hwnd, GWL_STYLE, GetWindowLong(Text2.hwnd, GWL_STYLE) Or ES_NUMBER)
End Sub
Private Sub Text1_Change()
If Text1.Text = 0 Then
Text3.Text = 0
Text4.Text = 0
Text5.Text = 0
Text6.Text = 0
End If
If Text1.Text > 0 Then
Text3.Text = Sin(Text1.Text)
Text4.Text = Cos(Text1.Text)
Text5.Text = Tan(Text1.Text)
Text6.Text = Atn(Text1.Text)
End If
End Sub
Цитата: George
Text1.Text - строка. Как Вы сравниваете ее с булевским False или числом 0?
На самом-то деле в VB можно и не такое.Но в данном случае ТС неправ.Надо сравнивать Text1.Text с ""(если проверку на пустое поле) или с Val(Text1.Text)(но могут быть ошибки)
Код:
Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const ES_NUMBER = &H2000
Private Const GWL_STYLE = (-16)
Private Sub Form_Load()
Call SetWindowLong(Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER)
Call SetWindowLong(Text2.hwnd, GWL_STYLE, GetWindowLong(Text2.hwnd, GWL_STYLE) Or ES_NUMBER)
End Sub
Private Sub Text1_Change()
If Val(Text1.Text) = 0 Then
Text3.Text = 0
Text4.Text = 1
Text5.Text = 0
Text6.Text = 0
End If
If Text1.Text = "" Then
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
End If
If Val(Text1.Text) = Val(Text1.Text) Then
Text3.Text = Sin(Val(Text1.Text))
Text4.Text = Cos(Val(Text1.Text))
Text5.Text = Tan(Val(Text1.Text))
Text6.Text = Atn(Val(Text1.Text))
End If
End Sub
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const ES_NUMBER = &H2000
Private Const GWL_STYLE = (-16)
Private Sub Form_Load()
Call SetWindowLong(Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER)
Call SetWindowLong(Text2.hwnd, GWL_STYLE, GetWindowLong(Text2.hwnd, GWL_STYLE) Or ES_NUMBER)
End Sub
Private Sub Text1_Change()
If Val(Text1.Text) = 0 Then
Text3.Text = 0
Text4.Text = 1
Text5.Text = 0
Text6.Text = 0
End If
If Text1.Text = "" Then
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
End If
If Val(Text1.Text) = Val(Text1.Text) Then
Text3.Text = Sin(Val(Text1.Text))
Text4.Text = Cos(Val(Text1.Text))
Text5.Text = Tan(Val(Text1.Text))
Text6.Text = Atn(Val(Text1.Text))
End If
End Sub
Вродебы заработало
1. Сравнивать Text1.Text лучше с текстовыми значениями
2. Оператор Else ваше фсйо
3. Что это вообще за мегакод?
Это ест естественно калькулятор.
Проблема новая нашлась, как в текст боксе кнопкой удалить последний символ?
Например,так.Но это простой вариант
И еще как мне сделать так чтобы в поля ввода можно было вводить цыфры знак минуса и запятую.
Цитата: JEY
И еще как мне сделать так чтобы в поля ввода можно было вводить цыфры знак минуса и запятую.
Их ведь и так можно вводить,или я ошибаюсь?;)
Неправильно выразился, чтоб ток их можно вводить
Не такая уж это простая задача.Тут 2 варианта–использовать API или разрешать вводить что угодно,но потом фильтроват содержимое поля
@pixo $oft, хватит уже говорить о том, чего не знаешь?
Насколько я помню,средствами VB нельзя отменить ввод символа.Ну и при вставке из буфера "проверять вводимый символ" не получится,тут придётся писать отдельную ветвь
Цитата: @pixo $oft
Чего же я написал,что не знаю?Что знаю,то и пишу:)
В том то и дело, что не знаешь. Ты пишешь на ВБ?
Цитата: @pixo $oft
Насколько я помню,средствами VB нельзя отменить ввод символа.Ну и при вставке из буфера "проверять вводимый символ" не получится,тут придётся писать отдельную ветвь
Плохо помнишь, делается это через события, как я выше написал.
Возможно,через KeyDown\KeyUp\… можно так сделать–VB под рукой нет.Только если в случае закрытия формы это можно отменить,установив Cancel в 1(так вроде),то в случае с символами я там не припомню такого параметра
Опять же,остаётся проблема вставки из буфера(тут эти события вернут ТСу код комбинации клавиш).Тогда или событие Change,или опять постпроверка
[SIZE="1"][COLOR="Gray"](вроде как у меня достаточно постов было,где я упоминал про VB)[/COLOR][/SIZE]
Цитата: @pixo $oft
Конечно,пишу.И про события знаю,работал же с ними
Непохоже, даже VB под рукой нету. В том же акцессе мог бы проверить.
Цитата: @pixo $oft
Возможно,через KeyDown\KeyUp\… можно так сделать–VB под рукой нет.Только если в случае закрытия формы это можно отменить,установив Cancel в 1(так вроде),то в случае с символами я там не припомню такого параметра
А он есть.
Цитата: @pixo $oft
Опять же,остаётся проблема вставки из буфера(тут эти события вернут ТСу код комбинации клавиш).Тогда или событие Change,или опять постпроверка
извращения
Цитата: @pixo $oft
(вроде как у меня достаточно постов было,где я упоминал про VB)
я не слежу за твоими постами, извини. зачем мне?
Цитата: @pixo $oft
Ваши идеи ТСу?
Я все написал выше. События.
Dim X As String, x1, x2 As Variant
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape1.Visible = False: Shape2.Visible = False: Shape3.Visible = False: Shape4.Visible = False
Shape5.Visible = False: Shape6.Visible = False: Shape7.Visible = False: Shape8.Visible = False
Shape9.Visible = False: Shape10.Visible = False
End Sub
Private Sub Image1_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 1
Text2.Text = X
Text1.Text = Text1.Text + Text2.Text
End Sub
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape1.Visible = False
End Sub
Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape1.Visible = True
End Sub
Private Sub Image10_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 0
Text2.Text = X
Text1.Text = Text1 + Text2
End Sub
Private Sub Image10_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape10.Visible = False
End Sub
Private Sub Image10_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape10.Visible = True
End Sub
Private Sub Image11_Click() 'ввод запятой для десятичных чисел
If x2 = 1 Then Text1.Text = "": x2 = 0
Text2.Text = X
Text1.Text = Text1.Text + "."
End Sub
Private Sub Image12_Click()
If x1 = 1 Then Text1.Text = Val(Text3.Text) - Val(Text1.Text)
If x1 = 2 Then Text1.Text = Val(Text3.Text) + Val(Text1.Text)
If x1 = 3 Then Text1.Text = Val(Text3.Text) * Val(Text1.Text)
If x1 = 4 Then Text1.Text = Val(Text3.Text) / Val(Text1.Text)
x1 = 5 'значение подрозумевающее получается=
Text3.Text = Text1.Text
Text2.Text = ""
x2 = 1
End Sub
Private Sub Image15_Click()
If x1 = 1 Then Text1.Text = Val(Text3.Text) - Val(Text1.Text)
If x1 = 2 Then Text1.Text = Val(Text3.Text) + Val(Text1.Text)
If x1 = 3 Then Text1.Text = Val(Text3.Text) * Val(Text1.Text)
If x1 = 4 Then Text1.Text = Val(Text3.Text) / Val(Text1.Text)
x1 = 3 'значение подрозумевающее умножение
Text3.Text = Text1.Text
Text2.Text = ""
x2 = 1
End Sub
Private Sub Image16_Click()
If x1 = 1 Then Text1.Text = Val(Text3.Text) - Val(Text1.Text)
If x1 = 2 Then Text1.Text = Val(Text3.Text) + Val(Text1.Text)
If x1 = 3 Then Text1.Text = Val(Text3.Text) * Val(Text1.Text)
If x1 = 4 Then Text1.Text = Val(Text3.Text) / Val(Text1.Text)
x1 = 4 'значение подрозумевающее деление
Text3.Text = Text1.Text
Text2.Text = ""
x2 = 1
End Sub
Private Sub Image17_Click() 'стерка последнего ошибочно введенного числа
Text1.Text = ""
End Sub
Private Sub Image18_Click() 'забрать в память и прибавить другое в него М+
Text4.Text = Val(Text4.Text) + Val(Text1.Text)
Text1.Text = ""
Label1.Caption = "M"
End Sub
Private Sub Image19_Click() 'стерка памяти
Text4.Text = ""
Label1.Caption = ""
End Sub
Private Sub Image2_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 2
Text2.Text = X
Text1.Text = Text1 + Text2
End Sub
Private Sub Image2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape2.Visible = False
End Sub
Private Sub Image2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape2.Visible = True
End Sub
Private Sub Image20_Click() 'посмотреть число в памяти
Text1.Text = Text4.Text
End Sub
Private Sub Image21_Click() 'ввод нового числа в память
Text4.Text = Text1.Text
Text1.Text = ""
Label1.Caption = "M"
End Sub
Private Sub Image22_Click() '1/х
Text1.Text = 1 / Text1.Text
End Sub
Private Sub Image23_Click()
Text1.Text = "Братишка я устал, сам вычисляй свой процент!!!"
End Sub
Private Sub Image24_Click() 'корень квадратный
Text1.Text = Sqr(Text1.Text)
End Sub
Private Sub Image25_Click() 'стереть все и начать расчеты заново
Text1.Text = ""
x1 = 0: x2 = 0: X = 0: Text2.Text = 0: Text3.Text = 0
End Sub
Private Sub Image26_Click() 'смена знаков
Text1.Text = Text1.Text * (-1)
End Sub
Private Sub Image27_Click()
Text1.Text = Text1 \ 10 'возврат напечатанной цифры на 1 знак 12345...1234
End Sub
Private Sub Image3_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0 'для удержания текстового окна 1 и обнуления до момента ввода следующей переменной
X = 3 'сама добавляемая переменная
Text2.Text = X 'для добавления значения в строке например 3
Text1.Text = Text1 + Text2 'для складывания строчных значений 12+3=123
End Sub
Private Sub Image14_Click() ' вычитание
If x1 = 2 Then Text1.Text = Val(Text3.Text) + Val(Text1.Text)
If x1 = 1 Then Text1.Text = Val(Text3.Text) - Val(Text1.Text)
If x1 = 3 Then Text1.Text = Val(Text3.Text) * Val(Text1.Text)
If x1 = 4 Then Text1.Text = Val(Text3.Text) / Val(Text1.Text)
x1 = 1 'значение символизирующее вычитание
Text3.Text = Text1.Text 'закладывает в буфер введенное значение
Text2.Text = "" 'обнуляет строчный буфер
x2 = 1 'для того, чтобы удерживать значение цифр в текстовом окне 1 до ввода следующего значения
End Sub
Private Sub Image13_Click() 'сложение
If x1 = 1 Then Text1.Text = Val(Text3.Text) - Val(Text1.Text)
If x1 = 2 Then Text1.Text = Val(Text3.Text) + Val(Text1.Text)
If x1 = 3 Then Text1.Text = Val(Text3.Text) * Val(Text1.Text)
If x1 = 4 Then Text1.Text = Val(Text3.Text) / Val(Text1.Text)
x1 = 2 'значение подрозумевающее сложение
Text3.Text = Text1.Text
Text2.Text = ""
x2 = 1
End Sub
Private Sub Image3_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape3.Visible = False
End Sub
Private Sub Image3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape3.Visible = True
End Sub
Private Sub Image4_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 4
Text2.Text = X
Text1.Text = Text1 + Text2
End Sub
Private Sub Image4_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape4.Visible = False
End Sub
Private Sub Image4_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape4.Visible = True
End Sub
Private Sub Image5_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 5
Text2.Text = X
Text1.Text = Text1 + Text2
End Sub
Private Sub Image5_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape5.Visible = False
End Sub
Private Sub Image5_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape5.Visible = True
End Sub
Private Sub Image6_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 6
Text2.Text = X
Text1.Text = Text1 + Text2
End Sub
Private Sub Image6_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape6.Visible = False
End Sub
Private Sub Image6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape6.Visible = True
End Sub
Private Sub Image7_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 7
Text2.Text = X
Text1.Text = Text1 + Text2
End Sub
Private Sub Image7_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape7.Visible = False
End Sub
Private Sub Image7_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape7.Visible = True
End Sub
Private Sub Image8_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 8
Text2.Text = X
Text1.Text = Text1 + Text2
End Sub
Private Sub Image8_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape8.Visible = False
End Sub
Private Sub Image8_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape8.Visible = True
End Sub
Private Sub Image9_Click()
If x2 = 1 Then Text1.Text = "": x2 = 0
X = 9
Text2.Text = X
Text1.Text = Text1 + Text2
End Sub
Private Sub Image9_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape9.Visible = False
End Sub
Private Sub Image9_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Shape9.Visible = True
End Sub
если надо
калькулятор сфоткал с настоящего , и описал его клавиши
получилось вроде бы ничего
В калькуляторе (похожем на виндусовский) полно ошибок, несовпадение типов, деление на ноль и др.