| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 73 人关注过本帖
标题:实用的一个文本框类,只能输入ip地址
只看楼主 加入收藏
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:987
专家分:1516
注 册:2021-10-13
结帖率:97.59%
收藏
 问题点数:20 回复次数:4 
实用的一个文本框类,只能输入ip地址
如题。

10/6更新代码如下:
程序代码:
DEFINE CLASS iptextbox as TextBox
    Height = 20
    InputMask = "###.###.###.###"
    Width = 114
    Name = "iptextbox"
    
    PROCEDURE init
        this.SelStart=0
        this.SelLength=3
    ENDPROC 
    
    PROCEDURE keypress
    LPARAMETERS nKeyCode, nShiftAltCtrl

    DO CASE 
        CASE nkeycode=32 OR nkeycode=9 OR nkeycode=46 OR nkeycode=13 &&space,tab,".",enter
            IF this.selstart>AT(".",this.value,3)
                IF nkeycode=32 OR nkeycode=46 OR nkeycode=13
                    NODEFAULT 
                    KEYBOARD '{TAB}'
                ENDIF     
            ELSE 
                NODEFAULT 
                ctext=SUBSTR(this.Value,1,this.selstart)
                ndot=OCCURS(".",ctext) &&有几个“.”
                IF !(this.SelStart=AT(".",this.value,ndot) AND nkeycode=46)
                    ndot=IIF(ndot=3,3,ndot+1)
                    ndotpos=AT(".",this.value,ndot)
                    this.SelStart=ndotpos
                    this.SelLength=3
                ENDIF     
            ENDIF
    
        CASE BETWEEN(nkeycode,48,57) &&0-9
            NODEFAULT 
            DODEFAULT()
*!*            上面2句必不可少,否则this.selstart的值不正确,这是通过下面这句代码发现的。
*!*            SET MESSAGE TO TRANSFORM(this.SelStart)) &&用来观察this.selstart的表现
            IF INLIST(this.SelStart,AT(".",this.Value,1),AT(".",this.Value,2),AT(".",this.Value,3))
                this.SelLength=3
            ENDIF 
    ENDCASE             
    ENDPROC 
    
    PROCEDURE valid
    n=ALINES(atemp,this.Value,5,".")
    IF n#4
        SET MESSAGE TO "每个地址段的值不能为空"
        RELEASE atemp
        RETURN .f.
    ELSE
        FOR i =1 TO ALEN(atemp)
            IF !BETWEEN(EVALUATE(atemp(i)),0,255)
                SET MESSAGE TO "无效的ip地址端值"+atemp(i)
                npos=AT(atemp(i),this.Value,1)-1
                this.SelStart=npos
                this.SelLength=3
                RELEASE atemp
                RETURN .f.
            ENDIF     
        ENDFOR    
    ENDIF 
    endproc          
ENDDEFINE 



[此贴子已经被作者于2025-10-6 21:41编辑过]

搜索更多相关主题的帖子: ip 地址 this IF value 
昨天 00:50
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:Usa
等 级:贵宾
威 望:67
帖 子:2253
专家分:4731
注 册:2012-2-29
收藏
得分:0 
昨天 05:39
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:987
专家分:1516
注 册:2021-10-13
收藏
得分:0 
改天再发表一个电话号码类,只能输入电话号码,感觉挺实用的
昨天 07:15
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1116
专家分:2745
注 册:2015-12-30
收藏
得分:0 
昨天 07:15
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:987
专家分:1516
注 册:2021-10-13
收藏
得分:0 
10/6 更新代码,valid的判断更加完美,指出哪个值无效;
解决了每个地址端输入3个数字后的块选择问题,定位到错的地址段。

更新后的代码放到一楼了。。。
昨晚 21:25
快速回复:实用的一个文本框类,只能输入ip地址
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020310 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved