vb关于动态添加控件现有pict
这个问题嘛真的不好解决,因为 Label 是没有句柄的。
如果是一个 PictureBox 和 CommandButton 的话,那就很容易实现了。
'函数声明
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
'事件代码
Load Picture1(1)
Load Command1(1)
SetParent Command1(1)。 hWnd, Picture1(1)。hWnd
Picture1(1)。Move 0,...全部
这个问题嘛真的不好解决,因为 Label 是没有句柄的。
如果是一个 PictureBox 和 CommandButton 的话,那就很容易实现了。
'函数声明
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
'事件代码
Load Picture1(1)
Load Command1(1)
SetParent Command1(1)。
hWnd, Picture1(1)。hWnd
Picture1(1)。Move 0, 0 '为了看效果将他们整体移动到其他位置,如果没有这句,将与原来的一组完全重合
Command1(1)。Visible = True '必须的,否则看不到
Picture1(1)。
Visible = True '必须的,否则看不到
可以发现,按钮的内部定位和原来的完全一致。
可是,如果是 Label 的话,由于他没有句柄,属于中层次控件,无法随意调整它们的层次,即不能载入到高层次的 PictureBox 中去。
如果必须解决这样的问题,那么需要自己制作一个有句柄的 LabelEx 控件来完成要求。或者你说不定是为了实现一种浏览器或什么的,可以将它们整体做成一个控件封装起来,这样就能以新控件的形式建立自定义控件的数组了。
哎,实在看不下去了,楼下的卖关子。。。
我想了下,你如果只要再添加一个 PictureBox 和 Label 并且让 Label 在 PictureBox 里面的话,其实可以不考虑使用控件数组的。
为了方便,以下代码混合了控件数组和动态添加控件的相关方法。
Private WithEvents NewLabel As Label
Private Sub AddGroup()
Load Picture1(1)
Set NewLabel = Me。
Controls。Add("VB。Label", "NewLabel", Picture1(1))
With NewLabel
。Caption = Label1(0)。Caption
。Move Label1(0)。
Left, Label1(0)。Top, Label1(0)。Width, Label1(0)。Height
。Visible = True
End With
Picture1(1)。Move 0, 0 '为了看效果将他们整体移动到其他位置,如果没有这句,将与原来的一组完全重合
Picture1(1)。
Visible = True
End Sub
Private Sub NewLabel_Click()
'响应事件代码
End Sub
这样的缺点就是不能从整体上控制控件的行为,尚有待考虑。
本人制作的 VB 滚动条控件已经超过发行期,现在将不在网络上发布。
目前最新的版本已经十分完善了。
对于有需要的用户可以联系 galaxysoft@ 。收起