电力线路对地安全距离:用VB编写计算器?

来源:百度文库 编辑:神马品牌网 时间:2024/04/30 16:18:50

建立14个按钮,按钮的名字都要Command1,设置Index属性,0~9分别对应数字0~9,10为小数点,11为等号,12~14分别对应+、-、*和/。
2、输入如下代码:
Dim Num1, Num2 As Single
Dim StrNum1, StrNum2 As String
Dim FirstNum As Boolean
Dim PointFlag As Boolean
Dim Runsign As Integer
Dim SignFlag As Boolean
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0 To 9
If FirstNum Then
StrNum1 = Str(Index)
FirstNum = False
Else
StrNum1 = LTrim(StrNum1) + LTrim(Str(Index))
End If
Text1.Text = Val(StrNum1)
Case 10
If Not PointFlag Then
If FirstNum Then
StrNum1 = "0."
FirstNum = False
Else
StrNum1 = LTrim(StrNum1) + LTrim(".")
End If
Else
Exit Sub
End If
PointFlag = True
Text1.Text = Val(StrNum1)
Case 12 To 15
FirstNum = True
PointFlag = False
If SignFlag Then
Call Run
Else
SignFlag = True
StrNum2 = StrNum1
StrNum1 = ""
End If
Runsign = Index - 11
Case 11
On Error Resume Next
If Not SignFlag Then
Text1.Text = StrNum1
equal = Val(StrNum1)
FirstNum = True
PointFlag = False
Else
Call Run
SignFlag = False
End If
Case Else
Call ClearData
End Select
End Sub
Private Sub Form_Load()
If App.PrevInstance Then MsgBox "请不要多次运行此程序,谢谢!", vbAbortRetryIgnore: Unload Me
Num1 = 0
Num2 = 0
StrNum1 = ""
StrNum2 = ""
FirstNum = True
PointFlag = False
Runsign = 0
SignFlag = False
End Sub
Sub Run()
On Error Resume Next
Dim equal As Single
Dim equal2 As Double
Num1 = Val(StrNum2)
Num2 = Val(StrNum1)
Select Case Runsign
Case 1
equal = Num1 + Num2
If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
equal = 0
equal2 = Num1 + Num2
End If
Case 2
equal = Num1 - Num2
If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
equal = 0
equal2 = Num1 - Num2
End If
Case 3
equal = Num1 * Num2
If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
equal = 0
equal2 = Num1 * Num2
End If
Case 4
equal = Num1 / Num2
If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
equal = 0
equal2 = Num1 / Num2
End If
End Select
If equal = 0 Then a = equal2 Else a = equal
StrNum2 = Str(a)
StrNum1 = StrNum2
Text1.Text = Val(StrNum2)
End Sub
Sub ClearData()
Num1 = 0
Num2 = 0
StrNum1 = ""
StrNum2 = ""
FirstNum = True
PointFlag = False
Runsign = 0
SignFlag = False
Text1.Text = 0
End Sub

看你需要哪种类型的,如果简单的就用上面的
如果你需要运算比如输入:2^12+2*sin(6*2-5+6*cos(1+(5and4)+12/7))之类的运算的话,上面的就不行了
我编了一个计算器dll;
支持运算符:+、-、*、/、^、!、&、|、>、<、>=、<=、<>、=、Sin、Cos、Tan
而且支持任意长度、精度的运算;

MSDN的范例程序里面有一个是计算器好像。

我做过

创建一个新的工程。
步骤2:
在窗体上添加一个文本框控件和十九个命令按钮控件,并适当调整的大小及位置。
步骤3:
将文本框控件的“Alignment”属性设置为“1-Right Justify”,将其字号设为“三号”,将“Text”属性设置为空(“”)。
步骤4:
依次将命令按钮控件的“Caption”属性设置为“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“0”、“.”、“+”、“-”、“*”、“/”、“Mod”、“Sqrt”、“C”。
步骤5:
将窗体的“Caption”属性设置为“计算器”。
Option Explicit
Dim sz As Integer &#39;用来记录进行何种运算
Dim x As Single, y As Single &#39;用来记录进行运算的两个数
&#39;从第一个命令按钮到第十个是用来输入0至9十个数字的
正式程序如下:
Private Sub Command1_Click()
Text1.Text = Text1.Text & "1"
End Sub
Private Sub Command2_Click()
Text1.Text = Text1.Text & "2"
End Sub
Private Sub Command3_Click()
Text1.Text = Text1.Text & "3"
End Sub
Private Sub Command4_Click()
Text1.Text = Text1.Text & "4"
End Sub
Private Sub Command5_Click()
Text1.Text = Text1.Text & "5"
End Sub
Private Sub Command6_Click()
Text1.Text = Text1.Text & "6"
End Sub
Private Sub Command7_Click()
Text1.Text = Text1.Text & "7"
End Sub
Private Sub Command8_Click()
Text1.Text = Text1.Text & "8"
End Sub
Private Sub Command9_Click()
Text1.Text = Text1.Text & "9"
End Sub
Private Sub Command10_Click()
Text1.Text = Text1.Text & "0"
End Sub
Private Sub Command11_Click()
Text1.Text = Text1.Text & "." &#39;输入小数点
End Sub
Private Sub Command12_Click()
x = CSng(Text1.Text) &#39;将输入的数转换成单精度型的
sz = 1 &#39;设置即将进行的是加法运算
Text1.Text = "" &#39;将文本框清空,以便输入第二个数
End Sub
Private Sub Command13_Click()
x = CSng(Text1.Text)
sz = 2
Text1.Text = ""
End Sub
Private Sub Command14_Click()
x = CSng(Text1.Text)
sz = 3
Text1.Text = ""
End Sub
Private Sub Command15_Click()
x = CSng(Text1.Text)
sz = 4
Text1.Text = ""
End Sub
Private Sub Command16_Click()
x = CSng(Text1.Text)
sz = 5
Text1.Text = ""
End Sub
Private Sub Command17_Click()
x = CSng(Text1.Text)
Text1.Text = Sqr(x) &#39;因为求平方根只需一个运算对象,因此在此就给出结果
End Sub
Private Sub Command18_Click()
On Error GoTo ex &#39;设置如果遇到错误就退出此过程
y = CSng(Text1.Text)
Select Case sz &#39;根据sz的值来决定进行何种运算
Case 1
Text1.Text = x + y &#39;进行加法运算并将结果显示在文本框中
Case 2
Text1.Text = x - y
Case 3
Text1.Text = x * y
Case 4
Text1.Text = x / y
Case 5
Text1.Text = x Mod y
End Select
ex:
End Sub
Private Sub Command19_Click()
Text1.Text = "" &#39;将文本框清空,以便输入新的数字
End Sub

建立14个按钮,按钮的名字都要Command1,设置Index属性,0~9分别对应数字0~9,10为小数点,11为等号,12~14分别对应+、-、*和/。
2、输入如下代码:
Dim Num1, Num2 As Single
Dim StrNum1, StrNum2 As String
Dim FirstNum As Boolean
Dim PointFlag As Boolean
Dim Runsign As Integer
Dim SignFlag As Boolean
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0 To 9
If FirstNum Then
StrNum1 = Str(Index)
FirstNum = False
Else
StrNum1 = LTrim(StrNum1) + LTrim(Str(Index))
End If
Text1.Text = Val(StrNum1)
Case 10
If Not PointFlag Then
If FirstNum Then
StrNum1 = "0."
FirstNum = False
Else
StrNum1 = LTrim(StrNum1) + LTrim(".")
End If
Else
Exit Sub
End If
PointFlag = True
Text1.Text = Val(StrNum1)
Case 12 To 15
FirstNum = True
PointFlag = False
If SignFlag Then
Call Run
Else
SignFlag = True
StrNum2 = StrNum1
StrNum1 = ""
End If
Runsign = Index - 11
Case 11
On Error Resume Next
If Not SignFlag Then
Text1.Text = StrNum1
equal = Val(StrNum1)
FirstNum = True
PointFlag = False
Else
Call Run
SignFlag = False
End If
Case Else
Call ClearData
End Select
End Sub
Private Sub Form_Load()
If App.PrevInstance Then MsgBox "请不要多次运行此程序,谢谢!", vbAbortRetryIgnore: Unload Me
Num1 = 0
Num2 = 0
StrNum1 = ""
StrNum2 = ""
FirstNum = True
PointFlag = False
Runsign = 0
SignFlag = False
End Sub
Sub Run()
On Error Resume Next
Dim equal As Single
Dim equal2 As Double
Num1 = Val(StrNum2)
Num2 = Val(StrNum1)
Select Case Runsign
Case 1
equal = Num1 + Num2
If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
equal = 0
equal2 = Num1 + Num2
End If
Case 2
equal = Num1 - Num2
If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
equal = 0
equal2 = Num1 - Num2
End If
Case 3
equal = Num1 * Num2
If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
equal = 0
equal2 = Num1 * Num2
End If
Case 4
equal = Num1 / Num2
If Num1 >= 65536 Or Num2 >= 65536 Or equal >= 65536 Then
equal = 0
equal2 = Num1 / Num2
End If
End Select
If equal = 0 Then a = equal2 Else a = equal
StrNum2 = Str(a)
StrNum1 = StrNum2
Text1.Text = Val(StrNum2)
End Sub
Sub ClearData()
Num1 = 0
Num2 = 0
StrNum1 = ""
StrNum2 = ""
FirstNum = True
PointFlag = False
Runsign = 0
SignFlag = False
Text1.Text = 0
End Sub