您的位置:软件 > 小技巧总汇 > 开发类 > 正文
让文本框具有四则运算功能
[文章信息]
作者:谢明山
时间:2003-05-08
出处:Yesky
责任编辑:原野
[文章导读]
以下程序是实现这一功能的全部代码。打开VB新建一工程.......
advertisement
热点推荐
· 11.15软件精选 制作MSI文件
· 闪客五周年之闪客光荣榜
· 用Winamp“品尝”无限音乐
· 网络加、解密的技术应用
· 闪客五周年之闪客光荣榜:zoron
[正文]

  VB中文本框一般用于字符串的输入或输出。如果我们在文本框中输入(21+32)*43-((5+6-8)/2+10)*2,你是否希望它能自动计算出结果?以下程序是实现这一功能的全部代码。打开VB新建一工程,在Form1上添加一Text控件,拉长一点,以便输入四则表达式和输出结果,复制以下代码。运行程序后在文本框中输入任意的四则运算式,回车。看看结果如何。

Dim val_Str() As String

Dim Resu As Double

Dim iP_N() As Integer '用于判断数据的正负

Dim sSt() As String * 1

Dim Kuohao() As Integer

Function calc_Kuohao(str_tex As String) As Double '括号计算

Dim text_strr As String

Dim mm_stR As String

text_strr = Trim(str_tex)

i_len = Len(text_strr)

aa = Mid(text_strr, 1, 1)

If aa = "-" Or aa = "+" Or aa = "*" Or aa = "/" Then Str_Text1 = "0" & text_strr

ii = 0

For i = 1 To i_len '判断括号是否成对

 mm_stR = Mid(text_strr, i, 1)

 If mm_stR = "(" Then ii = ii + 1

 If mm_stR = ")" Then ii = ii - 1

 If ii < 0 Then

  MsgBox ("括号不成对")

  Exit Function

 End If

Next

If ii <> 0 Then '

 MsgBox ("括号不成对")

 Exit Function

End If

If InStr(1, text_strr, "(") > 0 Then '如果有括号,现按最里层括号计算

 ReDim sSt(1 To Len(text_strr))

 ReDim Kuohao(1 To Len(text_strr))

 Do While True

  i_len = Len(Trim(text_strr))

  ceng = 1

  For i = 1 To i_len

   sSt(i) = Mid(text_strr, i, 1)

  Next

  If InStr(1, text_strr, "(") <> 0 And InStr(1, text_strr, "(") <> 0 Then '计算有多少对括号,不成对返回0

   text_strr = ""

   For i = 1 To i_len '判断括号是否为0

    text_strr = text_strr & sSt(i)

   Next

   For i = 1 To i_len

    Kuohao(i) = 0 '清零

    If sSt(i) = "(" Then

     Kuohao(i) = ceng

     ceng = ceng + 1

    End If

    If sSt(i) = ")" Then

     ceng = ceng - 1

     Kuohao(i) = ceng

    End If

   Next

   zuiD = 0: id = 1

   For i = 1 To i_len '求最内层括号

    If Kuohao(i) > zuiD Then

     zuiD = Kuohao(i)

     id = i

    End If

   Next  'kuohao(iD)最内层

   mm = InStr(id, text_strr, ")")

   If mm <> 0 Then 'mm=")"

    mm_stR = Mid(text_strr, id + 1, mm - id - 1)

    resu_str = cacul_Str(mm_stR) '计算

    text_strr = Mid(text_strr, 1, id - 1) & resu_str & Mid(text_strr, mm + 1, i_len - mm)

   Else

    Exit Do

   End If

  Else

   text_strr = ""

   For i = 1 To i_len '判断括号是否为0

    text_strr = text_strr & sSt(i)

   Next

   calc_Kuohao = cacul_Str(text_strr)

   Exit Do

  End If

 Loop

Else

 calc_Kuohao = cacul_Str(text_strr) '计算

End If

End Function

 Function cacul_Str(ok_str As String) As Double '字符串表达式的计算,无括号

Dim s_int As Integer

ReDim val_Str(Len(ok_str) + 2)

ReDim iP_N(Len(ok_str) + 1)

aa = Mid(ok_str, i + 1, 1)

If aa = "-" Or aa = "+" Or aa = "*" Or aa = "/" Then ok_str = "0" & ok_str

s_int = 0

val_Str(0) = ""

For i = 0 To Len(ok_str)

 iP_N(i) = 1

Next

i = 0

Do While i < Len(ok_str) '含分解字符串

 aa = Mid(ok_str, i + 1, 1)

 bb = Asc(aa)

 If bb >= 48 And bb <= 57 Or bb = 46 Then '0-9 and .

  val_Str(s_int) = val_Str(s_int) & aa

 Else

  If aa = "+" Or aa = "-" Or aa = "*" Or aa = "/" Then

   If Mid(ok_str, i + 2, 1) = "-" Then

    iP_N(s_int + 2) = -1

    ok_str = Mid(ok_str, 1, i + 1) & Mid(ok_str, i + 3, Len(ok_str))

    ok_str = Trim(ok_str)

    i = i - 1

   Else

    s_int = s_int + 1

    val_Str(s_int) = aa

    s_int = s_int + 1

    val_Str(s_int) = ""

   End If

  Else

   iP_N(s_int) = 1

  End If

 End If

 i = i + 1

Loop

For i = 0 To s_int Step 2

 val_Str(i) = Val(val_Str(i)) * iP_N(i)

Next

If s_int > 1 Then

 For i = 0 To s_int Step 2

  If val_Str(i + 1) = "*" Or val_Str(i + 1) = "/" Then

   If val_Str(i + 1) = "*" Then

    val_Str(i) = Val(val_Str(i)) * Val(val_Str(i + 2))

   Else

    val_Str(i) = Val(val_Str(i)) / Val(val_Str(i + 2))

   End If

   For j = i + 1 To s_int

    val_Str(j) = val_Str(j + 2)

   Next

   val_Str(s_int - 1) = "": val_Str(s_int) = ""

   s_int = s_int - 2

   i = i - 2

  End If

 Next

 Resu = val_Str(0)

 For i = 1 To s_int Step 2

  If val_Str(i) = "-" Then val_Str(i + 1) = Val(val_Str(i + 1)) * (-1)

  Resu = Resu + val_Str(i + 1)

 Next

 cacul_Str = Resu

Else

 cacul_Str = val_Str(0)

End If

End Function

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)

 If KeyCode = 13 Then '回车开始计算

  Result = calc_Kuohao(Text1.Text)

  Text1.Text = Text1.Text & "=" & Result

 End If

End Sub


·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载


发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 用动作脚本动态创建和控制文本框
  • 巧用样式表,让文本框与按钮变个样
  • 用VB6分离出文本框的单词
  • 文本框控件的消息及应用
  • DHTML制作有日期选择的文本框(一)
  • 11.15软件精选 制作MSI文件
  • 闪客五周年之闪客光荣榜
  • 兰欣推出我国第一款网络游戏专用音箱
  • 玩家发现117亡灵种族Bug
  • [配置推荐]极品HIFI配置
  • 东瀛美少女COSPLAY(55)
  • 用Winamp“品尝”无限音乐
  • 迷你型PStwo全面透析专题
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索