| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1801 人关注过本帖
标题:计算器?
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
S版照你指导的修改了 最终结果这样
程序代码:
frmMain = CREATEOBJECT("C_Form")
frmMain.show
READ events
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,Top=100,Left=50
    ADD OBJECT Label2 as label WITH caption="第二个数", Width=60,height=25,Top=ThisForm.Label1.Top,Left=ThisForm.Width/2
    ADD OBJECT Label3 as label WITH caption= "最终结果",Width=60,height=25
    ADD OBJECT Text1 as TextBox WITH value="",Width=100,height=25,Top=ThisForm.Label1.Top,Left=ThisForm.Label1.Left+ThisForm.Label1.Width+5
    ADD OBJECT Text2 as TextBox WITH value="",Width=100,height=25,Top=ThisForm.Label1.Top,Left =ThisForm.Label2.Left+ThisForm.Label2.Width+5
    ADD OBJECT Text3 as TextBox WITH value="",Width=100,height=25
    ADD OBJECT ComboBox1 as ComboBox WITH caption = "计算方式", Height = 20, Width = 50

    PROCEDURE init
        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 Top = ThisForm.Label3.Top
           .Left = ThisForm.Label3.Left - .Width - 5
           .style = 0
           .inputmask = .displayvalue
           .rowsource=[+,-,*,/] &&
           .rowsourcetype=1 &&
           .ColumnCount = 1
           .ColumnLines = .F.
        ENDWITH
    ENDPROC

 

    PROCEDURE destroy
        CLEAR EVENTS
    ENDPROC

    PROCEDURE combobox1.interactivechange
    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
         .Text3.Value = str(v,10, 2)
    ENDWITH
    ENDPROC
   

ENDDEFINE
非常感谢你的指教


梅尚程荀
马谭杨奚







                                                       
2012-09-15 00:26
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
效果如何
你的速度真是神人啊,佩服!

坚守VFP最后的阵地
2012-09-15 00:28
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 22楼 sdta
很好啊
这个是图:
图片附件: 游客没有浏览图片的权限,请 登录注册


梅尚程荀
马谭杨奚







                                                       
2012-09-15 00:29
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
还是基础好啊

坚守VFP最后的阵地
2012-09-15 00:31
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 22楼 sdta
是你指教有方 我跟着你步子来的啊

梅尚程荀
马谭杨奚







                                                       
2012-09-15 00:31
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
惭愧

坚守VFP最后的阵地
2012-09-15 00:33
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 26楼 sdta
呵呵 今天搞这个花了不少时间呢 再次谢谢你的指导 到现在算有个满意的结果了
快1点了 要睡了 S版 晚安 做个好梦

梅尚程荀
马谭杨奚







                                                       
2012-09-15 00:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
其实你可以做一个现实计算器的面板的

授人以渔,不授人以鱼。
2012-09-15 00:52
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:3 
这样,再验证一下输入的数据是否合法会更完美
程序代码:
frmMain = CREATEOBJECT("C_Form")
frmMain.show
READ events
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,Top=100,Left=50
    ADD OBJECT Label2 as label WITH caption="第二个数", Width=60,height=25,Top=ThisForm.Label1.Top,Left=ThisForm.Width/2
    ADD OBJECT Label3 as label WITH caption= "最终结果",Width=60,height=25
    ADD OBJECT Text1 as TextBox WITH value="",Width=100,height=25,Top=ThisForm.Label1.Top,Left=ThisForm.Label1.Left+ThisForm.Label1.Width+5
    ADD OBJECT Text2 as TextBox WITH value="",Width=100,height=25,Top=ThisForm.Label1.Top,Left =ThisForm.Label2.Left+ThisForm.Label2.Width+5
    ADD OBJECT Text3 as TextBox WITH value="",Width=100,height=25
    ADD OBJECT ComboBox1 as ComboBox WITH caption = "计算方式", Height = 20, Width = 50

    PROCEDURE init
        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 Top = ThisForm.Label3.Top
           .Left = ThisForm.Label3.Left - .Width - 5
           .style = 2
           .rowsource=[+,-,*,/] &&
           .rowsourcetype=1 &&
           .Value = 1
        ENDWITH
    ENDPROC


    PROCEDURE destroy
        CLEAR EVENTS
    ENDPROC

    PROCEDURE combobox1.interactivechange
    If !Empty(thisform.text1.value) And !Empty(thisform.text2.value)
        If Alltrim() == '/' And Val(thisform.text2.value) == 0
            Messagebox("非法数值 -> text2",16,"被除数不能为 0 ")
            Return
        Else
            kk = Alltrim(thisform.text1.value) + Alltrim() + Alltrim(thisform.text2.value)
            thisform.text3.value = Alltrim(Str(&kk.,20,2))
        Endif
    Endif
    ENDPROC
   

ENDDEFINE


个性太多,无法显示
2012-09-15 10:20
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 29楼 taohua300
kk = Alltrim(thisform.Text1.value) + Alltrim() + Alltrim(thisform.Text2.value)
            thisform.Text3.value = Alltrim(Str(&kk.,10,2))

这段有点疑问求解释 alltrim是消除字符串的首尾空格吧 那么三个字符串连一起还是个字符串
也就是说kk是个字符串 然后str()是将数值型转化为字符型 &kk.能得到一个字符串的数值吗? 而且试了下&kk没后面那个点也可以


梅尚程荀
马谭杨奚







                                                       
2012-09-15 13:02
快速回复:计算器?
数据加载中...
 
   



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

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