i\'ve a problem with de ScrollBar
in VB6
. Watch de next gif:
How can I solve that?
Since this is your third question on this topic, I will present a complete and much simpler solution. The first step is to create a UserControl visually using the Designer. The result should look like this:
You then start building your main form. You can use the UserControl for both the top section and any additional instances you require. The form ends up looking like this:
The red circle shows a UserControl named uc1
with an Index
of 0. The blue circle shows a VScrollBar control inside a PictureBox named Picture1
. All additional UserControl's will also be placed inside the PictureBox. Now on to the code:
Option Explicit
Private index As Integer
Private oldPos As Integer
Private Sub Form_Load()
scrollAdd.Min = 0
scrollAdd.Max = 3000
scrollAdd.SmallChange = Screen.TwipsPerPixelX * 10
scrollAdd.LargeChange = scrollAdd.SmallChange
Picture1.Visible = False
End Sub
Private Sub scrollAdd_Change()
ScrollControls
End Sub
Private Sub scrollAdd_Scroll()
ScrollControls
End Sub
Private Sub btnAdd_Click()
index = index + 1
Load uc1(index)
Set uc1(index).Container = Picture1 'place the control inside the PictureBox
uc1(index).Visible = True
uc1(index).Top = IIf(index = 1, 0, uc1(index - 1).Top + uc1(index - 1).Height + 20)
Picture1.Visible = True
End Sub
Private Sub ScrollControls()
Dim c As Control
For Each c In Me.Controls
If c.Container.Name = "Picture1" And Not TypeOf c Is VScrollBar Then
c.Top = c.Top + (oldPos - scrollAdd.Value)
End If
Next
oldPos = scrollAdd.Value
End Sub
Notice how simple the code has become, in particular the Add
event handler. It also works the way you need. At some point you will need to gain access to the state of a UserControl. What I typically do is define properties for the UserControl:
Option Explicit
Public Property Get AddType() As String
AddType = cmbAddType.Text
End Property
Public Property Let AddType(ByVal Value As String)
cmbAddType.Text = Value
End Property
Public Property Get AddPrefix() As String
AddPrefix = txtAddPrefix.Text
End Property
Public Property Let AddPrefix(ByVal Value As String)
txtAddPrefix.Text = Value
End Property
Public Property Get AddNumber() As String
AddNumber = txtAddNumber.Text
End Property
Public Property Let AddNumber(ByVal Value As String)
txtAddNumber.Text = Value
End Property
Public Property Get AddPrincipal() As Integer
AddPrincipal = chkAddPrincipal.Value
End Property
Public Property Let AddPrincipal(ByVal Value As Integer)
chkAddPrincipal.Value = Value
End Property
Public Property Get AddLink() As String
AddLink = cmbAddLink.Text
End Property
Public Property Let AddLink(ByVal Value As String)
cmbAddLink.Text = Value
End Property
With the properties in place, you can now set and get the state of a UserControl using any valid index:
Private Sub TestTheScreen()
'you can initialize the controls as needed
uc1(0).AddPrefix = "My Prefix"
uc1(0).AddPrincipal = vbChecked
'and at some point retrieve the state
Dim ap As Integer
ap = uc1(0).AddPrincipal
End Sub