| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2766 人关注过本帖
标题:新手求教!关于VB制作计算器的问题
只看楼主 加入收藏
肇励影
Rank: 2
等 级:论坛游民
威 望:2
帖 子:61
专家分:73
注 册:2016-8-5
结帖率:88.89%
收藏
 问题点数:0 回复次数:11 
新手求教!关于VB制作计算器的问题
怎么实现累加(减),累乘(除)的功能?
搜索更多相关主题的帖子: 计算器 制作 
2016-09-05 12:50
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
按下等号时,根据第一次的符号 进行累加(减)或 累乘(除)
累乘(除) 这个真没见过这个功能是怎么样的。

这样需要有一个按钮显示累加值。
AC 负责清当前数据和累加值。
C 负责清当前数据,但不清累加值。
复杂多了。。。。。。


授人于鱼,不如授人于渔
早已停用QQ了
2016-09-05 13:31
陌上过客
Rank: 2
等 级:论坛游民
威 望:4
帖 子:36
专家分:25
注 册:2015-12-27
收藏
得分:0 
用循环实现

你成了我用尽一生去纪念的过客。。。。
2016-09-05 13:48
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
建立几个变脸,分别存放 第一操作数、第二操作数、操作符号。每次点击=,更新一下就好了
2016-09-05 16:14
肇励影
Rank: 2
等 级:论坛游民
威 望:2
帖 子:61
专家分:73
注 册:2016-8-5
收藏
得分:0 
回复 4楼 xiangyue0510
能否讲详细一点呢?我刚学VB,不太懂你的意思。
2016-09-05 21:14
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
下面是一段例子,我现在电脑上没有VB,凭空写的,可能不完善有bug,请自行调试。主要是给你讲思路
另外,我用了控件数组。控件数组请自行百度,其实很简单。要是不会用的话,把对应的代码拆开用就可以
程序代码:
Dim num1, num2 as string   '第一和第二运算数
Dim operater as integer    '运算符
Dim opr as boolean         '存放是否刚按过运算符
Dim cal as boolean         '存放是否已经执行完计算

Sub CommandCE_Click ()

 num1=""

 num2=""

 operater =-1 '初始化,0~3留给运算符,取0~3之外的就可以
 opr =false

 cal =false
End sub 

'当按下数字键:Index与数字从0到9一一对应
sub CommandNum_Click(Index As Integer)    '若非控件数组,这个函数拆开到各数组键对应的Click事件中
  if opr then   '如果刚按过运算符,输入的应该是新数字,将文本框textnum清空
   textnum.text=""    
   opr =false   '修改变量
  End if 


 nums=textnum.text

 textnum.text=cdbl(nums & Index)  '输入的数直接在原数字后
 '可能显示或者其他的,还需要一些代码。 酌情增加
End sub

'按下小数点
sub CommandDot_Click()
  if opr or cal  then   '如果刚按过运算符或者=,输入的应该是新数字,将文本框textnum清空
   textnum.text=""    
   opr =false   '修改变量
   cal=false
  End if 


 if instr(textnum.text,".") then exit sub  ’ 数字中已经有“.”

 textnum.text=cdbl(nums & ".")  '直接在原数字后加 “.”
 '可能显示或者其他的,还需要一些代码。 酌情增加
End sub

'按下运算符: 同样是控件数组,0~3 分别对应+、-、*、/
Sub CommandOpr_click(Index As Integer)

 if not cal And num1<>"" and num2<>"" and (operater >=0 and operater <=3then 
    CommandEq_Click   '当前面的运算未完成时, 例如: 1+3  (没有按等号) +2, 先计算1+3 
 End if

 

 num1=Getnum(text1.text)

 operater =index

 opr =ture

 cal=false    
End sub

'按下=
Sub CommandEQ_Click()

 if operater <0 and operater >3 then exit sub  '没有按下运算符时,不执行
 

 if opr then exit sub  '按下运算符时,但是未输入第二个运算数字时,不执行
 
  
  if cal then   '当连续点=时,textnum.text取出的放在num1, 保留原来的num2。 例: 3+1=====  相当于3+1+1+1+1
    num1= getnum(textnum.text)
  else  如果不是连续的点击=, textnum.text取出的放在num2(num1在点击运算符的时候已经读入了)
     num1= getnum(textnum.text)  
  End if
  
  ’执行运算
  if num1<>"" and num2<>"" then 
    Select case operater 
     case 0
      text.num1=cdbl(num1)+cdbl(num2)
    case 1
      text.num1=cdbl(num1)-cdbl(num2)
    case 2
      text.num1=cdbl(num1)*cdbl(num2)
    case 3
      on error resume next
      text.num1=cdbl(num1)/cdbl(num2)  
      if err then 
        err.clear
        msgbox "除数为零,强制重置"
        CommandCE_Click   '强制重置
      End if
   End Select

 End if

 

 cal=true 

 
End Sub

Function Getnum(a as string) as String 

 if a="" Or a="."then   '将无法转换为数值型的进行处理一下
   Getnum="0"

 Else 
   Getnum=a

 End if  
End Function



[此贴子已经被作者于2016-9-6 10:54编辑过]

2016-09-06 10:50
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
回复 5楼 肇励影
其实这种关系有点乱的情况,你可以按照预计的操作,画一张流程图出来,每一步的操作有什么结果,你本身可以预计的。
画好了之后,就可以把流程图编程if……End if或者 for…… next这些了
2016-09-06 10:56
肇励影
Rank: 2
等 级:论坛游民
威 望:2
帖 子:61
专家分:73
注 册:2016-8-5
收藏
得分:0 
回复 6楼 xiangyue0510
谢谢了。
2016-09-06 14:16
niyongjun
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2013-12-1
收藏
得分:0 
我也不会,帮楼主顶顶。希望楼主能解决问题。
2016-09-06 18:25
pengzhanggui
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:161
专家分:344
注 册:2015-7-20
收藏
得分:0 
回复 6楼 xiangyue0510
赞一个,尽心尽责。

来找我试试看
2016-09-10 10:00
快速回复:新手求教!关于VB制作计算器的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.300353 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved