注册 登录
编程论坛 VB6论坛

如何多次定义控件位置?

qq361161637 发布于 2015-07-04 10:32, 1000 次点击
我在窗体上创建了一列check 控件,另有一个text控件。
我想实现在选中哪个check控件时,text控件在ckeck控件下方显示,第一个ckeck控件选中时,正常,再选其他控件时仍在第一个控件的位置旁。
如何解决?请指教。

语句如此定义的,有何问题?
 Private Sub HeLiFou_Click(Index As Integer)
    text.top=helifou(index).top+helifou(index).width
end sub
12 回复
#2
vbhello2015-07-04 13:41
试下句子改成这样:text.top=helifou(index).top+helifou(index).height
#3
yangfrancis2015-07-05 21:28
回复 楼主 qq361161637
Dim x As Integer

Private Sub Check1_Click(Index As Integer)
If x <> -1 Then
   Check1(x).Value = Unchecked
End If
x = Index
Text1.Left = Check1(Index).Left
End Sub

Private Sub Form_Load()
For i = 0 To 3
   Check1(i).Value = Unchecked
Next i
x = -1
End Sub
#4
风吹过b2015-07-05 22:56
程序代码:
Private Sub Form_Load()
    Call HeLiFou_Click(0)
End Sub

Private Sub HeLiFou_Click(Index As Integer)

Dim 间隔 As Long
间隔 = 5 * Screen.TwipsPerPixelY    '行距,5像素

Dim i As Long

'把 text上面的 HeLiFou 部分排好来
For i = 1 To Index
    HeLiFou(i).Top = HeLiFou(i - 1).Top + HeLiFou(i - 1).Height + 间隔
Next i

If HeLiFou(Index).Value = vbChecked Then        '如果选中
    '排text 框
    Text1.Visible = True
    Text1.Top = HeLiFou(Index).Top + HeLiFou(Index).Height
   
    '排 text 下面的第一个 HeLiFou
    If Index + 1 < HeLiFou.Count Then
        HeLiFou(Index + 1).Top = Text1.Top + Text1.Height + 间隔
    End If
Else                                            '未选中,就不需要排 text框了
    '此处:如果还有已选中的,但本次是未选中,也会造成隐藏 text1 框
    '如果不想产生此问题,那应该是不应该使用 ComboBox ,而应该使用 OptionButton
    Text1.Visible = False
    If Index + 1 < HeLiFou.Count Then
        HeLiFou(Index + 1).Top = HeLiFou(Index).Top + HeLiFou(Index).Height + 间隔
    End If
End If

'剩下的所有 HeLiFou
For i = Index + 2 To HeLiFou.Count - 1
    HeLiFou(i).Top = HeLiFou(i - 1).Top + HeLiFou(i).Height + 间隔
Next i

End Sub


问的问题题就有问题。
我的代码是 文本框跟着控件跑,并且控件会自动排列好来,不会产生太多的空隙。
#5
lianyicq2015-07-06 09:12
回复 楼主 qq361161637
textbox在check下边吧。
如果在窗体设计的时候第1个check和文本框左对齐。那就一行代码
Private Sub Check1_Click(Index As Integer)
  Text1.Left = Check1(Index).Left
End Sub
要注意多个check的选择是不是互不相容。
#6
yangfrancis2015-07-06 10:19
Check当然是多选的,要让它互不相容要专门写代码来实现。或干脆换用option
#7
qq3611616372015-07-07 11:31
我的想法是定义text框的位置跟随在checkbox的附近。其他功能现在没有问题。只是text文本框一直在第一个checkbox(0)的附近,不能到其他check(index)附近
#8
qq3611616372015-07-07 15:20
Private Sub HeLiFou_Click(Index As Integer)
    text.top=helifou(index).top+helifou(index).height
end sub

现在只在第一个即  HeLiFou(0)  的下方显示,选择其他 HeLiFou() 的时候text的位置没有变化
#9
lianyicq2015-07-07 16:34
回复 9楼 qq361161637
至少有两种可能。
1、没仔细看五楼回复;
2、不了解文本框的Top和Left属性。
9楼代码只给Top赋了值,只对文本框的上下位置有影响。左右位置没变化。
另外不知是如何命名的文本框,代码中关键字全是小写。
#10
qq3611616372015-07-08 08:22
忘记说明了,每个checkbox控件都在一个小的框架控件里面,所有的小框架控件在一个大的框架控件里面。check(index)和frame(index) index相同

text控件控制 跟随在小的框架控件frame(index)附近显示没有任何问题,一旦使用check控件的属性就出错。
#11
lianyicq2015-07-08 09:14
回复 11楼 qq361161637
好不容易把问题说清楚了。Frame是容器。
也很简单,一条语句
Private Sub Check1_Click(Index As Integer)
  Set Text1.Container = Frame2(Index)
End Sub
窗体布置如下图
只有本站会员才能查看附件,请 登录


#12
zrf12982015-09-23 14:33
Private Sub HeLiFou_Click(Index As Integer)
    Text.Move helifou(Index).Left, helifou(Index).Top + helifou(Index).Height
end sub
1