首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

在线求解!来者有分!解决方法

2012-01-01 
在线求解!来者有分!以下程序如果没有*的部分可以正确显示,多了*的部分运行显示不正确!请测试后解答,分不够

在线求解!来者有分!
以下程序如果没有*的部分可以正确显示,多了*的部分运行显示不正确!
请测试后解答,分不够可以加!   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 属性

热点排行