以下程序如果没有*的部分可以正确显示,多了*的部分运行显示不正确!
请测试后解答,分不够可以加! fg2为mshflexgrid 例如4行11列 测试时第一次debug的cellleft居然相等!!!Dim i As Integer
Dim objTxt() As TextBox
Dim objOpt() As CheckBox
ReDim objTxt(Fg2.Rows - 1)
ReDim objOpt(Fg2.Rows - 1)For i = 1 To Fg2.Rows - 1
    
    Fg2.row = i    Set objTxt(i - 1) = Me.Controls.Add("vb.textbox", "txt" & i)
    With objTxt(i - 1)
        Fg2.Col = 8
        .Text = Fg2
        .Move Fg2.Left + Fg2.CellLeft, Fg2.Top + Fg2.CellTop, Fg2.CellWidth, Fg2.CellHeight
        .Visible = True
        .BackColor = vbYellow
        .ZOrder 0        '显示在上层
        
        Debug.Print "celltxt" & i & ":"; Fg2.CellLeft
        
    End With
 '****************************************************************   
    Set objOpt(i - 1) = Me.Controls.Add("vb.checkbox", "chk" & i)
    With objOpt(i - 1)
        Fg2.Col = 9
        .Caption = Fg2
        If Fg2.TextArray(Fgi(i, 9)) = "已付" Then .Value = 1 Else .Value = 0
       
        .Move Fg2.Left + Fg2.CellLeft, Fg2.Top + Fg2.CellTop, Fg2.CellWidth, Fg2.CellHeight
        .Visible = True
        .BackColor = vbYellow
        .ZOrder 0
        
        Debug.Print "cellopt" & i & ":"; Fg2.CellLeft
    End With
 '*****************************************************************   
Next i

解决方案 »

  1.   

    忘了
    Function Fgi(r As Integer, c As Integer) As Integer
      Fgi = c + Fg2.Cols * r
    End Function
      

  2.   

    测试第一个文本框经常消失
    让Fg2的width能够一次显示出所有列就没有问题了
    即Fg2的宽度不够
      

  3.   

    测试了,不知道楼主具体要解决什么问题
    提个建议:
    1.建议利用scroll事件,让文本框可以跟随网格一起滚动
    2.利用leftcol,toprow属性,控制文本框的visible
    3.我倾向于用colpos和rowpos属性给文本框定位,因为利用这两个属性不需要移动单元格
      

  4.   

    to yachong(蚜虫)需要解决的问题是让第一个文本框第一次运行时不消失!谢谢你的建议!关于第2,3的建议,能否给个小实例? 感谢!
      

  5.   

    Private Sub Command2_Click()
    Dim i As Integer
    Dim objTxt() As TextBox
    Dim objOpt() As CheckBoxReDim objTxt(fg2.Rows - 1)
    ReDim objOpt(fg2.Rows - 1)For i = 1 To fg2.Rows
        
        fg2.Row = i - 1    Set objTxt(i - 1) = Me.Controls.Add("vb.textbox", "txt" & i)
        With objTxt(i - 1)
            fg2.Col = 8
            .Text = fg2
            .Move fg2.Left + fg2.CellLeft, fg2.Top + fg2.CellTop, fg2.CellWidth, fg2.CellHeight
            .Visible = True
            .BackColor = vbYellow
            .ZOrder 0        '显示在上层
            
            Debug.Print "celltxt" & i & ":"; fg2.CellLeft
            
        End With
     '****************************************************************
     Set objOpt(i - 1) = Me.Controls.Add("vb.checkbox", "chk" & i)
        With objOpt(i - 1)
            fg2.Col = 9
            .Caption = fg2
            If fg2.TextArray(9 + fg2.Cols * (i - 1)) = "已付" Then .Value = 1 Else .Value = 0
           
            .Move fg2.Left + fg2.CellLeft, fg2.Top + fg2.CellTop, fg2.CellWidth, fg2.CellHeight
            .Visible = True
            .BackColor = vbYellow
            .ZOrder 0
            
            Debug.Print "cellopt" & i & ":"; fg2.CellLeft
        End With '*****************************************************************
    Next
    End Sub
    '调整后的程序  msflexgrid是行标号是从0 开始的
    '已经测试过了
      

  6.   

    to molihuacha1() :实在想不通你调整的程序 与 我的程序有什么两样.你调整的程序单独运行时显示正常,但同样的代码我在程序中运行还是出现不正常[我添加一个按钮 你的程序原封不动 运行还是不正常工作]同时发现
        Fg2.row = i     '在我的程序中 'R' 为 'r'    Fg2.Row = i     '在我的程序中 'R' 为 'R'费解啊!
      

  7.   

    同时发现
        Fg2.row = i     '在我的程序中 'R' 为 'r'    Fg2.Row = i     '在你的程序中 'R' 为 'R'
      

  8.   

    不知道你是控件表格中是什么,我也是用的按钮 点击按钮时添加这些程序,你所说的 "R"和'r"其实没什么区别 .都一样 .vb不区分大小写.
      

  9.   

    molihuacha1()  请将我的程序换直接粘贴到程序中运行  fg2 =10*10第一个文本框第一次运行时丢失!p.s  你知道怎么用rowpos 和 colpos 定位文本框吗?
         scroll下拉时怎么控制文本框的visible?分不够可以加!  谢谢
      

  10.   

    你所说的第一个文本框第一次运行时丢失是不是出现这样的情况;msflexgrid中第一行没有显示文本矿即没有显示黄色
    如果是的话那是因为msflexgrid的行标号是从0开始的所以你要把    Fg2.row = i改为 fg2.Row = i - 1
    至于 "你知道怎么用rowpos 和 colpos 定位文本框吗"我觉的你的方法就可以rowpos 和 colpos 是msflexgrid的属性
    With MSFlexGrid1
    c = .Col: r = .RowText1.Left = .Left + .ColPos(c)
    Text1.Top = .Top + .RowPos(r)
    Text1.Width = .ColWidth(c)
    Text1.Height = .RowHeight(r)
    Text1 = .Text
    Text1.Visible = True
    Text1.SetFocus
    这样定义文本矿的位置.
    文本矿本身没有rowpos 和 colpos 属性
      

  11.   

    molihuacha1() 
     经测试 第一次运行时第一个文本框跟检测框重叠了