电竞比分网-中国电竞赛事及体育赛事平台

分享

VB-控件結構

 悟靜 2009-06-02
循環(huán)結構
    循環(huán)結構允許重復執(zhí)行一行或數行代碼。Visual Basic 支持的循環(huán)結構有:
    1.Do...Loop
    2.For...Next
    3.For Each...Next

    Do...Loop
    用 Do 循環(huán)重復執(zhí)行一語句塊,且重復次數不定。Do...Loop 語句有幾種演變形式,但每種都計算數值條件以決定是否繼續(xù)執(zhí)行。如同 If...Thencondition 必須是一個數值或者值為 True(非零)或 False(零)的表達式。在下面的 Do...Loop 循環(huán)中,只要 condition 為 True 就執(zhí)行 statements。
    Do While condition
       statements

    Loop
    當 Visual Basic 執(zhí)行這個 Do 循環(huán)時會首先測試 condition。如果 condition為 False(零),則跳過所有語句。如果 condition 為 True(非零),則 VisualBasic 執(zhí)行語句,然后退回到 Do While 語句再測試條件。
    因此,只要 condition 為 True 或非零,循環(huán)可以隨意執(zhí)行多少次。如果condition 一開始便為 False,則不會執(zhí)行語句。例如,以下過程將計算某一目標字符串在另一字符串中出現的次數,只要發(fā)現目標串就執(zhí)行循環(huán):
    Function CountStrings (longstring, target)
        Dim position, count
        position = 1
        Do While InStr (position, longstring, target)
           position = InStr(position, longstring, target)_
            + 1
            count = count + 1
        Loop
        CountStrings = count
    End Function
    如果目標字符串未出現在另一個字符串中,則 InStr 返回 0,而且不再執(zhí)行循環(huán)。
    Do...Loop 語句的另一種演變形式是先執(zhí)行語句,然后在每次執(zhí)行后測試condition。這種形式保證 statements 至少執(zhí)行一次:
    Do
       statements
    Loop While condition
    其它兩種演變形式類似于前兩個,所不同的是,只要 condition 為 False 而不是 True,它們就執(zhí)行循環(huán)。

    For...Next000
    在不知道循環(huán)內需要執(zhí)行多少次語句時,宜用 Do 循環(huán)。但是,在知道要執(zhí)行多少次時,則最好使用 For...Next 循環(huán)。與 Do 循環(huán)不同, For 循環(huán)使用一個叫做計數器的變量,每重復一次循環(huán)之后,計數器變量的值就會增加或者減少。For 循環(huán)的語法如下:
    For counter = start To end [Step increment]
      statements
    Next [counter]
    參數 Counter、Start、end 和 increment 都是數值型的。
    注意 increment 參數可正可負。如果 increment 為正,則 Start 必須小于等于end,否則不能執(zhí)行循環(huán)內的語句。如果 increment 為負,則 Start 必須大于等于 end,這樣才能執(zhí)行循環(huán)體。如果沒有設置 Step,則 increment 缺省值為 1。
    在執(zhí)行 For 循環(huán)時,Visual Basic
    1. 設置 counter 等于 start。
    2. 測試 counter 是否大于 end。若是的話,則 Visual Basic 退出循環(huán)。 (若 increment 為負,則 Visual Basic 測試 counter 是否小于 end。)
    3. 執(zhí)行語句。
    4. counter 增加一,或者增加 increment(如果已指定的話)。
    5. 重復步驟 2 到步驟 4。
    以下代碼打印出所有有效的屏幕字體名:
    Private Sub Form_Click ()
       Dim I As Integer
       For i = 0 To Screen.FontCount
         Print Screen.Fonts (i)
       Next
    End Sub
    在 VCR 示例應用程序中,HighlightButton 過程使用 For...Next 循環(huán),一步步經過 VCR 窗體的控件集合,并顯示適當的 Shape 控件:
    Sub HighlightButton (MyControl As Variant)
       Dim i As Integer
       For i = 0 To frmVCR.Controls.Count - 1
          If TypeOf frmVCR.Controls (i) Is Shape Then
            If frmVCR.Controls (i).Name = MyControl Then
               frmVCR.Controls (i).Visible = True
            Else
               frmVCR.Controls (i).Visible = False
            End If
          End If
       Next
    End Sub

    For Each...Next
    For Each...Next 循環(huán)與 For...Next 循環(huán)類似,但它對數組或對象集合中的每一個元素重復一組語句,而不是重復語句一定的次數。如果不知道一個集合有多少元素, For Each...Next 循環(huán)非常有用。
    For Each...Next 循環(huán)的語法如下:
    For Each element In group
      statements
    Next elementt
    例如,下面的子過程打開 Biblio.mdb,把每一個表的名字加到列表框中。
    Sub ListTableDefs ()
      Dim objDb As Database
      Dim MyTableDef as TableDef
      Set objDb = OpenDatabase("c:\vb\biblio.mdb", _
      True, False)
      For Each MyTableDef In objDb.TableDefs ()
        List1.AddItem MyTableDef.Name
        Next MyTableDef
      End Sub
    請記住使用 For Each...Next 時的幾點限制:
    1.對集合,element 只能是 Variant 變量,或一般的 Object 變量,或“對象瀏覽器”中列出的對象。
    2.對數組,element 只能是 Variant 變量。
    3.For Each...Next 不能與用戶自定義類型的數組一起使用,因為 Variant 不可能包含用戶自定義類型。

    使用控制結構
    嵌套控制結構可以把控制結構放入另一個控制結構之內(例如在 For...Next 循環(huán)中的If...Then 塊)。一個控制結構內部包含另一個控制結構叫做 nest(嵌套)。在 Visual Basic 中,控制結構的嵌套層數沒有限制。按一般習慣,為了使判定結構和循環(huán)結構更具可讀性,總是用縮排方式書寫判定結構或循環(huán)的正文部分。
    例如,下面的過程要把打印機和屏幕共有的字體名全部打印出來:
    Private Sub Form_Click ()
       Dim SFont, PFont
       For Each SFont In Screen.Fonts ()
         For Each PFont In Printer.Fonts ()
           If SFont = PFont Then
             Print SFont
           End If
         Next PFont
       Next SFont
    End Sub
    注意,第一個 Next 關閉了內層的 For 循環(huán),而最后一個 For 關閉了外層的 For 循環(huán)。同樣,在嵌套的 If 語句中,End If 語句自動與最靠近的前一個 If 語句配對。嵌套的 Do...Loop 結構的工作方式也是一樣的,最內圈的 Loop 語句與最內圈的 Do 語句匹配。

     退出控制結構
    用 Exit 語句可以直接退出 For 循環(huán)、Do 循環(huán)、子過程或函數過程。Exit 語句的語法很簡單:Exit For 在 For 循環(huán)中出現的次數沒有限制,Exit Do 在Do 循環(huán)中出現的次數也沒有限制。
    For counter = start To end
      [Step increment]
      [statementblock]
      [Exit For]
      [statementblock]
    Next [counter[, counter] [,...]]
    Do [{While | Until} condition]
      [statementblock]
      [Exit Do]
      [statementblock]

    Loop
    Exit Do 語句可以在 Do 循環(huán)語法的所有版本中使用。
    Exit For 和 Exit Do 非常有用,因為它有時適于立即退出循環(huán),而且不再執(zhí)行循環(huán)中的任何進一步迭代或者語句。例如,在前面的打印屏幕和打印機共有字體的例子中,程序不斷將打印機字體和給定的屏幕字體作比較,甚至在已經找到了一個相符的打字機字體后還在繼續(xù)尋找。對這個函數有一個效率更高的改進版,在此,只要找到相匹配的字體后就立即退出循環(huán):
    Private Sub Form_Click ()
      Dim SFont, PFont
      For Each SFont In Screen.Fonts ()
        For Each PFont In Printer.Fonts ()
          If SFont = PFont Then
            Print Sfont
            Exit For        '退出內圈循環(huán)。
          End If
        Next PFont
      Next SFont
    End Sub
    正如此例所表明的, Exit 語句幾乎總是出現在 If 語句或 Select Case 語句內部,而 If 語句或 Select Case 語句在循環(huán)內嵌套。
    用 Exit 語句中斷循環(huán)時,計數器變量的值會因退出循環(huán)的方式而不同:
    1.在完成循環(huán)時,計數器的值等于上限值加上步進值。
    2.在提前退出循環(huán)時,計數器變量保持其值,并遵從有關取值范圍的一般規(guī)則。
    3.在集合之外疊代時,如果計數器變量為 Object 類型,則其值為Nothing;如果計數器變量為 Variant 類型,則其值為 Empty。

    退出子過程或函數過程
    也可從控制結構內部退出過程。Exit Sub 和 Exit Function 的語法,和上一節(jié)“退出控制結構”中的 Exit For 和 Exit Do 相似。Exit Sub 可以出現在子過程主體內的任何地方,出現的次數隨需要而定。
    當過程已完成每個任務并可直接返回時,Exit Sub 和 Exit Function 是非常有用的。例如,如果想改動前面的例子,使得對查找到的打印機和屏幕的共有字體,只打印其中的第一個,則可用 Exit Sub :
    Private Sub Form_Click ()
       Dim SFont, PFont
       For Each SFont In Screen.Fonts ()
         For Each PFont In Printer.Fonts ()
           If SFont = PFont Then
              Print Sfont
              Exit Sub          '退出過程。
           End If
         Next PFont
       Next SFont
    End Sub

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多