分享

Visual Basic 6.0 的 Controls 集合在 Visual Basic 2005 中

 nxhujiee 2010-04-16

Visual Basic 6.0 的 Controls 集合在 Visual Basic 2005 中被替换为 ControlCollection 类。

概念差异

在 Visual Basic 6.0 中,Controls 集合是表示窗体或容器控件上的控件的元素的集合。

在 Visual Basic 2005 中,ControlCollection 类代替了 Controls 集合。窗体具有默认的 ControlCollection 类,可以使用语法 Me.Controls 访问。

Add 方法

在 Visual Basic 6.0 中,Controls 集合的 Add 方法是后期绑定的;通过将 Control 类指定为参数,在 Add 方法中创建控件。

在 Visual Basic 2005 中,在将控件添加到集合前,ControlCollection 类的 Add 方法要求使用 New 关键字创建控件。

Remove 方法

Visual Basic 6.0 Controls 集合的 Remove 方法只能用于使用 Add 方法添加的控件;Visual Basic 2005 ControlCollection 类没有此限制。

计时器和菜单控件

在 Visual Basic 6.0 中,TimerMenu 控件是 Controls 集合的成员。在 Visual Basic 2005 中,这些控件替换为 TimerMainMenuContextMenu 组件;这些组件不是 ControlCollection 类的成员。

包含的控件

Visual Basic 6.0 Controls 集合包括作为容器控件的子控件的控件(如位于 Frame 控件上的控件);而 Visual Basic 2005 ControlCollection 类不是这样。要循环访问窗体上的所有控件,则必须递归循环访问每个容器控件的 Controls 类。

控件集合的代码更改

下面的示例演示 Visual Basic 6.0 和 Visual Basic 2005 在编码方法上的不同之处。

添加和移除控件的代码更改

下面的代码说明 Visual Basic 6.0 Controls 集合和 Visual Basic 2005 ControlCollection 类之间的差异。

  CopyCode image复制代码
' Visual Basic 6.0
Private Sub Command1_Click()
    ' Declare a new Control variable.
    Dim c As Control
    ' Create and add the new control.
    Set c = Controls.Add("VB.TextBox", "Text1")
    ' Make the new control visible.
    c.Visible = True
    ' Set the initial text.
    c.Text = "Hello"
    ' Retrieve the text from the new TextBox.
    If Controls.Count > 1 Then
        MsgBox (Controls("Text1").Text)
    End If
    ' Remove the new control.
    Controls.Remove (Text1)
    ' The following line causes a compilation error.
    ' You cannot remove controls added at design time.
    Controls.Remove (Command1)
End Sub
Visual Basic  CopyCode image复制代码
' Visual Basic 2005
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' Create a new TextBox control.
    Dim TextBox1 As New System.Windows.Forms.TextBox
    TextBox1.Name = "TextBox1"
    ' Add the new control to the form's Controls collection.
    Me.Controls.Add(TextBox1)
    ' No need to set Visible property.
    ' Set the initial text.
    TextBox1.Text = "Hello"
    ' Retrieve the text from the new TextBox.
    If Me.Controls.Count > 1 Then
        MsgBox(Me.Controls("TextBox1").Text)
    End If
    ' Remove the new control.
    Me.Controls.Remove(TextBox1)
    ' Remove the control added at design time.
    Me.Controls.Remove(Button1)
End Sub

循环访问控件集合的代码更改

下面的代码展示的函数循环访问窗体上的所有控件,然后清除所有 CheckBox 控件。本示例假定 CheckBox 控件位于 GroupBoxPanel 控件上,而不是窗体上。在 Visual Basic 2005 示例中,由于窗体的 Controls 集合仅包括直接位于窗体上的控件,所以该函数对具有子级的所有控件递归调用自身。

  CopyCode image复制代码
' Visual Basic 6.0
Private Sub ClearChecks()
    For Each Control in Me.Controls
        If TypeOf Control Is CheckBox Then
            Control.Value = vbUnchecked
        End If
    Next
End Sub
Visual Basic  CopyCode image复制代码
' Visual Basic 2005
Private Sub ClearChecks(ByVal Container As Control)
    Dim ctl As Control
    Dim chk As CheckBox
    For Each ctl In Container.Controls
        If TypeOf ctl Is CheckBox Then
            chk = ctl
            chk.Checked = False
        End If
        ' Recursively call this function for any container controls.
        If ctl.HasChildren Then
            ClearChecks(ctl)
        End If
    Next
End Sub

升级说明

由于 Visual Basic 6.0 和 Visual Basic 2005 Controls 集合之间的差异,对 Add 方法的调用不进行升级。必须添加代码才能使用 Add 方法重新创建应用程序的这一行为。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多