| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2406 人关注过本帖, 1 人收藏
标题:如何使表格的最后一列里输入 2 个数字后自动换行
取消只看楼主 加入收藏
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:8 
如何使表格的最后一列里输入 2 个数字后自动换行
问题描述:

                在录入成绩的时候,输入两个数字,字符串长度为2,光标自动移到同一列的下一行,如下图
图片附件: 游客没有浏览图片的权限,请 登录注册

例如 输入 94,自动跳到下一行,
假设表格名为 grid1,grid1的来源是一张本地表,表名及字段  tblxsxxb(zc,xh,xm,zgcjlr1dm,zgcjlr2dm)

我在 column5的text1的afterrowcolchange中代码:
myrecno=RECNO()  &&当前行号
myrecc=RECCOUNT()  &&总记录数

keypress事件中代码:
IF LEN(ALLTRIM(thisform.grid1.column5.text1.value))=2 OR  nKeyCode =13
   IF myrecno>=myrecc
      messagebox("最后一行")
   ELSE
      thisform.grid1.column1.text1.Enabled = .F.
      thisform.grid1.column1.text1.ReadOnly = .T.
      thisform.grid1.column2.text1.Enabled = .F.
      thisform.grid1.column2.text1.ReadOnly = .T.
      thisform.grid1.column3.text1.Enabled = .F.
      thisform.grid1.column3.text1.ReadOnly = .T.
      thisform.grid1.column4.text1.Enabled = .F.
      thisform.grid1.column4.text1.ReadOnly = .T.
      &&thisform.grid1.column5.text1.SetFocus
      SKIP &&Keyboard '{DNARROW}'
   ENDIF
ENDIF

输入2个数字后,仍然不会下移光标,
弄了一个晚上,脑壳里都是无力感,上来求助,请大家帮忙看看吧,

拜谢!!

ps,最后一个模块了,卡死在这个环节,下周就要用,哭。。。。。。
搜索更多相关主题的帖子: 字符串 如何 
2014-12-04 23:04
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
收藏
得分:0 
回复 2 楼 tlliqi
Excel 没有办法那么灵活地进行 一录,二录 校验吧,总是有用处,Excel链接数据库太麻烦

还是回到正题,,,是不是 vfp的grid控件无法实现呢,
2014-12-04 23:09
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
收藏
得分:0 
以下是引用tlliqi在2014-12-4 23:06:52的发言:

这样录入成绩就象excel差不多



学生,考场信息等等都在远程数据库上,本地表只是最为临时表用,比较完 还是要把数据回传到数据库去,这个 比Excel差的不是一点点好用吧。
2014-12-04 23:11
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
收藏
得分:0 
回复 5 楼 TonyDeng
啥叫爱用现成的,说话这么难听,谁学习的过程不是模仿的过程呢,

问题已经解决了,只会说风凉话有啥意思。


解决思路。。。
在text1的 interracativechange
中 调用api。。。模拟回车。。。。搞定。
IF LEN(ALLTRIM(this.value))=2
Declare keybd_event In Win32API Short bVk,Short bScan,Integer dwFlags, Integer deExtraInfo
keybd_event(13, 0, 0, 0)
keybd_event(13, 0, 2, 0)
ENDIF

keypress中
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nkeycode=13
   KeyBoard "{DnArrow}"
ENDIF
2014-12-05 01:33
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
收藏
得分:0 
以下是引用sdta在2014-12-5 00:48:01的发言:

感谢 sdta 热心帮忙,又学习了一种控制表格的方法,

If Between(This.Value,10,99)
    With ThisForm.Grid1
        If .ActiveRow<Reccount()
            Keyboard '{DNARROW}'
            Go .ActiveRow+1
           .Refresh
        Endif
    EndWith   
EndIf
2014-12-05 01:38
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
收藏
得分:0 
以下是引用hu9jj在2014-12-5 07:51:01的发言:


良药苦口,忠言逆耳。话虽然不中听,但道出关键所在:用现成的控件必定会受到某些限制的,因为控件制作时很难做到满足所有人的需求。解决的办法通常有:一是绕道而走,如楼主的解决办法;二是重起炉灶,但需要一定的功底。

我相信,一定有办法可以控制,控件也有控件的好处,作为业余使用者来说,快速,学习了,感谢!
2014-12-05 08:23
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
SELECT cursjcjb2   &&表格的数据源
GO RECNO()
tmpcj1=ALLTRIM(cursjcjb2.zgcjlr1dm)

DO CASE 
   CASE LEN(tmpcj1)=2
        *!*    If Between(VAL(This.Value),10,99)
        If LEN(ALLTRIM(this.Value))=2
           tmpcj2=ALLTRIM(This.Value)
           IF tmpcj1!=tmpcj2
              thisform.t_ylcj.Value=tmpcj1
              thisform.t_elcj.Value=tmpcj2
              IF MESSAGEBOX("两次成绩不想等,是否确认二录成绩?",4+32,"警告:二录成绩与一录成绩不一致!")=7
                 this.Value=""
                 this.SetFocus
                 RETURN
              ENDIF
           ENDIF
            With ThisForm.Grid1
                If .ActiveRow<Reccount()
                    &&Keyboard '{DNARROW}'
                    Go .ActiveRow+1
                   .Refresh
                ELSE
                   MESSAGEBOX("到了最后一行")
                Endif 
            ENDWITH
        ENDIF
    CASE LEN(tmpcj1)=1
        If LEN(ALLTRIM(this.Value))=1
           tmpcj2=ALLTRIM(This.Value)
           IF tmpcj1!=tmpcj2
              thisform.t_ylcj.Value=tmpcj1
              thisform.t_elcj.Value=tmpcj2
              IF MESSAGEBOX("两次成绩不想等,是否确认二录成绩?",4+32,"警告:二录成绩与一录成绩不一致!")=7
                 this.Value=""
                 this.SetFocus
                 RETURN
              ENDIF
           ENDIF
            With ThisForm.Grid1
                If .ActiveRow<Reccount()
                    &&Keyboard '{DNARROW}'
                    Go .ActiveRow+1
                   .Refresh
                ELSE
                   MESSAGEBOX("到了最后一行")
                Endif 
            ENDWITH
        ENDIF
ENDCASE    
2014-12-07 23:35
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
收藏
得分:0 
最后的结果:一录成绩分为两种情况,个位数,和2位数
还要判断 一录成绩与二录成绩是否相等

去掉 中间的 Keyboard '{DNARROW}'
不然 不一致的时候会跳两行,
一致的时候没问题
这个应该是不影响运行效果。
还有个奇怪的事情,如果在 表单的 int实践中,对 表格控件的 height 属性进行变化,那么 表格就不会换行了,不知道是为什么,
2014-12-07 23:38
dodolau
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-12-4
收藏
得分:0 
为什么  在 最后一列的text1中的keypress中

LPARAMETERS nKeyCode, nShiftAltCtrl
IF nkeycode=13
   KeyBoard "{DnArrow}"
ENDIF

始终无法换行呢
2014-12-08 21:23
快速回复:如何使表格的最后一列里输入 2 个数字后自动换行
数据加载中...
 
   



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

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