带滚动条的老兄 [英] Dude with ScrollBar

查看:32
本文介绍了带滚动条的老兄的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 VB6 中遇到了 de ScrollBar 的问题.观看下一个 gif:

i've a problem with de ScrollBar in VB6. Watch de next gif:

我该如何解决?

这是我的全部代码:

Option Explicit
    Private old Post As Integer
    
    Dim index As Integer
    Dim indicee As Integer
    
    Public Disclaimer
    
    Private Sub btnAdd_Click ()
    index = index + 1 'we increase the index
    indicee = indicee + 0 'we start it at 0
    pic1 (indicee) .Visible = True
    
    'Label and TextBox type
    lblType (indicee) .Visible = True
    cmbAddType (indicee) .Visible = True
    
    'Label and TextBox prefix
    lblAddPrefix (indicee) .Visible = True
    txtAddPrefix (indicee) .Visible = True
    
    'Number Label and TextBox
    lblAddNum (indicee) .Visible = True
    txtAddNumber (indicee) .Visible = True
    
    chkAddPrincipal (indicee) .Visible = True
    
    'Label and TextBox link
    lblAddVin (indicee) .Visible = True
    cmbAdd Link (indicee) .Visible = True
    
    'uc1
    Load pic1 (index) 'we create the control
    pic1 (index) .Visible = True 'we make it visible
    pic1 (index) .Top = pic1 (index - 1) .Top + pic1 (index - 1) .Height + 20
    
    'lblType
    Load lblType (index)
    Set lblType (index) .Container = pic1 (index)
    lblType (index) .Visible = True
    lblType (index) .Top = lblType (index - 1) .Top
    'cmbAddType
    Load cmbAddType (index)
    Set cmbAddType (index) .Container = pic1 (index)
    cmbAddType (index) .Visible = True
    cmbAddType (index) .Top = cmbAddTipo (index - 1) .Top
    
    'lblAddPrefix
    Load lblAddPrefix (index)
    Set lblAddPrefix (index) .Container = pic1 (index)
    lblAddPrefix (index) .Visible = True
    lblAddPrefix (index) .Top = lblAddPrefix (index - 1) .Top
    'txtAddPrefix
    Load txtAddPrefix (index)
    Set txtAddPrefix (index) .Container = pic1 (index)
    txtAddPrefix (index) .Visible = True
    txtAddPrefix (index) .Top = txtAddPrefix (index - 1) .Top
    
    'lblAddNum
    Load lblAddNum (index)
    Set lblAddNum (index) .Container = pic1 (index)
    lblAddNum (index) .Visible = True
    lblAddNum (index) .Top = lblAddNum (index - 1) .Top
    'txtAddNumber
    Load txtAddNumber (index)
    Set txtAddNumber (index) .Container = pic1 (index)
    txtAddNumber (index) .Visible = True
    txtAddNumber (index) .Top = txtAddNumber (index - 1) .Top
    
    'checkAddPrincipal
    Load chkAddPrincipal (index)
    Set chkAddPrincipal (index) .Container = pic1 (index)
    chkAddPrincipal (index) .Visible = True
    chkAddPrincipal (index) .Top = chkAddPrincipal (index - 1) .Top
    
    'lblAddVin
    Load lblAddVin (index)
    Set lblAddVin (index) .Container = pic1 (index)
    lblAddVin (index) .Visible = True
    lblAddVin (index) .Top = lblAddVin (index - 1) .Top
    'cmbAdd Link
    Load cmbAdd Link (index)
    Set cmbAdd Link (index) .Container = pic1 (index)
    cmbAdd Link (index) .Visible = True
    cmbAddLink (index) .Top = cmbAddLink (index - 1) .Top
    
    End Sub
    
    
    
    
    
    Private Sub Form_Load ()
       scrollAdd.Min = 0
       scrollAdd.Max = 1000
       scrollAdd.SmallChange = Screen.TwipsPerPixelX * 10
       scrollAdd.LargeChange = scrollAdd.SmallChange
    End Sub
    
    Private Sub scrollAdd_Change ()
    ScrollPictureBox
    End Sub
    
    Private Sub scrollAdd_Scroll ()
    ScrollPictureBox
    End Sub
    
    Private Sub ScrollPictureBox ()
       Dim c As Control
    
       For Each c In Me.Controls
          If c.Container.Name = "pic1" And Not TypeOf c Is VScrollBar Then
             c.Top = c.Top + (oldPos - scrollAdd.Value)
          End if
       Next
    
       oldPos = scrollAdd.Value
    End Sub

谁能帮帮我?我需要用 ScrollBar 来解决这个问题.我需要它正确移动,我该怎么做?

Can anyone help me? I need to solve that problem with the ScrollBar. I need it to move correctly, how do I do it?

~我添加了 gif 让你可以理解我的错误/错误"我的英语不好,但我希望你能理解我希望滚动条正确移动,而无需移动 gif 中的表单.这个想法是,当按下按钮时,会添加字段并使用 ScrollBar 可以看到它们,但是您会看到整个表单移动,包括 ScrollBar~

~I added gifs to you can understand my "bug/error" My english is not good but i hope that you can understand I want the scrollbar to move correctly without moving the form as seen in the gif. The idea is that when pressing the button, fields are added and with the ScrollBar they can be seen but as you will see the whole form moves including the ScrollBar~

我需要的是有一个 ScrollBar,它允许滚动查看每次按下按钮时添加的所有元素.

推荐答案

既然这是你关于这个话题的第三个问题,我将提出一个完整且简单得多的解决方案.第一步是使用设计器直观地创建一个用户控件.结果应如下所示:

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:

然后您开始构建您的主窗体.您可以将 UserControl 用于顶部部分和您需要的任何其他实例.表单最终看起来像这样:

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:

红色圆圈显示一个名为 uc1 的 UserControl,其 Index 为 0.蓝色圆圈显示一个名为 Picture1 的 PictureBox 内的 VScrollBar 控件.所有额外的 UserControl 也将放置在 PictureBox 内.现在开始代码:

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

注意代码变得多么简单,特别是 Add 事件处理程序.它也可以按照您需要的方式工作.在某些时候,您将需要访问 UserControl 的状态.我通常做的是为 UserControl 定义属性:

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

属性到位后,您现在可以使用任何有效索引设置和获取 UserControl 的状态:

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

这篇关于带滚动条的老兄的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆