相關(guān)教程vb6visual basic實用編程_第1頁
相關(guān)教程vb6visual basic實用編程_第2頁
相關(guān)教程vb6visual basic實用編程_第3頁
相關(guān)教程vb6visual basic實用編程_第4頁
相關(guān)教程vb6visual basic實用編程_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第8章你有沒有過某種需要組裝的產(chǎn)品,比如自行車呢?買回來一看,結(jié)果卻發(fā)現(xiàn)包裝箱里沒有產(chǎn)品的組裝說明書。如果沒有完整的組裝說明書,那么產(chǎn)品的組裝將是一件令人心煩的事情(為何圖中的插槽A看上去在部件C上,而不是在部件D上呢?它是按比例尺繪制的圖形嗎?3個不同螺栓中的一個。是嗎?。想要使用一個沒有注釋的過程,樣編程員不編寫注釋的常見理由是,寫注釋太費時間。實際上,在編寫代碼時加上注釋根本不需要多少時間。有些編程員說,它們的有些過程很難注釋。通常而言,如果代碼的一個部分很難注釋,那么如果沒有注釋,其他人就更難理解你的代碼。復(fù)雜而很難注釋的代碼也許不是你會發(fā)現(xiàn)更好的解決辦法。將不同類型的注釋恰當(dāng)?shù)鼗旌显谝黄穑@是件相當(dāng)?shù)墓ぷ?,因為每個過程代表了一組用文字 用文字說碼的作這樣的注釋幾乎不能給代碼增加什么信息。實際上,如果你使用好名方法來創(chuàng)建直觀明了第8章代碼的注 的注釋,它只是對代碼本身進行了重復(fù),注釋中甚至使用了變量名。這個注釋用文字說明了代碼的機制,而不是代碼的作用或者編寫這個代碼的原因。PrivateSubcmdStartSale_ClDimintAgeAsIntegerConstc_LegalAge=intAge=‘*IfintAge>=c_LegalAgethenprocesstheIfintAge>=c_LegalAgeThenCallProcessSaleEndEnd當(dāng)你發(fā)現(xiàn)你編寫的注釋包含了變量名時,請停下來重新考慮一下這個注釋。除非你用文字說明了變量本身,或者提醒代碼的閱讀者,使他了解一個模糊變量的作用,否則你應(yīng)該停止在注釋中直接使用變量名。當(dāng)變量名用在注釋中時,該注釋也許會重復(fù)該代碼。應(yīng)該用文字說明代碼的作用,或者說明編寫代碼的原因。下面的過程與上面這個過程相同,但是在下面的代碼中,注釋正確地說明了該代碼的作用:PrivateSubDimIntAgeAsConstc_LegalAge=21intAge=txtAge.Text‘*Ifthebuyerisoflegalagetopurchase‘*processtheIfintAge>=c_LegalAgeThenCallProcessSaleEndSub 有的時候你可能需要違背好的編程原則。遇到這種情況時,請用內(nèi)部注釋來說明你在做什么和為什么要這樣做。例如,你無法編寫自己的排序例程,或者你的時間非常緊迫,因此你使用隱藏列表框控件給一組變量進行排序。你將該列表框置于一個窗體上,并將它的Sorted排序)屬性設(shè)置為rue,將它的isible(可視)屬性設(shè)置為False。然后使用列表框的AddItem來的List屬性,從列表中檢索新排序的值。這種做法顯然是的,但這是可行的。在這種情況下,必須用注釋來說明你在做什么和為什么要這樣做。下面的代碼顯示了你如何給這種進程加注釋?!?Addthenamesinthenamearraytothe‘*listbox.IthasitsSortedpropertysetto‘*soloothroughthelistitemswill‘*thevaluesinthearrayinsortedForintIndex=1ToUBound(a_strNames)Next由于VisualBasic所具有的性質(zhì),有些錯誤是不可避免的,而另一些錯誤則是絕對必要的。例如,你決定在保存新記錄之前不查看數(shù)據(jù)庫中是否已經(jīng)存在記錄(以避免創(chuàng)建副本,這樣就能更快地保存該記錄,并且,如果該記錄是個副本,就可以捕獲該錯誤。下面這個代碼顯示了這種情況。當(dāng)你估計代碼中存在錯誤并且想要捕獲它時,請用注釋來充分說明你為什么要捕獲該錯誤以及你估計這是個什么錯誤。如果可能出現(xiàn)多個錯誤,也請用注釋說明其他錯誤的情況(關(guān)于如何捕獲錯誤的詳細說明,請參見第6?!?Traptheerrorincasetheuserisattemptingtosave‘*duplicaterecord.OnErrorResumeNextdbSales.ExecutestrSQL,Constc_DuplicateRecord=‘*Ifanerroroccurred,determinewhetheritwasbecause‘*tryingtosaveaduplicateIfErr.Number<>0‘*SeewhethertheerrorwasIfErr.Number=c_DuplicateRecord‘*Theuserattemptedtosaveaduplicate ltheuserandgetMsgBox“Theitem'"&txtItem.Text&'"alreadyexists“&“inthedatabase.",GoTo‘*Thisisanunexpectederror;notifytheCallShowError(Me.Name,“ChangeCode",Err.Number,_GoToEndIf‘*Turnregularerror backOnErrorGoTo有時,一個語句可能產(chǎn)生并無大礙的錯誤。如果使用VisualBasic的老方法SetFocu,就會出現(xiàn)這種情況。這個用來將光標(biāo)放入一個特定控件的方法有著許多的用處。例如,當(dāng)用戶在對話框中的各個選項卡之間切換,以便確保顯示一個新選項卡時,它上面的第一個控件被選定,那么你就可以使用SetFocus方法。當(dāng)你核實數(shù)據(jù),將光標(biāo)放入帶有有效數(shù)據(jù)的文本框中,使用SetFocus方法。雖然在大多數(shù)應(yīng)用中SetFocus隨意使用,不過許多編程人員沒有在每個調(diào)用代碼前加上OnErrorResumeNext語句。應(yīng)該加上這個語句,原因是,如果窗體或父控件本身的圖形尚未完全畫好,那么SetFocus第8章代碼的注 失敗,并報出Error5。這個錯誤不會產(chǎn)生任何,并且在大多數(shù)情況下,完全可以忽略這個錯誤。由于這個特殊情況經(jīng)常發(fā)生,因此不必在每次出現(xiàn)這種情況時都加上注釋,但是,如果你一定要給它加注釋,可以使用下面所示的這個注釋:‘*Ignoreanyerrorsthatoccurbecausetheformisnotreadyfor‘*controltoreceivethefocus.OnErrorResumeNext‘*TurnregularerrortrapbackOnErrorGoTo給代碼加注釋的方法之一是在編寫一個過程前首先寫上注釋。如果你愿意,可以編寫完整句子的注釋或偽代碼。一旦你用注釋對代碼進行了概述,就可以在注釋之間編寫代碼。當(dāng)你編下面是個全部由注釋組成的過程外殼:PublicSubFloodFill(XAsSingle,YAs‘*Purpose:Fillanareaonthebitmapwithacolor.‘*Accepts:XandY-coordinatesonthebitmapwhere thefillshouldbegin.‘*SettheFillStyleofthepictureboxtosolidand‘*FillColortothecurrentdrawing‘*Gettheboundarycolorforthefill.Thisisthecurrent‘*atthespecified‘*UsetheExtFloodFillAPIcalltoperformafastfloodfill,‘*changtngalladjacentpixelsthathavetheboundarycolor‘*tothecurrentdrawngcolor.End上面的注釋類似一個大綱。寫完這些注釋后,你可以用必要的代碼填入該大綱。下面的代碼是個已經(jīng)編寫完成的過程,注釋之間插入了代碼。注釋并不是簡單地重復(fù)代碼,它們負責(zé)說明出現(xiàn)的情況。在這個例子中,注釋不必修改或移位,不過情況并不總是這樣。PublicSubFloodFill(XAsSingle,YAs‘*Purpose:Fillanareaonthebitmapwithacolor.‘*Accepts:XandY-coordinatesonthebitmapwhere thefillshouldbegin.OnErrorGoToDimlngResultAsDimlngBoundaryColorAs‘*SettheFillStyleofthepictureboxtosolidand‘*theFillColortothecurrentdrawingcolor.picPreview.FillStyle=vbFSSolidpicPreview.FillColor=m_lngDrawColor‘*Gettheboundarycolorforthefill.Thisisthecurrent‘*atthespecifiedlngBoundaryColor=picPreview.POINT(X,‘*UsetheExtFloodFillAPIcalltoperformafastfloodfll,‘*changngalladjacentpixelsthathavetheboundarycolor‘*tothecurrentdrawingcolor.lngResult=ExtFloodFill(picPreview.hdc,X,Y,ExitMsgBox“Error:“&Err.Number&vbCrLf&EndSub有些編程人員將格式化樣式用于注釋,這種做法雖能使注釋更加引人注目,但是卻妨礙了開發(fā)進程。有些人對注釋格式非常偏愛。這種對格式的偏愛的常見例子是使用格式化字符在注釋的前后加上一行。我將這些注釋行稱為純色字符注釋行。例如,星號(*)是最常用的格式化字符之一,也是喜歡使用的字符,人們常常過多地使用這個字符。請看下面代碼段中的注釋:‘*Retrievethelengthsofthelegsoftherectangle.sngXLeg=Abs(rectBound.Right-rectBound.Left)sngYLeg=Abs(rectBound.Bottom-rectBound.Top)‘*Makesuretherectangleisavalidrectangle.If(sngXLeg=0)or(sngYLeg=0)Then‘*Thisisnotavalidrectangle,sogetout.GoToPROC_EXITEnd‘*Populatethecirclestructurewiththedatathatdefines‘*thecircle.WithudtCircle.Aspect=Abs(sngYLeg/.xCenter=rectBound.Left+(rectBound.Right-rectBound.Left)/.yCenter=rectBound.Top+(rectBound.Bottom-rectBound.Top)/‘*DeterminetheradiususingthelongerlegoftheIfsngXLeg>sngYLeg.Radius=sngXLeg/第8章代碼的注 .Radius=sngYLeg/EndEnd這么多的星號一定會使你頭疼。如果將它設(shè)置為VisualBasic的默認(rèn)值,你的代碼窗口中就使注釋帶上顏色是我喜歡的VisualBasic特性之一。這個特性用起來是如此簡單,以至于顯得有些蠢但是,果曾經(jīng)使用 Access2.0給復(fù)雜的應(yīng)用程序進行過編碼,而Access2.0沒有配備彩色編碼的編輯器,那么你就會懂得我說的話不無道理。我寧愿停止編程,也不愿放棄彩色編碼編輯器。當(dāng)掃描一個過程時,能夠區(qū)分綠色文本的注釋,這是非常有用的但是,如果你編寫了許多不必要的注釋行,那么有用的綠色文本與總體綠色文本之間的比例就會降低。(Graphics1992年)一書中,·特(Edwardufte)形出的網(wǎng)格線和詳細的標(biāo)注等元素。塔夫特講述了必須使數(shù)據(jù)油墨與總油墨之間保持較高的比率。你可以用大致相同的方法來看待注釋的問題。有時你可以使用純色字符注釋行來引起人們對注釋的注意,不過在這種情況下,純色字符注釋行應(yīng)該于主要注釋,而不是次要注釋。在下面代碼中的純色字符注釋行仍然用得太多,不過它們使讀者注意到了過程的主要元素,因此至少從這方面來講,這還是有意義的?!?Retrievethelengthsofthelegsoftherectangle.sngXLeg=Abs(rectBound.Right-rectBound.Left)sngYLeg=Abs(rectBound.Bottom-rectBound.Top)‘*Makesuretherectangleisavalidrectangle.If(sngXLeg=0)or(sngYLeg=0)Then‘*Thisisnotavalidrectangle,sogetGoToEnd‘*Populatethecirclestructurewiththedatathatdefines‘*thecircle.WithudtCircle.Aspect=Abs(sngYLeg/.xCenter=rectBound.Left+(rectBound.Right-rectBound.Left)/.yCenter=rectBound.Top+(rectBound.Bottom-rectBound.Top)/‘*DeterminetheradiususingthelongerlegoftheIfsngXLeg>sngYLeg.Radius=sngXLeg/.Radius=sngYLeg/EndWith純色字符注釋行可能帶來另一些問題。比如,純色字符注釋行應(yīng)該包含多少個字符呢?毫無疑問,如果所有注釋行都包含相同數(shù)量的字符,這樣看上去可能更好些,但是,如果它們用很快就會感到沉悶乏味。另外,如果用人工鍵入每個注釋行,就會浪費時間。如果你不想分別鍵入每一行,唯一的辦法是使用拷貝和粘貼每一行的方法,這也很麻煩。你也可以使用代碼格式化的輔助工具。比純色注釋行更糟糕的是位于注釋右邊的格式化字符,它們形成了注釋塊或注釋框。你可能見過這種注釋,并且可能寫過一些這樣的注釋。如果你曾經(jīng)過帶有這種注釋的代碼,那么完全有理由放棄這樣的注釋。請看下面這個注釋:‘*Iftheusercllckstheleftbutton,getthecoloratthe*‘*currentcoordnatesandassignitastheForeColor.If ‘*therightbuttonhasbeenclicked,getthecolorunder ‘*thepointerandassignitastheBackColor. 當(dāng)然,右邊的星號看起來很好,但是它們給注釋增加了任何信息嗎?實際上這會給編寫或我鍵入下一個單詞the,結(jié)果發(fā)現(xiàn)它與最后一個星號了。這時我必須作出決定,考慮使用給第一行注釋的頭上再加一個星號,并且在第二行上的最后一個星號前面再加上一個空格,使之與注釋的頭重新對齊。當(dāng)我決定將單詞the放在下一行并且繼續(xù)鍵入之后,對于完全相同的單詞,我遇到了完全一樣的問題,這真是奇怪極了。我使原本已經(jīng)乏味的過程變得更加枯燥了。如果編寫注釋總是如此麻煩,我就可以理解為什么有些人根本不愿意給代碼寫注釋。雖然在注釋的前后使用格式化行可以引起人們注意代碼中的主要,但是使用行尾格式化字符來形成注釋塊卻根本沒有必要。它只會增加不必要的額外工作量。在過去的Basic語言中,你可以在行首使用單詞REM(即Remark的縮寫)來指明這是個注釋。VisualBasic仍然支持使用REM,不過你不應(yīng)該使用它。如果使用REM,會使注釋變得雜亂,形成過多的綠色空間,增加不必要的鍵入操作,還會讓人搞不清附加的代碼格式,并且通REM,你可以使用撇號(,或者像我這樣使用星號‘*Ifthisisanewaccount,setupthenecessary‘*defaultinformation.Iftheaccountexists,ce‘*therecordineditmode.第8章代碼的注 IfblnAddNewEnd人們常常想要知道某個注釋是哪個編程員寫的。雖然你可以將修改信息存放在過程注釋的標(biāo)題中,但是這很麻煩,并且在不同的編程員對同一過程的不同代碼段進行修改時,這也沒有什么用處。若要標(biāo)識注釋的作者,最好的辦法是為每個編程員賦予一個獨一無二的格式化字符,并讓該編程員在每個注釋字符()后面加上賦予他的格式化字符。一旦你形成了這種做法的習(xí)慣,它就會成為你的第二天性。這種方法只能用于編程人員較少的部門。使用這種方法時,你應(yīng)該在全局模塊中建立一個用戶及其格式化字符的鍵碼。將注釋作者的聯(lián)系信息存放在那里也是個好注意?!?Purpose:Createtabstopsinalist‘*Accepts:lstControl-thelistboxinwhichtosetthetab lngTabs-thenumberoftabstopsto strStops-astringcontainingthe positionsofthetabOnErrorGoTo‘$Purpose:Createtabstopsinalist‘$Accepts:lstControl-thelistboxinwhichtosetthetab lngTabs-thenumberoftabstopsto strStops-astringcontainingthe positionsofthetabOnErrorGoTo你還應(yīng)該將一個特殊字符用于臨時注釋或附注。當(dāng)你對代碼進行調(diào)試時,對該代碼的某個部分進行評注,或者以后你需要編寫的代碼時,就可以使用臨時注釋。在這種情況下,應(yīng)該用一個格式化字符或者單詞將注釋標(biāo)記為臨時注釋。統(tǒng)一使用注釋標(biāo)識符,就可以方便地搜索項目中的臨時注釋。究竟使用什么字符或單詞,這完全取決于你,但是修改代碼的每個人都必須使用相同的格式?!?SECURITYSTILLNEEDSTOBEstrSQL=“DELETE*FROMtblContacts;"dbContacts.ExecutestrSQL,dbFailOnError‘NOTE:SECURITYSTILLNEEDSTOBEstrSQL=“DELETE*FROM注釋是供人閱讀的,而不是讓計算機閱讀的。應(yīng)該使注釋便于人們理解。請記住,難以理解的注釋等于根本沒有注釋。另外,我在本章中一再說,注釋屬于文字信息。正如應(yīng)用程序的文字信息必須清楚地書寫一樣,代碼注釋也應(yīng)該遵循好的書寫規(guī)則。色的注釋能夠說明總的程序流和某個過程的作用,即使與代碼本開,也能夠說明問題。'*DoesuserhaveMsgBox“Youdonothavesecurityrightstodeleteaccounts.",_GoToEnd‘*IfMsgBox(“Deletethisaccount?",vbYesNoOrvbCritical)=vbNoThenGoToPROC_EXITEnd'*Iftheuserdoesn'thavesecurityrightstodeletean'*saysoandgetMsgBox“Youdonothavesecurityrightstodeleteaccounts.",_vbInformatonGoToEnd‘*Askforconfirmationbeforedeleting,andgetoutifthe‘*doesn’twanttoIfMsgBox(“Deletethisaccount?",vbYesNoOrvbCritical)=vbNoThenGoToPROC_EXITEnd許多。如果必須對詞匯縮寫,必須做到非常統(tǒng)一。比如說,有一個人才資源應(yīng)用軟件,用于‘*Enablethedel 第第8章代碼的注 ‘*EnabletheDelete (3)將整個單詞大寫,以突出它們的重要性。若要使人們注意注釋中的一個或多個單詞,請全部使用大寫字母。你無法使用黑體或斜體字母,因為VisualBasicPrivateSub‘*Purpose:Updatethedatabase‘*DONOTUSEERROR !Lettheerrorscascadeup‘*callEnd注釋通常位于它們要說明的代碼的前面。為了從視覺上突出注釋與它的代碼之間的關(guān)系,請將注釋縮進,使之與代碼處于同一個層次上。有些編程員使代碼行比前面的注釋縮進一個制表位,但是如果要從采用這種縮進方式的過程中刪除注釋,那么很快你就會發(fā)現(xiàn)這種縮進不能正確反映過程的結(jié)構(gòu)。代碼不是注釋的附屬品,它與注釋是共存的關(guān)系。每個過程都應(yīng)該有一個注釋標(biāo)頭。過程的注釋標(biāo)頭可以包含多個文字項,比如輸入?yún)?shù)、返回值、原始作者、最后編輯該過程的程序員、上次修改日期、 信息,甚至包括程序員喜歡的顏。在你的編輯環(huán)境中,必須規(guī)定過程注釋標(biāo)頭的重點內(nèi)容是什么。注釋標(biāo)頭至少應(yīng)該包含過程的作用。應(yīng)該簡明扼要地說明過程的作用。如果某個過程需要加以透徹的解釋,那么請加上全面的注釋,但要避免冗長的文字表述,比如“這個函數(shù)的作用是??”,這就可以了。作用PrivateFunctionShowPrintDialog()As‘*Purpose:DsythePrintdialogboxandgetprintoptionsfromtheuser.End你應(yīng)該考慮添加給過程注釋標(biāo)頭的另外幾個元素是過程的輸入(參數(shù))和輸出(返回值。As‘*Purpose:ConvertastandardSQLstatementintoa selectionformulaforusewiththe print‘*Accepts:strSQL–avalidSQL‘*Returns:ACrystalselectionformulathatis tothepassed-inSQLEnd在過程注釋標(biāo)頭中加上作用、可接受參數(shù)和返回值等注釋后,你就創(chuàng)建出一個更加容易理解的過程。編寫可接受參數(shù)的注釋時,務(wù)必要說明一些特殊的考慮和假設(shè)。例如,如果過程要對參數(shù)進行格式化,或者要求參數(shù)處于某個范圍的值中間,那么應(yīng)該在注釋中加上這些信息。最后,如果一個過程直接修改了任何全局性數(shù)據(jù),或者更改了由某個 項傳遞的參數(shù)值,就應(yīng)將這個行為特性添加到過程的注釋標(biāo)頭中。過程的所有注釋標(biāo)頭都應(yīng)該采用相同的格式化方法,每種信息應(yīng)該與其他信息明確區(qū)分開來。上面這個注釋標(biāo)頭采用了一種非常好的格式,代碼閱讀者可以非常方便地掃描注釋標(biāo)頭的各個組成部分,找出他需要的信息。下面顯示的格式是個外殼,里面不包含具體信息。這種格式是本書中使用的統(tǒng)一格式:‘*Purpose:xxx‘*Accepts:yyy‘*Returns:注釋的每個標(biāo)頭(Purpose、Accepts或Returns)后隨兩個空格(ab可以移到正確的位置,一個冒號,接著又是兩個空格,然后是標(biāo)頭的文本。如果注釋需要多行才能放下,應(yīng)該將后續(xù)行縮進到冒號后面,再開始注釋文本,如下所示:PublicFunctionConvertSQLtoCrystalFormat(strSQLAsString)_AsString‘*Purpose:ConvertastandardSQLstatementintoa selectionformulaforusewiththe print‘*Accepts:strSQL–avalidSQL‘*Returns:ACrystalselectionformulatiatis tothepassed-inSQLEnd過程的原作者。當(dāng)你需要詢問編程員關(guān)于過程的某個問題,或者想對某些特別的代碼作者投擲電子郵件時,這個信息非常有用。當(dāng)你想在注釋中說明作者時,請使用標(biāo)頭CreatedBy。上次修改過程的日期和過程的修改人。這些信息很難保持為 信息,因此,如果這些信息對你的公司并不重要,可以不管它。例如,如果編程員更改了一個變量名,那么他必須更新上次修改日期和上次修改的名字。有時修改日期和名字比修改代碼還要費事但是,如果這些信息對你的操作至關(guān)重要,那么請盡一切可能將它們放入注釋標(biāo)頭中用注釋來說明上次修改代碼的人時,請使用LastModifiedBy這個標(biāo)頭。當(dāng)你注釋過程的上次修改日期時,請用標(biāo)頭LastModified。對過程的修改。如果你真的是個非常嚴(yán)謹(jǐn)?shù)木幊虇T,可以在過程注釋標(biāo)頭中保存一個修改歷史記錄。這個信息包括每次修改的日期、關(guān)于修改內(nèi)容的描述等。在多個編程員的開發(fā)環(huán)境中,還必須保留修改人的名字。保留這些修改信息需要花費相當(dāng)多的精力,此在采用這種方案前, 衡利弊。第8章代碼的注 信息。如果你通過銷售源代碼或者將代碼發(fā)送到Internet上,以便將你的代碼銷售給你自己公司之外的編程人員使用,那么你可能想將 信息納入每個過程或每個程序模塊的Declarations部分。你必須確定這種解決辦法的價值,因為當(dāng)其他人將代碼粘貼到他們的應(yīng)用程序中去時,他們能夠很容易刪除這些信息。另外,如果有人將代碼編譯后放入一個應(yīng)用程序,那么將無人會看到 信息。盡管如此,如果 信息對你很重要請將 信息放入過程注釋標(biāo)頭或每個模塊的Declaration分中。EvenEven數(shù)進行注釋。你也不需要對包含模塊級變量的簡單屬性過程進行注釋。在本書的某些FunctionIsFormLoaded(strFormNameAsString)As‘*Thisfunctionacceptsaformnameand‘*TrueiftheformisloadedandFalseifitisEndFunctionIsFormLoaded(strFormNameAsString)As‘*Purpose:DeterminewhetheraspecifiedformisEndFunctionIsFormLoaded(strFormNameAsString)As‘*Purpose:Determinewhetheraspecifiedformis‘*Accepts:ThenameofaEndFunctionIsFormLoaded(strFormNameAsString)As‘*Purpose:Determinewhetheraspecifiedformis‘*Accepts:EndFunctionIsFormLoaded(strFormNameAsString)As‘*Purpose:Determinewhetheraspecofiedformis‘*Accepts:strFormName-thenameofaEndFunctionIsFormLoaded(strFormNameAsString)As‘*Purpose:Determinewhetheraspecifiedformis‘*Accepts:strFormName-thenameofa‘*Returns:TrueorEndFunctionIsFormLoaded(strFormNameAsString)As‘*Purpose:Determinewhetheraspecifiedformis‘*Accepts:strFormName-thenameofa‘*Returns:WhetherornottheformisEndFunctionIsFormLoaded(strFormNameAsString)As‘*Purpose:Determinewhetheraspecifiedformis‘*Accepts:strFormName-thenameofa‘*Returns:Trueiftheformisloaded,FalseifEnd注釋的最常見類型通常稱為內(nèi)部注釋。雖然過程注釋標(biāo)頭可以說明過程的基本情況,但是內(nèi)部注釋可以用來說碼本身的情況。過程注釋標(biāo)頭并不描述代碼的實現(xiàn)細節(jié),因為這些實現(xiàn)細節(jié)是不斷變化的,并且它們增加了標(biāo)頭不必要的復(fù)雜程度。過程的實現(xiàn)說明位于過程本身的內(nèi)部。讓我們看一看下面這個過程,它用于確定是否加載一個窗體:‘*Purpose:Determinewhetheraspecifiedformis‘*Accepts:strFormName-thenameofa‘*Returns:Trueiftheformisloaded,FalseifOnErrorGoToDimintoumterAs‘*Sincereferringtoaformloadstheform,theproper‘*waytodeterminewhethertheformisloadedistoloop‘*throughtheformscollection,whichcontainsonly‘*loadedForintCounter=0ToForms.Count–‘*Ifthecurrentformisthespecified‘*returnTrueandgetIfForms(ntCounter).Name=strFormNameIsFormLoaded=TrueGoToPROC_EXITEndNext請在每個If語句的前面加上注釋。If語句用于作出對程序執(zhí)行生影響的判斷。請在IfCommand$<>""intLocation=InStr(Command$,IfintLocation=0‘*Usethedefaultinifile,assumingit’sonthe‘*strINIFile=App.Path&‘*ExtractthenameofthedesgnatedinistrINIFile=Mid$(Command$,Len(strSearchString)+IfDir$(strINIFile)=""strINIFile=App.Path&EndIfEnd'*LookforcommandlineIfCommand$<>""intLocation=InStr(Command$,‘*Ifaniniparameterasbeenfound,attempttouseIfintLocation=0‘*Usethedefaultinifile,assumngit’sintheappli‘*strINIFile=App.Path&‘*ExtractthenameofthedesignatedinistrINIFile=Mid$(Command$,Len(strSearchString)+‘*Ifthespecifiedfileisnotfound,‘*thedefaultiniIfDir$(strINIFile)=""strINIFile=App.Path&EndIfEnd在每個SelectCase語句前面加上注釋。與If語句一樣,SelectCase語句用于評估對程序執(zhí)行生影響的表達式。它們常常比If語句更加復(fù)雜。你應(yīng)該對SelectCase語句加上透徹的PrivateSubtxtSearch_KeyDown(KeyCodeAsInteger,ShiftAsSelectCaseCaseIs=‘*Moveforwardinthelistthenumberofvisiblerows.datPhones.Recordset.MovegrdPhones.VisibleRowsCaseIs=‘*Movebackwardinthelistthenumberofvisiblerows.datPhones.Recordset.Move-grdPhones.VisibleRowsEndSubPrivateSubtxtSearch_KeyDown(KeyCodeAsInteger,ShiftAs‘*Iftheuserpress

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論