form1有text1(index)和text2(index),现在要text1(index)和text2(index)他们以5*5排列来分页,能不能当输入完5*5以后再显示下一个5*5排列呢?请问高手给出代码。

解决方案 »

  1.   

    分页模型
    text1 text2 text1 text2 text1 text2 text1 text2 text1 text2
    text1 text2 text1 text2 text1 text2 text1 text2 text1 text2
    text1 text2 text1 text2 text1 text2 text1 text2 text1 text2
    text1 text2 text1 text2 text1 text2 text1 text2 text1 text2
    text1 text2 text1 text2 text1 text2 text1 text2 text1 text2
    1 [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页5*5排列
    当输入完一页后,光标自动转到下一页的text1上。最好就是在没有输入完当前页,就不能看到下一页。
      

  2.   

    用2个picture嵌套
    把所有的text都放在第二个picture2里面
    用代码排列text的位置
    输入完text1(index)以后控制picture2.top
      

  3.   

    你上一个帖子我都说过了,你的思路不对,
    就好比搬砖头:
    明明告诉你可以用车子运,因为你没见过车子,你就不去关心如何去做。
    你非要人来一块一块的搬,还老再想怎么再长出两只手来搬会快点。
    这么个弄法不行的。当你真的了解了你现在的做法有多浪费资源后,你就
    会体会到我说的了。
    每一个TextBox控件其实都有各自的消息捕获函数,和图形设备以及相关
    的窗口及资源的,你的想法不单是你上面说的5*5的数量,还想动态的再
    生成更多的出来对应你所谓的“页”,这种方法都不知道怎么和你说,只
    能说非常浪费资源,而且没必要。再者也是很不科学的。
    思路对于程序员是很重要的,如果思路不好会直接影响到你做出来的东西
    的稳定性、效率、可扩展性等等因素。
      

  4.   

    vs 2003下的VB.NET的datagrid可以把文本框装入,然后打开datagrid的分页功能就OK了.
      

  5.   

    用控件数组,load之后,用for控制,在确认.left .top就OK!
      

  6.   

    分页同时,form1上的label的怎么对应变化?
      

  7.   

    其实很简单,text1 和 text2 的onchange或者LostFocus事件中作两个判断:所有的text是否都填写,所有的填写是否都有效。一旦有效就把所有的text内容保存到字符串数组或者集合中去,然后把所有text清空,下方的页码提示已经进入下一页。没必要在每个页面中放一堆控件。
      

  8.   

    其实这种方法是不好用的,不如直接用fpspread之类的ocx来做。如果真像你想的那么做,有太多太多的问题在等你了。比如左右移动、打印、数据类型判定等等....
      

  9.   


    那就看你的数据在内存里的存储方式了。
    比如一个二维数组,第一维代表页码,第二维元素存储数据。如果不喜欢用redim那就用一维数组保存数据,然后add到集合里面,add的时候加上key用来表示页码。说需要查询第几页的数据,先把当前的所有text清空(需不需要保存当前数据自己判断),根据上面所述找到那一页的数据填充到text里面
      

  10.   

    这样解决你看行否:
    1、建立一个ACCESS库,在库中建一张临时表,表中字段与你的文本框从左到右对应。
    2、form1里添加ADO控件,然后用ADO控件连接数据表。
    3、form1里添加datagrid控件,鼠标右键属性,勾选允许添加、允许删除、允许更新,属性列表框里datasource选择ADODC1
    4、现在运行程序,就可从datagrid往ACCESS数据库的临时表里添加记录了,添加多少行都可以。
    5、你用这些数据的时候去临时表里找。
    6、当你完成任务时,删除临时表里的所有记录。象SupermanKing说的:
    你的编程思路的确存在问题,即使用TextBox,也不该象你想的那样设计,即浪费资源,又不好控制:我问题你几个问题:
    1、5*5一页的文本框,多少页才符合你的要求,你知道吗?
    2、假如有100页,你将来怎么来处理这2500个文本框里变量?你打算把这些数据放哪?
      

  11.   

    回答:
    1,最多是5页,因为想到不是很多,就不想用到数据库了。
    2.其实就算100页,占内存也不是很多吧,因为它们存的只是一些数字。其实我不知道一个text每个变量会给他们多少内存,如果只是按照字节数来算的话。2500*2=5m 2500*4=10m,也就是15m的内存而已。因为特殊性,数据只要保持到软件关闭就可以了。按照你说的可以。那能不能给一份代码贴出来呢?
      

  12.   


    所有的text都会填写。只要是数字就可以了
    能不能,也请你给一份代码呢。
      

  13.   

    1、那个程序根本不用代码,你只要建好ACCESS库和库里的表,然后按我上面的贴子做,然后运行就可把数据入库了。出库时要有点代码,那时已经可以datagrid无关。
    -------------------------------------------------2、假设你只有五页的话,这个功能很简单:
       1)你用5个fram框,去掉caption,然后在它们上面分别摆上25个文本框,然后用frame的visual属性来隐藏来显示,就能很简单的完成你的属性。(frame1.visual=false时,此框架上的所有文本框都是不可见的)
       2)当你全做好后,把它们重叠在一起
       2)用label做你的翻页标识。
       3)当你单击label1时,把frame1.visual=ture,其它4个全设为假,当你单击label2时,把frame2.visual=ture,另外4个设为false,这样就可以翻页,下一页,上一面,去判断当前不带[],然后就可以计算出现在该怎么翻页了。到数据填到第25按回车后,翻页,这就很简单了,你自己做吧。
      

  14.   

    我懒得打字,还是代码快Private blnRun As BooleanPrivate Sub Command1_Click(Index As Integer)
        Dim i As Integer
        
        With MSFlexGrid1
            For i = 0 To 24
                .TextMatrix(.Tag * 25 + i + 1, 2) = Text1(i).Text
                .TextMatrix(.Tag * 25 + i + 1, 3) = Text2(i).Text
            Next i
            
            .Tag = Index
            
            blnRun = True
            
            For i = 0 To 24
                Text1(i).Text = .TextMatrix(.Tag * 25 + i + 1, 2)
                Text2(i).Text = .TextMatrix(.Tag * 25 + i + 1, 3)
            Next i
            
            blnRun = False
        End With
        
    End SubPrivate Sub Form_Load()
        Dim i As Integer
        
        MSFlexGrid1.Tag = 0
        
        For i = 1 To Command1.UBound
            Command1(i).Enabled = False
        Next i
        
    End SubPrivate Sub Text1_Change(Index As Integer)
        If Not blnRun Then
            If Len(Text1(Index).Text) = 2 Then
                Text2(Index).SetFocus
            End If
        End IfEnd SubPrivate Sub Text2_KeyPress(Index As Integer, KeyAscii As Integer)
        Dim i As Integer    If Not blnRun Then
            If KeyAscii = 13 Then
                Form1.Label1(Val(Text1(Index).Text) - 1).Caption = Val(Form1.Label1(Val(Text1(Index).Text) - 1).Caption) + Val(Text2(Index).Text)
        
        
                If Index < 24 Then
                    Text1(Index + 1).SetFocus
                Else
                    '******************************
                    '换页
                    With MSFlexGrid1
                        For i = 0 To 24
                            .TextMatrix(.Tag * 25 + i + 1, 2) = Text1(i).Text
                            .TextMatrix(.Tag * 25 + i + 1, 3) = Text2(i).Text
                        
                            Text1(i).Text = ""
                            Text2(i).Text = ""
                        Next i
                        
                        If .Tag < Command1.UBound Then
                            .Tag = .Tag + 1
                            Command1(.Tag).Enabled = True
                        End If
                    End With
                    '*******************************
                    Text1(0).SetFocus
                End If
            End If
        End If
        
    End Sub
      

  15.   

    jhone99兄
    你的代码测试的时候,说下标越界
     .TextMatrix(.Tag * 25 + i + 1, 2) = Text1(i).Text
    这段出问题。