| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1801 人关注过本帖
标题:计算器?
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:43 
计算器?
用一个纯代码写了一个很简单的计算器 各位大牛帮看看
我是边做边看书 要用什么控件就去了解他 所以没怎么有全局观
看看我做这个能否改进下 我总觉得ComboBox那个地方可以改进 但又不知道咋弄更好
程序代码
程序代码:
CLEAR ALL
CLOSE DATABASES all
frmMain = CREATEOBJECT("C_Form")
frmMain.show
READ events
CLEAR
RETURN

DEFINE CLASS C_Form as Form
    caption = "简单计算器"
    width = 600
    height = 400
    autocenter = .T.
   

    ADD OBJECT Label1 as label WITH caption = "第一个数", Width = 60, height = 25
    ADD OBJECT Label2 as label WITH caption = "第二个数", Width = 60, height = 25
    ADD OBJECT Label3 as label WITH caption = "最终结果", Width = 60, height = 25
    ADD OBJECT Text1 as TextBox WITH value = "", Width = 100, height = 25
    ADD OBJECT Text2 as TextBox WITH value = "", Width = 100, height = 25
    ADD OBJECT Text3 as TextBox WITH value = "", Width = 100, height = 25
    ADD OBJECT Button1 as CommandButton WITH caption = "计算", height = 25
    ADD OBJECT ComboBox1 as ComboBox WITH caption = "计算方式", Height = 20, Width = 50
                        

    PROCEDURE Arrange
        WITH ThisForm.Label1
           .Top = 100
           .Left = 50
        ENDWITH
        WITH ThisForm.Text1
           .Top = ThisForm.Label1.Top
           .Left = ThisForm.Label1.Left + ThisForm.Label1.Width + 5
        ENDWITH
        WITH ThisForm.Label2
           .Top = ThisForm.Label1.Top
           .Left = ThisForm.Width / 2
        ENDWITH
         WITH ThisForm.Text2
           .Top = ThisForm.Label1.Top
           .Left = ThisForm.Label2.Left + ThisForm.Label2.Width + 5
        ENDWITH
        WITH ThisForm.Label3
           .Top = ThisForm.Label1.Top + ThisForm.Label1.Height + 50
           .Left = ThisForm.Width / 2 - .Width
        ENDWITH
        WITH ThisForm.Text3
           .Top = ThisForm.Label3.Top
           .Left = ThisForm.Label3.Left + ThisForm.Label3.Width + 5
        ENDWITH
        WITH ThisForm.Button1
           .Top = ThisForm.Label3.Top + ThisForm.Label3.Height + 30
           .Left = ThisForm.Width / 2 - .Width / 2
        ENDWITH
         WITH Top = ThisForm.Label3.Top

           .Left = ThisForm.Label3.Left - .Width - 5
           .style = 0
           .inputmask = .displayvalue
           .list(1) = '+'
           .list(2) = '-'
           .list(3) = '*'
           .list(4) = '/'
           .ColumnCount = 1
           .ColumnLines = .F.
        ENDWITH
    ENDPROC
   

    PROCEDURE Activate
    ThisForm.Arrange
    ENDPROC
   

    PROCEDURE Resize
    ThisForm.Arrange
    ENDPROC
   

    PROCEDURE destroy
        CLEAR EVENTS
    ENDPROC
   

     PROCEDURE ComboBox1.Click
        LOCAL  i as Integer
        WITH FOR  i = 1 TO 4
                IF .selected(i)
                   .DisplayValue = .list(i)
                ENDIF
        NEXT
        ENDWITH       

    ENDPROC
   

    PROCEDURE Button1.CLick
    LOCAL v as Double
    WITH ThisForm
    DO CASE

       CASE  = '+'
          v = VAL(.Text1.Value) + VAL(.Text2.Value)
       CASE  = '-'
          v = VAL(.Text1.Value) - VAL(.Text2.Value)
       CASE  = '*'
          v = VAL(.Text1.Value) * VAL(.Text2.Value)
       CASE  = '/'
          IF VAL(.Text2.Value) != 0
             v = VAL(.Text1.Value) / VAL(.Text2.Value)
          ELSE
              MESSAGEBOX("零做除数是非法的", 0)
              return
          ENDIF
       OTHERWISE 

              MESSAGEBOX("错误的计算方法", 0)
              return
    ENDCASE
    ENDWITH

        WITH ThisForm
            .Text3.Value = STR(v,10, 2)
        ENDWITH
    ENDPROC
   

ENDDEFINE

附上 连编的app
(1.91 KB)

附图:
图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: 计算器 
2012-09-14 23:26
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:3 
CLEAR ALL
CLOSE DATABASES all
frmMain = CREATEOBJECT("C_Form")
frmMain.show
READ events
CLEAR
RETURN

有下划线的代码在此处不一定要

[ 本帖最后由 sdta 于 2012-9-14 23:37 编辑 ]

坚守VFP最后的阵地
2012-09-14 23:31
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 sdta
clear 和 return 重复了吗?

梅尚程荀
马谭杨奚







                                                       
2012-09-14 23:35
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用有容就大在2012-9-14 23:35:38的发言:

clear 和 return 重复了吗?
我认为CLEAR 在此处无意义。
RETURN是必须的

坚守VFP最后的阵地
2012-09-14 23:38
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
好像clear是清屏 clear all是释放内存 回第一工作区吧
不太清楚VFP中的return

梅尚程荀
马谭杨奚







                                                       
2012-09-14 23:44
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
    PROCEDURE ComboBox1.Click
        LOCAL  i as Integer
        WITH
        FOR  i = 1 TO 4
                IF .selected(i)
                   .DisplayValue = .list(i)
                ENDIF
        NEXT
        ENDWITH      

    ENDPROC
这段可以不要

坚守VFP最后的阵地
2012-09-14 23:44
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
[计算]按钮可以不要
    PROCEDURE Button1.CLick
可改为:
    PROCEDURE combobox1.interactivechange
前面相应部分可以不要

坚守VFP最后的阵地
2012-09-14 23:46
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 6楼 sdta
咦 去试了下 还真是的
难道ComboBox能自动执行Click 命令?

梅尚程荀
马谭杨奚







                                                       
2012-09-14 23:48
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
*!*               .list(1) = '+'
*!*               .list(2) = '-'
*!*               .list(3) = '*'
*!*               .list(4) = '/'
改为:
           .rowsource=[+,-,*,/]
           .rowsourcetype=1

[ 本帖最后由 sdta 于 2012-9-14 23:57 编辑 ]

坚守VFP最后的阵地
2012-09-14 23:52
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用有容就大在2012-9-14 23:48:19的发言:

咦 去试了下 还真是的
难道ComboBox能自动执行Click 命令?
interactivechange
这个属性能达到即时更新的效果

坚守VFP最后的阵地
2012-09-14 23:53
快速回复:计算器?
数据加载中...
 
   



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

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