| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1809 人关注过本帖
标题:改进版计算器?
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:36 
改进版计算器?
这个是我那个简易计算器的改进版 参照了各位大牛的各种好意见 写出来的
帮忙看看有什么可以改进的地方 类模板做的是否合理
程序代码:
**************************************************
*-- 主函数
SET CLOCK on
SET TALK OFF
frmMain = CREATEOBJECT("C_Form")
frmMain.show
READ events
RETURN
*
*-- 程序结束
**************************************************    
  
**************************************************
*-- 类:           C_Form (d:\vfp\td\12.vcx)
*-- 父类:  form
*-- 基类:    form
*-- 时间戳:   09/15/16
DEFINE CLASS C_Form as Form
    _screen.minbutton = .f.
    _screen.MaxButton = .f.
    _screen.Closable = .f.
    caption = "简单计算器"
    width = 600
    height = 400
    autocenter = .T.
    
    ADD OBJECT LT1 as LT WITH sub_label.caption = "第一个数",;
                              top = 100,;
                              left = thisform.width/2 - thisform.LT1.width - 10     
    ADD OBJECT LT2 as LT WITH sub_label.caption = "第二个数",;
                              top = thisform.LT1.top,;
                              left = thisform.width/2 + 10
    ADD OBJECT LT3 as LT WITH sub_label.caption = "第三个数",;
                              top = ThisForm.LT1.TOP + 100,;
                              Left = ThisForm.Width/2 + 10
    ADD OBJECT com_box as ComboBox WITH height = 20, width = 50,;
                              top = ThisForm.LT3.top,  left = ThisForm.width/2 - ThisForm.LT3.width - 10               
    ADD OBJECT exit_one as commandbutton WITH top = thisform.LT3.top + 100, left = 50, width = 100,;
                              height = 25, caption = "退出"
                                                                     
    PROCEDURE init
        WITH  = 2
        .rowsource = [+,-,*,/,@]
        .rowsourcetype = 1
        .value = 5
        ENDWITH
    ENDPROC
  
    PROCEDURE exit_one.click
        a = MESSAGEBOX("真的要退出吗", 1 + 32, "确认")
        IF a == 1
        CLEAR EVENTS
        ELSE

        RETURN
        ENDIF
    ENDPROC
    
    PROCEDURE com_box.interactivechange
        IF !EMPTY(thisform.LT1.sub_text.value) .and. !EMPTY(thisform.LT2.sub_text.value)
            IF ALLTRIM() == '/' .and. VAL(thisform.LT2.sub_text.value) == 0
                MESSAGEBOX("除数不能为零")
                RETURN
            ELSE
                IF  > 4 .or.  < 1
                    MESSAGEBOX("错误的计算方式")
                    RETURN
                ELSE
                    kk = ALLTRIM(thisform.LT1.sub_text.value) + ALLTRIM();
                         + ALLTRIM(thisform.LT2.sub_text.value)
                    thisform.LT3.sub_text.value = ALLTRIM(STR(&kk, 10, 2))
                ENDIF  
            ENDIF
         ENDIF         
    ENDPROC
ENDDEFINE
*
*-- EndDefine: C_Form
**************************************************       

**************************************************
*-- 类:           LT (d:\vfp\td\12.vcx)
*-- 父类:  container
*-- 基类:    container
*-- 时间戳:   09/15/16
*
#INCLUDE "d:\vfp\vfp\foxpro.h"
*
DEFINE CLASS LT AS container
    Width = 160
    Height = 25
    Name = "LT"

    ADD OBJECT sub_label AS label WITH ;
        Caption = "", ;
        Height = this.Height, ;
        Left = 0, ;
        Top = 0, ;
        Width = 60, ;
        Name = "sub_label"

    ADD OBJECT sub_text AS textbox WITH ;
        Height = this.Height, ;
        Left = This.sub_label.Left + this.sub_label.width, ;
        Top = 0, ;
        Width = 100, ;
        Name = "sub_text"
ENDDEFINE
*
*-- EndDefine: LT
************************************************** 
顺便发个图
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 有容就大 于 2012-9-16 14:15 编辑 ]
搜索更多相关主题的帖子: color 计算器 
2012-09-16 14:10
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
没必要用这个[不伦不类]的类吧,如果是想学习类的用法,另当别论。

坚守VFP最后的阵地
2012-09-16 15:35
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
               IF > 4 .or. < 1
可改为
IF NOT BETWEEN(,1,4)

坚守VFP最后的阵地
2012-09-16 15:38
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 sdta
嘿嘿 就是练习下

梅尚程荀
马谭杨奚







                                                       
2012-09-16 15:44
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 3楼 sdta
恩 确实 这样好看多了。
我想问下 vfp里定义数组的同时能给他赋值吗
比如:declare a(4) = [+, -, *,/]

梅尚程荀
马谭杨奚







                                                       
2012-09-16 15:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 5楼 有容就大
declare a(4) = [+, -, *,/]
a(1)=[+]
a(2)=[-]
a(3)=[*]
a(4)=[/]


[ 本帖最后由 sdta 于 2012-9-16 16:00 编辑 ]

坚守VFP最后的阵地
2012-09-16 15:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
   ADD OBJECT LT1 as LT WITH sub_label.caption = "第一个数",;
                              top = 100,;
                              left = thisform.width/2 - thisform.LT1.width - 10     
    ADD OBJECT LT2 as LT WITH sub_label.caption = "第二个数",;
                              top = thisform.LT1.top,;
    ADD OBJECT com_box as ComboBox WITH height = 25, width = 50,;
       top = ThisForm.LT1.TOP + 100,left = ThisForm.width/2 -ThisForm.LT2.width -10               
    ADD OBJECT LT3 as LT WITH sub_label.caption = "第三个数",;
                              top = ThisForm.LT1.TOP + 100,;
                              Left = ThisForm.Width/2 + 10
    ADD OBJECT exit_one as commandbutton WITH top = thisform.LT3.top + 100, left = 50, width = 100,;
                              height = 25, caption = "退出"
看下光标移动[顺序]效果
原来的顺序是从1、2、3文本框到组合框

[ 本帖最后由 sdta 于 2012-9-16 16:01 编辑 ]

坚守VFP最后的阵地
2012-09-16 15:52
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
    PROCEDURE com_box.interactivechange
        IF !EMPTY(thisform.LT1.sub_text.value) .and. !EMPTY(thisform.LT2.sub_text.value)
           IF ALLTRIM() == '/' .and. VAL(thisform.LT2.sub_text.value) == 0
              MESSAGEBOX("除数不能为零")
              RETURN
           ELSE
              IF NOT BETWEEN(,1,4)
                 MESSAGEBOX("错误的计算方式")
                 RETURN
              ELSE
                 kk = ALLTRIM(thisform.LT1.sub_text.value) + ALLTRIM();
                      + ALLTRIM(thisform.LT2.sub_text.value)
                 thisform.LT3.sub_text.value = TRANSFORM(&kk, [@Z 9999999.99])
              ENDIF  
           ENDIF
        ELSE
           MESSAGEBOX([文本框内容不能为空])
           RETURN
        ENDIF         
    ENDPROC
ENDDEFINE


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

坚守VFP最后的阵地
2012-09-16 15:56
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
去试试看

梅尚程荀
马谭杨奚







                                                       
2012-09-16 15:58
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
MESSAGEBOX("除数不能为零")

坚守VFP最后的阵地
2012-09-16 16:05
快速回复:改进版计算器?
数据加载中...
 
   



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

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