1. 程式人生 > >[VB學習中]之五:過程與函式

[VB學習中]之五:過程與函式

子過程(Sub)的定義

事件過程

窗體事件過程

Private  Sub Form_事件名([引數列表])

  [區域性變數和常數宣告]

  語句塊

End Sub

說明:

(1)窗體事件過程名由Form_事件名組成,多文件窗體用MDIForm_事件名。

(2)每個窗體事件過程名前都有一個Private的字首,表示該事件過程不能在它自己的窗體模組之外被呼叫。

(3)事件過程有無引數,完全由VB提供的具體事件本身決定,使用者不可以隨意新增。

控制元件事件過程

Private  Sub 控制元件名_事件名([引數列表])

  [區域性變數和常數宣告]

  語句塊

End Sub

說明:其中的控制元件名必須與窗體中某控制元件相匹配,否則VB將認為它是一個通用過程。

通用過程

[ Private | Public ] [ Static] Sub 過程名([引數列表])

  [區域性變數和常數宣告]  ‘用Dim 或Static宣告

  語句塊

  [Exit Sub]

  語句塊

End Sub

說明:

(1)預設[ Private | Public ]時,系統預設為 Public。

(2)Static 表示過程中的區域性變數為“靜態”變數。

(3)過程名的命名規則與變數命名規則相同,在同一個模組中,同一符號名不得既用作Sub過程名,又用作Function過程名。

(4)引數列表中的引數稱為形式引數,它可以是變數名或陣列名,只能是簡單變數,不能是常量、陣列元素、表示式;若有多個引數時,各引數之間用逗號分隔,形參沒有具體的值。VB的過程可以沒有引數,但一對圓括號不可以省略。不含引數的過程稱為無參過程。

形參格式為:[ ByVal ] 變數名[()] [As 資料型別]

說明:

(1)變數名[()]:變數名為合法的VB變數名或陣列名,無括號表示變數,有括號表示陣列。

(2)ByVal :表明其後的形參是按值傳遞引數(傳值引數 Passed By Value),若預設或用ByRef,則表明引數是按地址傳遞的(傳址引數)或稱“引用”(Passed By Reference)。

(3)As  資料型別:預設表明該形參是變體型變數,若形參變數的型別宣告為String,則只能是不定長的。而在呼叫該過程時,對應的實在引數可以是定長的字串或字串陣列,若形參是陣列則無限制。


子過程(Sub)的呼叫

(1)用Call語句呼叫Sub過程:Call 過程名(實在引數表)。

(2)把過程名作為一個語句來用:過程名 [實參1[,實參2……]]。


函式(Function)過程的定義

[ Private | Public ] [ Static] Function 函式名([引數列表])[As 資料型別]

  [區域性變數和常數宣告]  ‘用Dim 或Static宣告

  [ 語句塊 ]

  [ 函式名=表示式 ]

  [ Exit Function]

  語句塊

  [ 函式名=表示式 ]

End Function

說明:

(1)函式名的命名規則與變數命名規則相同;函式過程必須由函式名返回一個值。

(2)如果函式體內沒有給函式名賦值,則返回對應型別的預設值,數值型返回0,字元型返回空字串。

(3)函式過程內部不得再定義Sub過程或Function過程。

函式(Function)過程的呼叫

(1)呼叫窗體中的過程:從窗體模組的外部呼叫窗體中的公有過程,必須用窗體的名字作為呼叫字首。如:Call  Form1.Examsub([實參表])

(2)呼叫標準模組中的過程:如果在應用程式中,過程名是唯一的,則呼叫時不必加模組名。如果有同名的,則在同一模組內呼叫時可以不加模組名,而在其他模組中呼叫時必須加模組名。

(3)類模組中的過程:呼叫類模組的公有過程時,要求用指向該類某一例項的變數修飾過程,即首先要宣告類的例項為物件變數,並以此變數作為過程名字首修飾詞,不可直接用類名作為字首修飾詞。如:在類模組Class1中含有過程clssub,變數Democlass是類Class1的一個例項,則呼叫clssub的方法是:

  Dim Democlass AS New Class1

  Call Democlass.clasub

引數的傳遞

(1)按值傳遞引數(定義時加ByVal):按值傳遞引數(Passed By Value)時,是將實參變數的值複製一個到臨時儲存單元中,如果在呼叫過程中改變了形參的值,不會影響實參變數本身,即實參變數保持呼叫前的值不變。

(2)按地址傳遞引數(定義時沒有修飾詞或帶關鍵字ByRef):按地址傳遞引數時,把實參變數的地址傳送給被呼叫過程,形參和實參共用記憶體的同一地址。在被呼叫過程中,形參的值一旦改變,相應實參的值也跟著改變。如果實參是一個常數或表示式,VB會按“傳值”方式來處理。

(3)陣列引數:VB允許把陣列作為形參出現在形參表中: 形引數組名() [As 資料型別]

  形引數組只能按地址傳遞引數,對應的實參也必須是陣列,且資料型別相同。呼叫過程時,把要傳遞的陣列名放在實參表中,陣列名後面不跟圓括號。在過程中不可以用Dim語句對形引數組進行宣告,否則會產生“重複宣告”的錯誤。但在使用動態陣列時,可以用ReDim語句改變形引數組的維界,重新定義陣列的大小。

(4)物件引數:VB中可以向過程傳遞物件,在形參表中,把形參變數的型別宣告為“Control”,可以向過程傳遞控制元件;若宣告為“Form”,則可向過程傳遞窗體。物件的傳遞只能按地址傳遞。