|
本帖最后由 todaynew 于 2009-3-26 19:50 编辑
使用Windos计算器想返回计算结果比较麻烦,看了一些用VB编写计算器也忒复杂了。想来不应该将简单问题复杂化。于是乎便决定用尽可能少而且易于理解的语句编写一个计算器,于是花了半天时间算是折腾出来了。
实际上编写计算器的关键语句就是一条,也就是Eval函数。这个函数可以将一个字符串表示的算式计算出结果了。按照这个思路下去,你只是需要得到一个用阿拉伯数字和运算符号连接起来的字符串了,这样一来问题就十分简单了。具体怎么搞定,你可以去看看代码。
倒是在调用计算器并将计算结果写入指定控件处,着实费了些周折。周折处主要有二,其一是被OpenArgs参数迷惑了个把小时,几经摸索算是搞明白了所以然;其二是获得当前控件的名称,折腾好一阵也没搞清楚,好在经t小宝同志指点,终于豁然开朗。
闲话不多说了,贴上来给同志们参考一下。
主窗体:
Private Sub 折让_DblClick(Cancel As Integer)
'请在OpenArgs参数中,用,号分割主窗体、子窗体控件、控件名称
Dim Ctlname As String
Ctlname = Screen.ActiveControl.Name
DoCmd.OpenForm "myCalc", , , , , , Me.Form.Name & "," & Ctlname
End Sub
子窗体:
Private Sub 数量_DblClick(Cancel As Integer)
'请在OpenArgs参数中,用,号分割主窗体、子窗体控件、控件名称
Dim Ctlname As String
Ctlname = Screen.ActiveControl.Name
DoCmd.OpenForm "myCalc", , , , , , Me.Parent.Form.Name & "," & Me.Form.Name & "," & Ctlname
End Sub
myCalc窗体:
Private Sub 等于_Click()
Dim str As String
Dim Pfname As String
Dim Sfname As String
Dim Cname As String
On Error GoTo 等于_Err
If IsNull(Me.计算.Value) = False Then
Me.计算.Value = Eval(Me.计算.Value)
Else
Me.计算.SetFocus
Exit Sub
End If
If OpenArgs <> "" Then
str = OpenArgs
Pfname = Mid(str, 1, InStr(1, str, ",") - 1)
str = Replace(str, Pfname & ",", "")
If InStr(1, str, ",") = 0 Then
Sfname = Pfname
Cname = str
Forms(Sfname).Form.Controls(Cname).Value = Me.计算.Value
Else
Sfname = Mid(str, 1, InStr(1, str, ",") - 1)
str = Replace(str, Sfname & ",", "")
Cname = str
Forms(Pfname).Controls(Sfname).Form.Controls(Cname).Value = Me.计算.Value
End If
DoCmd.Close acForm, "myCalc"
End If
等于_Exit:
Exit Sub
等于_Err:
Me.计算.Value = "兄弟,搞错了吧?!^o^ "
Resume 等于_Exit
End Sub
Private Sub L0_Click()
Me.计算.Value = Me.计算.Value & Me.L0.Caption
End Sub
。。。。。
(VBA基础-相关文章技巧链接):
Access非常简单实用的计算器
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|