4. °Ñ ¼Æ

V isual Basicªº°Ñ¼Æ¥i¥H³Q«Å§i¬°¥²­n©Ê°Ñ¼Æ©Î¬O¿ï¾Ü©Ê°Ñ¼Æ¡A°Ñ¼Æªº¸ê®Æ«¬§O¥i³Q­­©w¬°¤@ºØ¯S©wªº«¬§O¡A¤]¥i¥H¤£­­¥ô¦ó«¬§O¡A¥]¬A¨Ï¥ÎªÌ¦Û­q«¬§O¡B°}¦C©M¦CÁ|¶°¦X¡]Enumeration¡A²ºÙEnum¡^µ¥µ¥¡C

¥»³¹ªº­«ÂI¥]¬A¨ã¦W¤Þ¼Æ¡]Named Argument¡^¡B¿ï¾Ü©Ê°Ñ¼Æ¥H¤Î°Ñ¼Æªº¸ê®Æ«¬§Oµ¥½ÒÃD¡C


ª`·N¡G

¦b¥»³¹¤¤¡A§Ú­Ì¥Î¤Þ¼Æ¡]Argument¡^¥Nªí­n¶Çµ¹µ{§Çªº±`¼Æ¡BÅܼƩιBºâ¦¡¡A¥Î°Ñ¼Æ¡]Parameter¡^¨Ó¥Nªí¦bµ{§Ç¤¤ªº§½³¡ÅܼơA³o¨Ç§½³¡ÅܼƥD­n¥Î¨Ó±µ¦¬¤Þ¼Æ¶Ç¨Óªº­È¡C


¦p¦ó¨Ï¥Î¨ã¦W¤Þ¼Æ¡H
¡@

¦bVisual Basic ¡]¨Æ¹ê¤W¥i¥H»¡¦b¤j³¡¤À»y¨¥¡^¡A³Ì±`¨£ªº¤Þ¼Æ¨Ï¥Î¤è¦¡¬O«ö·Ó¬J©wªº¤Þ¼Æ¦ì¸m¨Ó±Æ¦C¤Þ¼Æªº¶¶§Ç¡AÅý³Q©I¥sªºµ{§Ç¨Ì¾Ú¤Þ¼Æªº¬Û¹ï¦ì¸m¤@¤@¥H¨ú±o¶Ç¨Óªº­È¡C¦pªG¬Y­Óµ{§Ç¨Ì§Ç»Ý­n¤T­Ó°Ñ¼ÆsngRed¡BsngGreen¡BsngBlue¡A¨º»ò¨C¦¸©I¥s³o­Óµ{§Ç®É¡A¤@©w­n¶Ç¤J¤T­Ó¤Þ¼Æ¡Aµ{§Ç·|§â²Ä¤@­Ó¤Þ¼Æ­È¦s¤JsngRed¡A²Ä¤G­Ó¤Þ¼Æ­È¦s¤JsngGreen¡A²Ä¤T­Ó¤Þ¼Æ­È¦s¤JsngBlue¡C

¤U­±ªº¨Ò¤l«h¤£¬O¥Î³oºØ¤è¦¡¨Ï¥Î¤Þ¼Æ¡C§Ú­Ì§â¨ã¦W¤Þ¼Æ¡]Named Argument¡^¶Çµ¹³Q©I¥sªºµ{§Ç¡A³o¸Ìªº¤Þ¼Æ¶¶§Ç©M«e­±ªº¤Þ¼Æ¶¶§Ç¤£¤@¼Ë¡C

Option Explicit

Private Sub FormColor(sngRed As Single, sngGreen As Single, _ 
    sngBlue As Single)
    BackColor = RGB(sngRed * 256, sngGreen * 256, sngBlue * 256)
End Sub 
Private Sub Form_Click()
    FormColor sngBlue:=0, sngGreen:=0.5, sngRed:=1    'Brown
End Sub

¨ã¦W¤Þ¼Æ³Ì¤jªº¥Î³B¨Ã¤£¬OÅý§Ú­Ì¦b¶Ç»¼¤Þ¼Æ®É¥i¥H¥ô·N§ïÅܤ޼ƪº¦ì¸m¡A¦Ó¬O¥i¥HÅý§Ú­Ì¥u¶Ç¤Þ¼Æ¦C¤¤ªº¬Y´X­Ó¤Þ¼Æ¡A¦Ó¬Ù²¤±¼¨ä¥Lªº¤Þ¼Æ¡C·íµ{§Çªº¤Þ¼Æ¦C«Üªøªº®É­Ô¡A³o­Ó¯S©Ê·|Åã±o¯S§O¦³¥Î¡A¦ý­n¹B¥Î³o­Ó¯S©Ê¡A§Ú­Ì¥²¶·¦bµ{§Ç©w¸qªº³¡¥÷§â¬Y¨Ç©Î¥þ³¡°Ñ¼Æ«Å§i¬°Optional¡C

¦p¦ó¨Ï¥ÎOptional°Ñ¼Æ¡H
¡@

§Ú­Ìª½±µ¥Î¤U­±³o­Ó¨Ò¤l¨Ó§i¶D§A¦p¦ó©w¸q¤Î¨Ï¥ÎOptional°Ñ¼Æ¡G

Option Explicit

Private Sub FormColor( _
    Optional sngRed = 0, _
    Optional sngGreen = 0, _
    Optional sngBlue = 0 _
)
    BackColor = RGB(sngRed * 256, sngGreen * 256, sngBlue * 256)

End Sub
Private Sub Form_Click()
    FormColor sngGreen:=0.5   'Medium green
End Sub

¦b©w¸q¬Y­Óµ{§Çªº°Ñ¼Æ¦C®É¡A¥u­n§âOptionalÃöÁä¦r¥[¦b°Ñ¼Æ«e­±¡A´N¥i¥H¿ï¾Ü©Ê¦a¶Ç¤J³¡¥÷©Î¥þ³¡¤Þ¼Æµ¹µ{§Ç¡A¦ý¬O­n°O±o¡A¦b©I¥sµ{§Ç®É¡A¥²¶·«ü©ú­n¶Çµ¹­þ­Ó°Ñ¼Æ¡C¦b¤W¨Ò¤¤§Ú­Ì¥u¶Ç­Èµ¹sngGreen°Ñ¼Æ¡A¦Ü©ó¨ä¥L³Q¬Ù²¤ªº°Ñ¼Æ¡Aµ{§Ç·|¦Û°Ê¨Ï¥Î¹w³]­È0¡C

½Ðª`·N¡AVisual Basic 6ªº°Ñ¼Æ¹w³]­È¬O³]©w¦bµ{§Çªº°Ñ¼Æ¦CùØ¡A¦Ó¦bVisual Basic 4¤¤¡A¥²¶·¥ÎIsMissing¨ç¦¡¨ÓÀˬd¬Y­ÓOptional°Ñ¼Æ¡AµM«á¦A³]©w¨ä¹w³]­È¡C¥t¥~¡AVisual Basic 6²{¦b¥i¥HÅý§Ú­Ì©ú½T¦a«Å§iOptional°Ñ¼Æªº¸ê®Æ«¬§O¡C¦b«Å§iOptional°Ñ¼Æªº¸ê®Æ«¬§O®É¡A°£¤FVariant¤§¥~¡A¨ä¥Lªº°ò¥»¸ê®Æ«¬§O¤]³£¥i¥H¨Ï¥Î¡C¥t¥~­È±oª`·N¬O¡A¤@¥¹©w¸q¬Y­Ó°Ñ¼Æ¬°Optional°Ñ¼Æ¤§«á¡A¦b¥¦«á­±°Ñ¼Æ³£¥²¶·©w¸q¦¨Optional¡C


°Ñ¦Ò¸ê®Æ¡G

 ¦b²Ä¤T¤Q³¹"µo®i¤u¨ã" ¸ÌªºMetricÀ³¥Îµ{¦¡¬O¤@­Ó¨Ï¥ÎOptional°Ñ¼Æªº½d¨Ò¡C


¦p¦ó¶Ç»¼°Ñ¼Æ°}¦C¡H
¡@

¦b¬Y­Óµ{§Çªº°Ñ¼Æ¦C¤¤¡A¦pªG§A§â³Ì«á¤@­Ó°Ñ¼Æ¥ÎParamArray«Å§i¬°Variant°}¦C¡A´N¥i¥H¶Ç»¼¥ô·N¼Æ¥Øªº¤Þ¼Æµ¹³o­Óµ{§Ç¡A³oºØ°Ñ¼ÆºÙ¬°°Ñ¼Æ°}¦C¡]Parameter Array¡^¡C¤U­±³o­Ó¨Ò¤l´N¬O¨Ï¥Î°Ñ¼Æ°}¦C¡G

Option Explicit

Private Function MakeVerticalList(ParamArray vntN()) As String 
   Dim strA As String, i As Integer 
   For i = LBound(vntN) To UBound(vntN)
       strA = strA + vbCrLf + CStr(vntN(i))
    Next i
    MakeVerticalList = strA
End Function

Private Sub Form_Click()
    Dim intA As Integer
    Dim sngB As Single
    Dim strC As String
    intA = 123
    sngB = 3.1416
    strC = "This is a test."
    Print MakeVerticalList(intA, sngB, strC)
    Print
    Print MakeVerticalList("This", "time", "we'll", "pass five", _
        "string arguments.")
End Sub

§Ú­Ì©I¥s¤FMakeVerticalListµ{§Ç¨â¦¸¡A²Ä¤@¦¸¥Î¤F¤T­Ó¤£¦P«¬§Oªº¤Þ¼Æ¡A²Ä¤G¦¸¥Î¤F¤­­Ó¦r¦ê¤Þ¼Æ¡C¹Ï4-1Åã¥Ü¤Fµ{¦¡ªº¿é¥Xµ²ªG¡C


¡@

 ¹Ï4-1 MakeVerticalListµ{§Çªº¿é¥Xµ²ªG

¦p¦ó¥Î¦P¤@­Ó°Ñ¼Æ¶Ç»¼¥ô·N«¬§Oªº¤Þ¼Æ¡H
¡@

VariantÅܼƥi¥H¦s©ñ¥ô·N«¬§Oªº¸ê®Æ¡A³o­Ó¯S©ÊÅý§Ú­Ì¥i¥H¶Ç»¼¤£¦P«¬§Oªº¤Þ¼Æµ¹µ{§Ç¡A¥u­n°O±o¦b«Å§i°Ñ¼Æ«¬§O®É¥ÎVariant ¡]©Î§¹¥þ¤£­n¥Î«¬§O«Å§i¡A¨t²Î·|¹w³]³o°Ñ¼Æ¬°Variant¡^¡C¨Ò¦p¡A¦b¤U­±ªº¨Ò¤l¸Ì¡A§Ú­Ì§â¾ã¼Æ¡B¦r¦ê©M°}¦C³£¶Çµ¹¤FVariantTestµ{§Ç¡C

Option Explicit

Private Sub VariantTest(vntV)
    Print TypeName(vntV)
End Sub

Private Sub Form_Click()
    Dim dblA(3, 4, 5, 6, 7) As Double
    VariantTest 123
    VariantTest "This is a test string."
    VariantTest dblA
End Sub

µ{§ÇVariantTest°ß¤@°Ñ¼ÆvntVªº¸ê®Æ«¬§O¬OVariant¡A¦]¦¹¥¦±µ¨ü¥ô¦ó«¬§Oªº¤Þ¼Æ¡C¹Ï4-2Åã¥Üªº¬O°õ¦æªºµ²ªG¡C


¡@

 ¹Ï4-2 ¨Ï¥ÎVariant°Ñ¼Æªºµ{§Çªº¿é¥Xµ²ªG

¦p¦ó¦b°Ñ¼Æ¦C¤¤¨Ï¥Î¦CÁ|¶°¦X?
¡@

¨Ï¥Î¦CÁ|¶°¦X¡]Enum¡^¥i¥H­­©w°Ñ¼Æ©Ò¯à±µ¨üªº­È¡CEnum¥Î¤@²Õ³Q©R¦Wªº¤¸¯À¨Ó¥Nªí·Q­n³]©wªº­È¡A´N¹³ConstÃöÁä¦r¤@¼Ë¡A¦ý¬OEnumªº¦WºÙ¥i¥H§@¬°µ{§Ç¤¤°Ñ¼Æªº«¬§O¡C¦b¼¶¼gµ{¦¡½X®É¡A¦pªG§A¥´¤J¤F¨Ï¥Î¬Y­ÓEnum°Ñ¼Æªºµ{§Ç¦WºÙ¡AVisual Basicªº¦Û°Ê¦C¥X¦¨­û¥\¯à¡]Auto List Members¡^·|§â³o­ÓEnum¤¤©Ò¦³ªº¦¨­û¦Û°ÊÅã¥Ü¦b¤@­Ó§ÖÅãµøµ¡¤¤¡A²¤Æ¼g½Xªº¤u§@¡C½Ð¥Î¤U­±³o­Óµ{¦¡¸Õ¸Õ¦Û°Ê¦C¥X¦¨­û¥\¯à¹B§@ªº±¡§Î¡G

Enum Number
    Zero
    One
    Two
    Three
End Enum

Sub ShowNumber(Value As Number)
    MsgBox Value
End Sub

Sub Form_Load()
    ShowNumber One
End Sub

·í§A¦bForm_Loadµ{§ÇùØ¥´¤JShowNumber«á¡AVisual Basic·|¦Û°ÊÅã¥Ü¤@­Ó§tNumber¦¨­ûªº²M³æ¡A¦pªG³o®É§AÂI¿ï¨ä¤¤¤@­Ó¦¨­û¡AVisual Basic´N·|§â³QÂI¿ïªº¦¨­û¶ñ¤J¤Þ¼Æ¦C¤¤¡C¦pªG¦b¤@­Ó¨Ï¥ÎªÌ±±¨î¶µ¡]User Control¡^ªºÄݩʵ{§Ç¸Ì¡]¨Ò¦pLet¡^¨Ï¥Î¤@­ÓEnum¨Ó«Å§i¨ä°Ñ¼Æ¦C¡AVisual Basic¤]´£¨Ñ¤FÃþ¦ü¦Û°Ê¦C¥X¦¨­ûªº¥\¯à¡A«K§Q§A¼¶¼gµ{¦¡¡C½Ð¬Ý¤U­±³o­Ó¨Ò¤l¡G

Enum Number
    Zero
    One
    Two
End Enum

Dim mValue As Number
Property Get Value() As Number
    Value = mValue
End Property

Property Let Value(Setting As Number)
    mValue = Setting
End Property

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    mValue = PropBag.ReadProperty("Value", One)
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
    PropBag.WriteProperty "Value", mValue, One
End Sub

ReadProperties©MWriteProperties¨Æ¥óµ{§Ç¥Î¨ÓºûÅ@Äݩʵøµ¡¤¤ValueÄݩʪº³]©w­È¡A·í§A¦bÄݩʵøµ¡¤¤³]©wValueÄݩʮɡA§A´N¥i¥H¬Ý¨ì¦bNumber¸Ìªº¦¨­û¡GZero¡BOne¡BTwo¡A¦p¹Ï4-3©Ò¥Ü¡C


¡@

 ¹Ï4-3 ¦bÄݩʵøµ¡¤¤¦C¥X¦CÁ|¶°¦XNumberªº¦¨­û

³Ì«á¡A§Ú­Ì­n§i¶D§A¦³¨â«h¦³ÃöEnumªº¸ê°T¡CEnum·|§â¯BÂI¼Æ¦Û°Ê±j¨îÂà´«¬°ªø¾ã¼Æ¡F¦pªG§A¶Ç¤J0.9µ¹«e¤@­Ó¨Ò¤lªºShowNumberµ{§Ç¡A«h¨äÅã¥Üªºµ²ªG¬O1¡C¨ä¦¸¡AEnum¨Ã¤£´£¨Ñ¥ô¦óÀˬd¢w§Y¨Ï¤£¦Xªkªº³]©w­È¤]·|³Q±µ¨ü¡A§A¥²¶·¦Û¤v¼¶¼gµ{¦¡½X¨ÓÀˬd¶Ç¤Jªº¸ê®Æ¬O§_¦Xªk¡C