一下vbnew6new在設(shè)計一個規(guī)模較大、復(fù)雜程度較高的程序時往往根據(jù)需要按功能將_第1頁
一下vbnew6new在設(shè)計一個規(guī)模較大、復(fù)雜程度較高的程序時往往根據(jù)需要按功能將_第2頁
一下vbnew6new在設(shè)計一個規(guī)模較大、復(fù)雜程度較高的程序時往往根據(jù)需要按功能將_第3頁
一下vbnew6new在設(shè)計一個規(guī)模較大、復(fù)雜程度較高的程序時往往根據(jù)需要按功能將_第4頁
一下vbnew6new在設(shè)計一個規(guī)模較大、復(fù)雜程度較高的程序時往往根據(jù)需要按功能將_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

6可以簡化程序設(shè)計任務(wù)。VisualBasic把這種邏輯部件稱為過程。VisualBasic中使用的過程分為子程序過程(SubProcedure)、函數(shù)過程(FunctionProcedure)和屬性過程(PropertyProcedure)三種。其中:SubFunctionProperty過程可以返回和設(shè)置窗體、標準模塊以及類模塊的屬性值,也SubFunctionSub在VisualBasic中有兩種Sub過程,即過程和通用過程 過VisualBasic程序是驅(qū)動的,所謂就是能被對象(窗體和控件)所按程序指定的方式作用把這些對發(fā)生的進行處理的代碼放在過程中這樣的過程稱為過程在VisualBasic中當對象對一個的發(fā)生作出認定時便能自動地利用和該對應(yīng)的名稱引導(dǎo)過程因為這個名稱建立了對象和代碼之間的聯(lián)系可以說過程是窗體和控件的附屬物過程分為窗體過程和控件過程兩種。定義過窗體過程的一般形式是PrivateSubForm_名(〔參數(shù)列表〕Eud窗體過程名由詞Form、下劃線和名結(jié)合而如果使用多文檔界面(MDI)窗體,則由詞“MDIForm”、下劃線和名構(gòu)成窗件過程名;每個窗體過程名前都有一個Private的前這表示該過程不能在它自己的窗體模塊之外被調(diào)用。它的使用范圍完全由VisualBasic所提供的具體本身所決定,用戶不可以隨意下的Load過程來實現(xiàn)PrivateSubForm_LoadCallMove((Screen.Width-Width)/2,(Screen.Heigh-EndScreen.WidthScreen.Heigh分別是屏幕對象的寬度和高度屬性;WidthHeighVB系定義控件過控件過程的一般形式是PrivateSub控件名_名〔參數(shù)列表End控件過程名由控件名、下劃線和名組組成控件過程名的控件名必須與窗體中某個控件相匹配否則VisualBasic將認為它是一個通用過程;控件過程也是私有過程,屬于包含它的窗體模例如:在窗體中設(shè)置了一個名為Cmdend令按鈕控件,它的對應(yīng)事PrivateSubCmdend_Click()End建立過1,同時在代碼框中顯示默認的過程的模板對窗體而言它的默認過程是在過程列表框中選定一個過程后,就會在代碼框中顯示選定的PrivateSubEndSub 通用過通用過程是一個必須從另一個過程過程其它通用過程顯式調(diào)用的程序段。通用過程有助于將復(fù)雜的應(yīng)用程序分解成多個易于管理的邏輯單元,使得應(yīng)用程序更簡潔、更便于。通用Sub過程的定通用過程的結(jié)構(gòu)與過程的結(jié)構(gòu)類似。Sub過程的一般形式是:[Private|PublicStaticSub([參數(shù)列表])[ExitSub]EndSubEndSub體。在Sub語句之后,是過程的段,可以用Dim或Static語句過程Private|publicPublic。若在一個窗體StaticStatic指定過程中的局部變量為“靜態(tài)”過程名名規(guī)則與變量命名規(guī)則相同在同一個模塊中過程名必須唯數(shù)時,各參數(shù)之間用逗號分隔。VisualBasic的過程可以沒有參數(shù),但一對圓[Optional][ByVal][ByRef]變量名As數(shù)據(jù)類型]變量名[()]VisualBasic變量名或數(shù)組名。若變量名后ByVal:表明其后的形參是按值傳遞參數(shù)或稱為“傳值”(Passedby個參數(shù)ByRef;OptionalOptional前綴的參數(shù)是須用Optional關(guān)鍵字。所謂的可選參數(shù)就是在調(diào)用過程時,可以沒有實As數(shù)據(jù)類型:該選項用來說明變量類型,若缺省,則該形參是“變體變EndVisualBasicExitSubExitSub語句時提前SubSubSubFunctionPrivateSubEmployee_Salary(ByValWork_timeAsInteger,SalarySalary=50*EndEmployeeSub過程,它有兩個形式參數(shù),其中Work_time是“傳值”參數(shù),其類型為整型變量,Salary是“傳址”參數(shù),其類建立通用Sub過第法的操作步驟是:選擇“工具”菜單的“添加過程Sub1,(Function(PrivateSub1PrivateSubEndSub空白行處鍵入“PrivateSub過程名”或“PublicSub過程名”;EnterSubFunctionVisualBasicSqr、Sin、Int等。用戶也可使Function語句編寫自己的函數(shù)(Function)過程。[Private|PublicStaticFunction函數(shù)名([參數(shù)列表])AS數(shù)據(jù)類型][語句塊[=表達式][ExitFunction][語句塊[函數(shù)名=表達式EndFunction過程以Function語句開頭,以 Function語句結(jié)Public、StaticSub過程相同;函數(shù)名名規(guī)則與變量名名規(guī)則相As在函數(shù)體內(nèi)通過“=表達式”FunctionFunction過程返回0ExitFunctionExitFunctionFunctionFunctionSubSub過程或[6-1]編寫一個求n!的函數(shù)過程PrivateFunctionFact(ByValNAsInteger)AsLongDimKAsIntegerFact=IfN=0OrN=1ThenExitFunctionForK=2ToNFact=Fact*KNextEndIfEndFunction 過程的調(diào)過程由一個發(fā)生在VisualBasic中的來自動調(diào)用或者由同一模請看一個說 本例的界面對象有窗體、一個命令按鈕與一個。窗體的Name設(shè)置為Frmevent、Caption屬性設(shè)置為“過程調(diào)用”;命令按鈕的Name屬性設(shè)為Cmdend、Caption屬性設(shè)為“結(jié)束”;的Name屬性設(shè)為Lag、Caption為空。OptionPrivateSubCallMove((Screen.Width-Width)/2,(Screen.Height-Height)/2)EndSubPrivateSub g.CaptionVisualBasicEndSubPrivateSubDimAsInteger,LAsBooleanCallForm_Unload() =1ThenMsgBox不退出,繼續(xù)運行程序"EndIfEndPrivateSubForm_Unload(CancelAs MsgBox("AreyousurevbYesNo,?")6ThenCancel=1EndIfEnd運行程序,首先激活了Initialize(初始化)配置窗體,然后產(chǎn)生Load(加載),VisualBasic將窗體從磁盤裝入到內(nèi)存,調(diào)用SubForm_Load過程。執(zhí)行該過程將窗體顯示在屏幕正;窗體被激活A(yù)ctivate發(fā)生,調(diào)用Form_Activate過程,在窗體中顯示“歡迎使用VisualBasic”。(見圖6-3)。Initialize、Load、Activate等都是在一瞬間就完成了。接著程序等待下一個的發(fā)生。,我們單擊窗體中的“結(jié)束”命令按鈕命令按鈕控件的Click,調(diào)Cmdend_clickCmdend_clickCallForm_Unload()語句顯式調(diào)用了Form_Unload過程,在窗體出一個“退出?”的框(圖6-3)。Unload與Load相反,它的最常用之過程可以由發(fā)生的自動激活以響應(yīng)系統(tǒng)或用戶的活動,也可以被,Sub過程調(diào)Sub過程和Function過程,必須在過程或其它過程中顯式調(diào)用,否則過程代碼就不會被執(zhí)行在調(diào)用程序中程序執(zhí)行到調(diào)用子過程的語句EndFunction6-4所示過程EndEndSubFunction過程時,VisualBasic就將程序后,VisualBasic將回收存放變量和參數(shù)的??臻g。然后返回斷點繼續(xù)程序的VisualBasicSubCallCall語句調(diào)用Sub過SubCall過程名實在參數(shù)表Sub[6-2]PrivateSubDimIntaAsInteger,StAsStringInta=Text1.TextCallFactor(Inta,St)Text2.Text=StEndPrivateSubFactor(ByValNAsInteger,ByRefSAsString)DimIAsIntegerForI=1ToN-IfNModI=0ThenS=S&Str(I)NextIEndSubFactor是找出任一個正整數(shù)的所有因子的過程,它有兩個形式參數(shù),一個是傳值參數(shù)N,一個是傳址參數(shù)S。在過程Command_click中,從文本框Text1輸入數(shù)據(jù)給變量Inta賦值,并以IntaSt作為實參調(diào)用FactorStSSt接受過程返回Text2中。把過程名作為一個語句來[1[與第式相比,它有兩點不同F(xiàn)actor調(diào)用Function過FunctionVisualBasic內(nèi)部函數(shù)方法一樣。即在Function過程名([實在參數(shù)表])FunctionSub過程不同,必須給參數(shù)加上括號,即VisualBasicSubFunctionPrivateFunctionExamAASInteger)CallExam或ExamVisualBasic[例6-3]用Function過程求二個正整數(shù)的最大公PrivateSubDimNAsIntegerMAsIntegerGAsIntegerN=InputBox("輸入N")MInputBox("MG=(N,M)PrintN;"和M;"的最大公約數(shù)是GEndSubDimRAsIntegerR=AModDoWhileR<>A=B=R=AMod=BEnd本程序在Form_Click過程中用賦值語句G (N,M)調(diào)函數(shù)過程,函數(shù)返回值存放在變量G中,由于在定義函數(shù) 形式參數(shù)A和B被指定為“傳值”參數(shù)。所以盡管A、B兩個形參在函數(shù)調(diào)用窗體模塊中的公有過SubExamSubForm1以外的模塊中用下面即用<包含該過程的窗體模塊名>.<過程名>作為調(diào)用名來調(diào)用對應(yīng)的調(diào)用標準模塊中的公有過準模塊Module1Module2中都含有同名過程CommonSubModule1中CallCommonSub實在參數(shù)CommonSub過程。如果在其它模塊中調(diào)用標準模塊中公有過程則必須指定它是那一個模塊的公有過程。例如在Module1調(diào)用Module2中的CommanSub則可用下面語句實現(xiàn) 類模塊中的過Clssub過程:DimDemoClassASNewClass1CallDemoClass.Clssub([實參])遞,SubFunction過程就能根據(jù)不同的參數(shù)執(zhí)行同種任務(wù)。為了敘述形實SubFunction過程時,傳送給相應(yīng)過程的變量名,數(shù)組PrivateSubExamsub(XASinteger,YASEndSubPrivateSubDimXASsingle,YASCallEndSubY與形參表中的第一個形參變量X結(jié)合,實參表中的第二個實參變量X與形參表中的第二個Y結(jié)合。8-1是“形實結(jié)合”時的形參與實參形態(tài)對應(yīng)關(guān)系。 假定有如下過程PrivateSubTest(AASsingle,LocASBoolean,Array1()ASInteger,Chr1ASString)EndSubPrivateSubForm_Click(DimXASSingle,StASsting*5DimA(5)ASIntegerEnd在過程Form_Click中用CallTest(X^2,True,A,St)語句調(diào)用Test過Loc結(jié)合第三個實參是整型數(shù)組A,與形參表中第三個整型形參數(shù)組Array15St,與形參表中的字符型形參Chr1結(jié)合。程序是通過參數(shù)向過程傳遞有關(guān)信息的在VisualBasic中參數(shù)值的傳遞 過程調(diào)用時VisualBasic給按值傳遞參數(shù)在棧中分配一個臨時單元。只是實參變量的副本(圖6-。當采用值傳遞時,過程對參數(shù)的任何改變實按值傳送參數(shù)的程序示例PrivateSubCommand1_Click()DimMAsInteger,NAsIntegerM=15:N=20Print"m=";M,"n=";NEndPrivateSubValue_Change(ByValXAsInteger,ByValYAsInteger)X=X+20Y=X+Print"X=";X,"Y=";End地 變

N棧運行程序,單擊命令按鈕,觸發(fā)命令按鈕Click,執(zhí)行Command1_Click過程,給整型變量M和N分別賦值15和20,執(zhí)行CallValue_Change(M,NValue_ChangeMX6-5)。Value_ChangeXX20X35。賦YXYY55X、Y35,55。因為XY都是“傳值”X、Y的改變,僅僅是改變棧中對應(yīng)的回過程Command1_Click,M和N的值保持不變。輸出的結(jié)果是:X= Y=M= N=

按地址傳遞參“同一”共享同一個單Value_ChangeX改為PrivateSubValue_Change(XAsInteger, ByvalYAsInteger)X=X+20Y=X+Print"X=";X,"Y=";End而過程Command1_Click不作任何改動。再調(diào)用Value_Change過參的地址(6-在過程Value_Change中對形參X的,實際是對包含M的值的內(nèi)存單元的。X= Y=MXY MXY 棧圖圖 棧編寫程序計算5!+4!+3!+2!+1!的PrivateSubDimSumAsInteger,IAsIntegerForI=5To1Step-1Sum=Sum+Fact(I)NextIPrint"SUM=";SumEndSubPrivateFunctionFact(NAsInteger)AsIntegerFact=1DoWhileN>0Fact=Fact*NN=N-1EndFunction運行上述程序,輸出結(jié)果是:SUM120SUM=153的正確FunctionFactN是按地址傳遞的參數(shù)。而在過程Form_Click的For循環(huán)中用循環(huán)變量I作為實在參數(shù)調(diào)用函數(shù)FactFactN0I的值也跟著變?yōu)?,使得FOR循環(huán)僅執(zhí)行一次,就立即退出循環(huán)。所以程序5!值,打印運行結(jié)果后就結(jié)束程序運行。在不改變函數(shù)Fact過程體的前提下,要得到預(yù)期結(jié)果,有兩種方法:VisualBasic中把變量轉(zhuǎn)換成表達式Fact((I))Fact,NIN的值在函數(shù)執(zhí)I的值。VisualBasic就會用“按值傳遞”的方法來處理它。OptionPrivateSubDimV1AsInteger,V2AsInteger,V3AsIntegerV1=2:V2=3:V3=4Debug.PrintV1+V2+V3*Fun_Add(V1,V2,V3)EndSubPrivateFunctionFun_Add(aAsInteger,bAsInteger,cAsa=a+b=b+c=c+Fun_Add=a+b+cEndFunction在本例中,本想在立即窗口顯示輸出值161,但結(jié)果輸出的是571。為什所以函數(shù)返回值39,同時也改變了實參V1、V2V3的值,實際計算的12+13+14*392+3+4*39的值。一個參數(shù)數(shù)據(jù)類型轉(zhuǎn)換的程序示例PrivateSubForm_Click()DimSAsSingleS=CallConvert((S),"12"+".5")EndSubPrivateSubConvert(InxAsInteger,SingAsSingle)Inx=Inx*2Sing=Sing+Print"Inx=";Inx,"Sing=";SingEndSubCallConverts),“12”+“.5”)Convert表達式值強制轉(zhuǎn)換成整型值然后傳遞給整型形參Inx因此Inx初值為126。12.5Sing。程序的輸出結(jié)果是:Inx= Sing=如果將Call語句改為Call Convert((s),“123a”)程序執(zhí)行Call語句時,將產(chǎn)生“類型不匹配”(Typemismatch)的錯誤,其原因是VisualBasic無法將字符串“123a”;轉(zhuǎn)變成為單精度型的值,傳送給Sing參數(shù)。數(shù)組參定義過程時,VisualBasic允許把數(shù)組作為形式參數(shù),數(shù)組參數(shù)的格形參數(shù)組名()[As數(shù)據(jù)類型一個與數(shù)組參數(shù)的傳遞有關(guān)的程序示OptionExplicitOptionBase1PrivateSubDimArraya()AsInteger,IAsIntegerReDimArraya(5)Print調(diào)用前數(shù)組維上界是UBound(Arraya)CallChangedim(Arraya)Print調(diào)用后數(shù)組維上界是UBound(Arraya)Print"數(shù)組各元素值是:";ForI=1ToUBound(Arraya)PrintArraya(I);NextIEndPrivateSubChangedim(A()AsInteger)DimIAsIntegerReDimPreserveA(7)ForI=1To7A(I)=NextIEndSub數(shù)組各元素值是 對象參參變量的類型為“Control”就可以向過程傳遞控件。若把類型為圖6- 圖6-一個演示對象參數(shù)傳遞的程序示8-26-86-9分別是示名稱標題11Frmfirst.frm,程序代碼是:PrivateSubCmd1_Click()CallEndPrivateSubCmd2_Click()CallFrmarg(frmsecond)EndPrivateSubForm_Load()frmfirst.Left=2000Lab1.CaptionVB6.0"EndSubPrivateSubObjarg(LadAsControl)Lad.BackColor=&HFF0000Lad.ForeColor=&HFFFF&Lad.Font=14Lad.FontItalic=Lad.Caption="對象參數(shù)的傳遞"EndSubPrivateSubFrmarg(FAsF.Left=(Screen.Width-F.Width)/2F.Top=(Screen.Height-F.Height)/2EndSub2Frmsecond.frm,程序代碼是:PrivateSubCmd3_Click()UnloadEndSubSubObjarg是以控件對象為參數(shù),而SubFrmarg是以窗正體字顯示“學(xué)習(xí)使用VB6.0”前景色為紅(圖6-若單擊命令按紐Cmd1,調(diào)用執(zhí)行過程Cmd1_Click,該過程以名Lab1為實在參數(shù)調(diào)用通用過程Objarg。執(zhí)行SubObjarg過程后,在窗體中的框Lab1內(nèi)以斜體字顯會激活過程Cmd2_Click,該過程以窗體名Frmsecond為實在參數(shù)調(diào)用通用過程Frmarg。執(zhí)行SubFrmarg過程后,隱藏窗體Frmfirst,顯示Frmsecond窗體,F(xiàn)rmsecond窗體獲得焦點成為活動窗體。遞歸過程是在過程定義中調(diào)用(或間接調(diào)用)自身來完成某一特定的任務(wù)解性好,算法的正確性證明也比較容易,因此掌握遞歸程序設(shè)計方法很有必要。 (n=0n!n*n- (n>1時Fact(n)n!,即要求出函Fact(n)Fact(n-1)的值。根據(jù)上面的遞歸表達式可編寫出求n!的函數(shù)過PrivateFunctionFact(ByvalNAsInteger)AsLongIfN=0OrN=1ThenFact=1Fact=N*Fact(N-1)EndIfEndPrivateSubDimNAsInteger,FAsNInputBox("輸入一個正整數(shù)")F=Fact(N)PrintN;"!=";FEndSub運行程序,點擊窗體執(zhí)行Form_click過程,從鍵盤輸入3,賦值給變量N,即求3!的值。程序以Fact(N)形式調(diào)用函數(shù)Fact。當函數(shù)Fact開始運行時,首先檢測傳遞過來的參數(shù)N是否為1,若為1則函數(shù)返回的值為1;若不為1,函數(shù)執(zhí)行賦值語句Fact=N*Fact(N-1)。函數(shù)調(diào)用傳遞的參數(shù)N是3,函數(shù)計算表達式3*Fact(N-1)值,由于表達式中還有函數(shù)調(diào)用。于是 Basic第二次調(diào)用Fact函數(shù)但傳遞的參數(shù)是因為參數(shù)值不為1,函數(shù)同樣要執(zhí)行語句Fact=N*Fact(N-1)語句計算表達式2*Fact(N-1)值。當再一次調(diào)用此函數(shù)時,參數(shù)值為1,因此函數(shù)返回函數(shù)值1到本次調(diào)用點,此調(diào)用函數(shù)又返回2的值到調(diào)用這個調(diào)用函數(shù)的函數(shù);最后,最初被調(diào)用的6Fact6-11

IfN=1thenFact=1

返回函數(shù)值IfN=1thenFact=1Fact=3*Fact(N-1)EndIfEndIfN=1thenFact=1

Fact=2*Fact(N-1)EndIfEnd返回函數(shù)值

返回函數(shù)值Fact1*Fact(N- End End6-6-10可以看出,一個遞歸問題可分為“調(diào)用”和“返回”兩個階段。當Fact函數(shù)被調(diào)用3Fact(3),F(xiàn)act(2),F(xiàn)act(1)Fact=1為止。然后帶著初Fact(1)Fact(2)Fact(2)Fact(3)為止。編寫遞歸過程要注意:遞歸有限遞歸,例如上面求N!的遞歸函數(shù)的邊界條件是:Fact1.若一個遞VisualBasic編程是非常重要的,變量和過程的作用域是用這個過程之中才有意義。過程級變量又稱為局部變量。例如下面的函數(shù)Local_VariableX、YZ。PrivateFunctionLocal_Variable(NAsInteger)AsIntegerDimXAsInteger,YAsInteger,ZAsIntegerX=N*Y=X+Z=X+Local_Variable=X+Y-ZEndFunction當函數(shù)運行結(jié)束,VisualBasicX、Z明段(GeneralDeclarations)PrivateDim語句說明這個變量,由此說都可以它們但其它模塊卻不能這些變量下面的程序段是一個模塊OptionDimTestStringAsStringPrivateSubForm_Activate()Debug.Print"在Form_Activate過程中";EndSubPrivateSubForm_Load()TestString測試變量作用域"EndPrivateSubDebug.PrintShowTestString中TestStringEndSubTestString,當程序運行時,首先在Form_Load過程中初始化TestString,接著系統(tǒng)激活Form_Activate過程顯示變量TestString的值并調(diào)用子過程ShowTestString,ShowTestStringShowTestString的值。從上例可知模塊級變TestString全局變VisualBasic程序中的任何一個代碼段都可以(ModuleModule1.bas的OptionExplicitPublicGbaAsStringPublicSubMain()GbaGbaModule1.Bas中定義的全局變量LoadForm1Load EndOptionExplicitPublicGbfAsStringPrivateSubForm_Load()GbfGbf是在窗體模塊中定義的全局變量CallMainEndSubPrivateSubDebug.Print"Form1中打?。?Debug.PrintGba的內(nèi)容:GbaDebug.Print"Gbf的內(nèi)容:";Gbf EndSubForm2.frm,代碼為:OptionExplicitbPrivateSubDebug.Print"Form2中打?。?Debug.Print"Gba的內(nèi)容:";GbaDebug.PrintGbf的內(nèi)容:Form1.GbfEnd過程中都可以直接用它的變量名來它。而在過程中其它窗體模塊中能正確地它例如在窗體模塊Form2中用Form1.Gbf的格式在窗體Form1Gbf。誤是由哪一個程序段的。另外如果對程序中的全局變量的使用理解不很模塊Module1和Module2,分別在這兩個模塊中都定義了一個全局變量以Module1.Password的形式來調(diào)用它。若在標準模塊Module1中本模塊中的Password變量則可用變量名直接而使用標準模塊Module2中Password的話,必須用標準模塊名“Module2”Password的下面程序中,在窗體模塊中定義了的全局變量X、Y和Z_XXYZOptionExplicitPublicXAsInteger,YAsInteger,ZAsIntegerPrivateSubForm_Activate()Debug.PrintX,YZ是X,YZEndSubPrivateSubForm_Load()X=10Y=Z=EndPrivateSub DimXAsIntegerX=Debug.PrintX,YZ是XYZEndSubX,Y和ZX,Y和Z從運行結(jié)果可以看出當不同作用域的同名變量發(fā)生時優(yōu)先局限性靜態(tài)變Static定義變量,那么這個變量就是一個靜態(tài)變量。靜態(tài)OptionPrivateSubCommand1_Click()DimKAsIntegerK=CallDebug.Print第一次調(diào)用:KKK=5CallDebug.Print第二次調(diào)用:KKEndSubPrivateSubStatic_Variable(ByRef NAsInteger)StaticStaAsIntegerSta=N+StaN=Sta+NEnd第一次調(diào)用:K第二次調(diào)用:KOptionPrivateSubDebug.Print"4!=Debug.Print"5!=";Fact_Error(5)EndSubPrivateFunctionFact_Error(ByValNAsInteger)AsIntegerStaticCountAsIntegerFact_Error=DoWhileCount<NCount=Count+1Fact_Error=Fact_Error*CountEnd如果上面程序正確在立即窗口第一行顯示4!=24,第二行顯示5!=120。4!=24,5!=5。[例6-4]簡易文本編輯程文本框控件不僅可用于接受從鍵盤輸入的數(shù)據(jù)或顯示程序的處理結(jié)果,也可以用作文本編輯。圖-1是本程序運行時的起始畫面。為了使文本框可Me屬性被設(shè)為r;coar屬性設(shè)為(同時具有水平與垂直滾動條;程序的文件菜單包含了“打開保存退出等命令另外本程序還使了公共框部件以便 框圖0-使用程序中的“打開”Text120-本內(nèi)容。在該過程中調(diào)用了“保存”文件的過程。flag用于獲取文本被修改的信息,只要文本發(fā)生改變,就會引flag的取值給用戶提示信息,讓用戶決定是否保存文件。OptionDimflagAsPrivateSubForm_Unload(CancelAsInteger)DimfAsIntegerIfflagfMsgBox("文本已改變,要保存嗎vbYesNo,程序示例")Iff=6ThenCall

EndEndIfEndSubPrivateSubDimInameAsString,sAsCommonDialog1.Filter="*.txt(文本文件 ‘設(shè)置公共框的Filter Iname=CommonDialog1.FileNameOpenInameForInputAs#11DoWhileNotEOF(11)s=s&Input(1,Close11EndPrivateSubDimOnameAsString,nAsLong,sAsCommonDialog1.Filter="*.txt(文本文件 ‘設(shè)置公共框Filter Oname=CommonDialog1.FileNameOpenOnameForOutputAs#12Print#12,sClose12flag=FalseEndPrivateSubM1_3_Click()UnloadMeEndPrivateSubText1_Change()flag=True 框控件 框控件屬于ActiveX控件。使用“工程”菜單中的“部件”命令, CommonDialogControl6.0”后單擊“確定”,即可將公共框控件加入VB的控件工具箱。ActiveX控件加入工具箱后,使用方法與VB的固有控件相同。[例6-5]利用級數(shù)法編程求arcsin函數(shù) x

13x

135x

n13(2i1) xx 2

245

246

x

24(2i)(2i圖6-13是根據(jù)程序功能要求及求解設(shè)計的程序界面。運行程序,要InputBoxx及允許誤差值。若輸入“0.5,0.0005”,xepsafunn6-14是程序執(zhí)行的結(jié)果畫面。圖6-OptionPrivateSubDimxAsSingle,nAsInteger,epsAsSingleDimsAsSingle,aAsSingle,tempAsStringtemp=InputBox("1",

"求函數(shù)值temp=Trim(temp)n=InStr(temp,",")x=Left(temp,n-1):eps=Right(temp,Len(temp)-n)s=x:n=1a=afun(x,Ifa<=epsThenExitDos=s+an=n+Label2.Caption="arcsin("&CStr(x)&")="Text1.Text=sEndPrivateFunctionafun(ByValxAsSingle,ByValnAsInteger)AsSingleDimiAsInteger,pAsSinglep=Fori=1Top=p*(2*i-1)/(2*Nextafun=p*x^(2*n+1)/(2*n+1)EndFunctionPrivateSubCmdcls_Click()Text1.Text=""EndPrivateSubCmdend_Click()End圖0-[例6-6]冒泡法冒泡法排序的算法是將待排序的數(shù)存放在Sort數(shù)組中首先比較Sort(1)Sort(3)(換這兩個元素的值。重復(fù)此過程,直到處理完Sort(n-1)和Sort(n)這兩個元素n-1次比較處理,最大的數(shù)被傳到數(shù)組最后一個元素中,而較Switch,在比較過程中,若發(fā)生數(shù)據(jù)交換,將開關(guān)設(shè)置為真,即Switch=True,若沒有發(fā)生數(shù)據(jù)交換,則將開關(guān)設(shè)為假,即Switch=FalseSwitchSwitch的值和ISwitchFalseOptionExplicitOptionBase1PrivateSubDimNumber(10)AsInteger,IAsIntegerForI=1ToNumber(I)=Int(Rnd*100)+1Text1=Text1&NextCallBubble_Sort(Number)ForI=1To10Text2=Text2&Str(Number(I))NextIEndPrivateSubBubble_Sort(Sort()AsInteger)DimIAsInteger,TemAsIntegerDimUbAsInteger,SwitchAsBooleanUb=UBound(Sort)Switch=TrueDoWhileSwitchSwitch=FalseUb=Ub-1ForI=1ToIfSort(I)>Sort(I+1)ThenSwitch=TrueTem=Sort(I)Sort(I)=Sort(I+1)Sort(I+1)=TemEndIfNextIEndSub[例6-7]把一個任意十進制正整數(shù)轉(zhuǎn)換成N進制數(shù)名稱標題文本1無2無3無4無無無無無無每個“FontMsSans圖8-6-15DimNAsInteger,NumAsLongPrivateSubCmd1_Click()DimChAsString,IAsIntegerDimChar(15)AsStringDimBin()AsStringForI=0To9Char(I)=Str$(I)NextIForI=0ToChar(10+I)=Chr$(Asc("A")+NextIReDimForI=UBound(Bin)To1Step-1Ch=Ch+Bin(I)NextIEndPrivateSubCmd2_Click()EndPrivateSubText1_Change()N=Val(Text1.Text)Lal4.CaptionStr$(N進制數(shù)"EndSubPrivateSubText2_Change()Num=Val(Text2.Text)EndPrivateSubTrans(Vary()AsString,St()AsString)DimRAsIntegerDimKAsIntegerK=0DoUntilNum=R=NumModK=K+ReDimPreserveVary(K)Vary(K)=St(R)Num=Num\NEnd在程序中的過程Cmd1_Click中定義了字符串數(shù)組Char,并在其后For循環(huán)中將字符0~9、A~F0~15號元素。還定義了一個動態(tài)字符串數(shù)組Bin,將來用它作為實在參數(shù)與通用過程Trans的形參數(shù)組Vary結(jié)合,Trans是一個利用“N求余法”NTrans后,StCharSt的0~15號元素值也0~9,A~FNum÷N(Num中存放的值是它們的商的余數(shù)R,并用R作為St數(shù)組下標,用賦值語句Vary(K)=St(R)把每次求得的余數(shù)所對應(yīng)的N進制數(shù)的字符存放到Vary數(shù)組Num0Bin是一個動態(tài)數(shù)VaryDo循環(huán)中每求得一個余數(shù)后,都要用KK1和ReDimpreserveVary(K)兩個語句來Vary數(shù)組的維上界,Bin維上界也跟著變化了。返回調(diào)用程BinCh中。字符串變量Ch的值就N進制數(shù)。將十進制整數(shù)轉(zhuǎn)換為八進制整數(shù),可以采用“8取余法”,具體步驟8 86 0經(jīng)過上述運算,(53)1016 163 0經(jīng)過上述運算,(53)10將十進制整數(shù)轉(zhuǎn)換為二進制整數(shù),可以采用“2取余法”,具體步驟2120212602312110經(jīng)過上述運算,(53)10[例6-8]用法求定積 法求函數(shù)f(x)=x2+12x+4在區(qū)間[1,4]的定積分4f1算法分析 法求積分為hy=

(b其中,a,b為積分區(qū)間[a,b];若將區(qū)間分為n等分,則h OptionPrivateSubCommand1_Click()DimaAsInteger,bAsIntegerDimstepAsInteger,SimpAsa=b=Val(Text2)Simp=Simps(a,b,step)PrintSimpEndPrivateFunctionFun(XAsSingle)AsFun=X*X+12*X+EndPrivateFunctionSimps(aAsInteger,bAsInteger,stepAsInteger)AsSingleDimHAsSingle,FourAsSingle,TwoAsSingleDimSAsSingle,XAsSingle,IAsIntegerH=(b-a)/stepX=S=Fun((a))+Fun((b))ForI=1Tostep/2X=X+Four=Four+Fun(X)X=X+HTwo=Two+Fun(X)NextITwo=Two-S=4*Four+2*TwoSimps=S*H/3EndSimpsSimpsForTwo所加的Fun(x)的值與Fun((b))的值重復(fù),所以在循環(huán)外用語句Two=Two-[例6-9]編寫一個遞歸函數(shù),求任意兩個整數(shù)的最大公約程序中的Function過程 是按照算(也稱為輾轉(zhuǎn)除法設(shè)計的一個遞歸函數(shù),其邊界條件(終止條件)是:當R=0時,函數(shù)賦值返回名稱標題文本1無2無3無無無無無無6-17DimMAsLong,NAsLongPrivateSubCmd1_Click()DimvalueAsIfM<>0AndN<>0Thenvalue= (M,N)Text3.Text=Str$( EndIfEndPrivateSubCmd2_Click()EndPrivateSubText1_Change()M=Val(Text1.Text)EndPrivateSubText2_Change()N=Val(Text2.Text)EndPrivateFunction (ByValXAsLong,ByValYAsLong)DimRAsLongR=XModIfR=0=X=YY= EndIfEndFunction圖8-[例6-10]驗證大于5的奇數(shù)可表示成三個素數(shù)的算法說明:給定一個大于5N,調(diào)用Prime過程求出N以內(nèi)的所OptionExplicitOptionBase1PrivateSubDimP()AsInteger,NAsInteger,LAsDimIAsInteger,JAsInteger,kAsInteger,AsBooleanN=InputBox("5的整數(shù)!")CallPrime(P,N)L=UBound(P)ForI=1ToLForJ=1ToFork=1ToIfP(I)+P(J)+P(k)=NDebug.PrintN;"=";P(I);"+";P(J);"+";=TrueExitForEndIfNextkIfThenExitForNextJIfThenExitForNextIEndPrivateSubPrime(A()AsInteger,NAsInteger)DimIAsInteger,IdxAsIntegerDimJAsIntegerForI=2ToNForJ=2ToIfIModJ=0ThenExitForNextJIfJ>Sqr(I)ThenIdx=Idx+ReDimPreserveA(Idx)A(Idx)=IEndIfNextIEnd多窗體程序設(shè)添加窗菜單中的新工程”(NewProject命令實現(xiàn)。其它窗體可以通過工程”(Project)菜單中的“添加窗體”(AddForm)命令實現(xiàn)。每創(chuàng)建一個窗體,該窗體作為一個對象添加到工程中去了。你可以在“Form在標準模塊中添加過中“添加模塊”(AddModule)(Private)過[例6-11]編寫一個既可以求排列,又能求組合的應(yīng)用程 1名稱標題文本1VisualBasic多窗體2名稱標題文本From21C2=MN3名稱標題文本From31A2=MN6-186-196-20分別是三個窗體的參考界面。Module1中的程序代碼是:PublicFunctionFact(nAsInteger)AsLongIfn=0Orn=1ThenFact=1Fact=n*Fact(n-1)EndIfEndPrivateSubEndPrivateSubCmd2_Click()EndPrivateSubCmd3_Click()End圖8-圖8-窗體bin的程序代碼是:DimmAsIntegernAsIntegerPrivateSubCmdjs_Click()DimvalueAsIfm>nMsgBoxmn重新輸入"Txtm.Text="m"Txtn.Text="n"ExitSubEnd圖0-Txtv.Text=Str(Funzh(m,圖0-PrivateSubCmdretu_Click()EndPrivateSubTxtm_Change()'Txtm.Text=""EndSubPrivateSubTxtn_Change()'Txtn.Text=""EndSubPrivateFunctionFunzh(mAsInteger,nAsInteger)AsLongDimfacmAsLong, AsLongDimfacmnAsLongfacm=Fact(m)=Fact(n)facmn=Fact(n-m)Funzh /(facm*EndFrmpermute的程序代碼是:DimmAsInteger,nA

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論