在线求解!来者有分!
以下程序如果没有*的部分可以正确显示,多了*的部分运行显示不正确!
请测试后解答,分不够可以加! 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
[解决办法]
测试第一个文本框经常消失
让Fg2的width能够一次显示出所有列就没有问题了
即Fg2的宽度不够
------解决方案--------------------
测试了,不知道楼主具体要解决什么问题
提个建议:
1.建议利用scroll事件,让文本框可以跟随网格一起滚动
2.利用leftcol,toprow属性,控制文本框的visible
3.我倾向于用colpos和rowpos属性给文本框定位,因为利用这两个属性不需要移动单元格
[解决办法]
学习~~
[解决办法]
Private Sub Command2_Click()
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
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 开始的
'已经测试过了
[解决办法]
不知道你是控件表格中是什么,我也是用的按钮 点击按钮时添加这些程序,你所说的 "R "和 'r "其实没什么区别 .都一样 .vb不区分大小写.
[解决办法]
你说的程序不正常是指出现怎样的错误?
[解决办法]
你所说的第一个文本框第一次运行时丢失是不是出现这样的情况;msflexgrid中第一行没有显示文本矿即没有显示黄色
如果是的话那是因为msflexgrid的行标号是从0开始的所以你要把 Fg2.row = i改为 fg2.Row = i - 1
至于 "你知道怎么用rowpos 和 colpos 定位文本框吗 "我觉的你的方法就可以rowpos 和 colpos 是msflexgrid的属性
With MSFlexGrid1
c = .Col: r = .Row
Text1.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 属性