共用方式為


Visual Basic 6.0 使用者可用的 Controls 集合

更新:2007 年 11 月

在 Visual Basic 2008 中,Control.ControlCollection 類別會取代 Visual Basic 6.0 的 Controls 集合。

概念上的差異

在 Visual Basic 6.0 中,Controls 集合就是代表表單或容器 (Container) 控制項中,各控制項的項目集合。

在 Visual Basic 2008 中,Control.ControlCollection 類別會取代 Controls 集合。表單具有預設的 Control.ControlCollection 類別,可使用 Me.Controls 語法進行存取。

Add 方法

在 Visual Basic 6.0 中,Controls 集合的 Add 方法是晚期繫結,透過將 Control 類別指定為引數,可在 Add 方法中建立控制項。

在 Visual Basic 2008 中,Control.ControlCollection 類別的 Add 方法在加入至集合之前,需要使用 New 關鍵字建立控制項。

Remove 方法

Visual Basic 6.0 Controls 集合的 Remove 方法只可用於使用 Add 方法加入的控制項。Visual Basic 2008Control.ControlCollection 類別則沒有這個限制。

Timer 和 Menu 控制項

在 Visual Basic 6.0 中,Timer 和 Menu 控制項是 Controls 集合的成員。在 Visual Basic 2008 中,這些控制項是由 TimerMainMenuContextMenu 元件取代,元件不是 Control.ControlCollection 類別的成員。

被收納的控制項

在 Visual Basic 6.0 中,Controls 集合包括容器控制項子系的控制項 (例如,位於 Frame 控制項中的控制項),Visual Basic 2008 的 Control.ControlCollection 類別則否。若要逐一查看表單上的所有控制項,您必須遞迴地逐一查看每個容器控制項的 Controls 類別。

Controls 集合的程式碼變更

下列範例會示範 Visual Basic 6.0 與 Visual Basic 2008 之間的程式撰寫技巧差異。

加入及移除控制項的程式碼變更

下列程式碼將說明 Visual Basic 6.0 Controls 集合和 Visual Basic 2008Control.ControlCollection 類別之間的差異。

' 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
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 2008 範例中,由於表單的 Controls 集合只包含直接在表單上的控制項,函式會遞迴地為具有子系的控制項呼叫本身。

' 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
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 2008Controls 集合之間的差異,所以不會升級 Add 方法的呼叫。您必須加入程式碼,以使用新的 Add 方法重建應用程式的行為。

請參閱

參考

Control.Controls

Form.ControlCollection