Bài giảng Visual Basic 6

pdf 222 trang phuongnguyen 3650
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Visual Basic 6", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_visual_basic_6.pdf

Nội dung text: Bài giảng Visual Basic 6

  1. Ch ươ ng M t - Hoan nghênh đn v i VB6 Chào m ng b n đ n v i Visual Basic 6 Dùng VB6 là cách nhanh và t t nh t đ l p trình cho Microsoft Windows. Cho dù b n là chuyên nghi p hay m i m đ i v i ch ươ ng trình Windows, VB6 s cung c p cho b n m t b cơng c hồn ch nh đ đơn gi n hĩa vi c tri n khai l p trình ng d ng cho MSWindows. Visual Basic là gì? Ph n "Visual" đ c p đ n ph ươ ng phàp đưc s d ng đ t o giao di n đ h a ng ưi dùng (Graphical User Interface hay vi t t c là GUI) . Cĩ s n nh ng b ph n hình nh, g i là controls, b n tha h s p đ t v trí và quy t đ nh các đ c tính c a chúng trên m t khung màn hình, g i là form. N u b n đã t ng s d ng ch ươ ng trình v ch ng h n nh ư Paint, b n đã cĩ s n các k n ăng c n thi t đ t o m t GUI cho VB6. Ph n "Basic" đ c p đ n ngơn ng BASIC (Beginners All-Purpose Symbolic Instruction Code), m t ngơn ng l p trình đơ n gi n, d h c, đưc ch ra cho các khoa h c gia (nh ng ng ưi khơng cĩ thì gi đ h c l p trình đin tốn) dùng. Visual Basic đã đưc ra t MSBasic, do Bill Gates vi t t th i dùng cho máy tính 8 bits 8080 hay Z80. Hi n nay nĩ ch a đ n hàng tr ăm câu l nh (commands), hàm (functions) và t khĩa (keywords). R t nhi u commands, functions liên h tr c ti p đ n MSWindows GUI. Nh ng ng ưi m i b t đ u cĩ th vi t ch ươ ng trình b ng cách h c ch m t vài commands, functions và keywords. Kh n ăng c a ngơn ng này cho phép nh ng ng ưi chuyên nghi p hồn thành b t k ỳ điu gì nh s d ng ngơn ng l p trình MSWindows nào khác. Ng ưi mang l i ph n "Visual" cho VB là ơng Alan Cooper. Ơng đã gĩi mơi tr ưng ho t đ ng c a Basic trong m t ph m vi d hi u, d dùng, khơng c n ph i chú ý đ n s tinh x o c a MSWindows, nh ưng v n dùng các ch c n ăng c a MSWindows m t cách hi u qu . Do đĩ, nhi u ng ưi xem ơng Alan Cooper là cha già c a Visual Basic. Visual Basic cịn cĩ hai d ng khác: Visual Basic for Application (VBA) và VBScript . VBA là ngơn ng n m phía sau các ch ươ ng trình Word, Excel, MSAccess, MSProject, .v.v cịn g i là Macros. Dùng VBA trong MSOffice, ta cĩ th làm t ăng ch c n ăng b ng cách t đ ng hĩa các ch ươ ng trình. VBScript đưc dùng cho Internet và chính Operating System. Dù cho m c đích c a b n là t o m t ti n ích nh cho riêng b n, trong m t nhĩm làm vi c c a b n, trong m t cơng ty l n, hay c n phân b ch ươ ng trình ng d ng r ng rãi trên th gi i qua Internet, VB6 cũng s cĩ các cơng c l p trình mà b n c n thi t. Các n b n Visual Basic 6 Cĩ ba n b n VB6: Learning, Professional và Enterprise. Chúng ta hãy gát qua n b n Learning. B n cĩ th dùng n b n Professional hay Enterprise. n b n Professional cung c p đ y đ nh ng gì b n c n đ h c và tri n khai m t ch ươ ng trình VB6, nh t là các control ActiveX, nh ng b ph n l p trình ti n ch và r t h u d ng cho các ch ươ ng trình ng d ng (application programs) c a b n trong t ươ ng lai. Ngồi đĩa compact chính cho VB6, tài li u đính kèm g m cĩ sách Visual Studio Professional Features và hai đĩa CD Microsoft Developer Network (MSDN). n b n Enterprise là n b n Professional c ng thêm các cơng c Back Office ch ng h n nh ư SQL Server, Microsoft Transaction Server, Internet Information Server. Cài đt VB6 ð cài đt VB6, máy tính c a b n c n ph i cĩ m t đĩ a CD-ROM (CD drive) . B n c n ít nh t 32 MB RAM, 2 GB hard disk và CPU Pentium II. Khi b VB6 CD vào CD drive, nĩ s t kh i đ ng đ display menu cho b n ch n nh ng th gì c n Setup, hãy click Install Visual Basic 6.0 đ cài VB6. 1
  2. Ngo i tr các file h điu hành (Operating System) trong th ư m c (folder) \Os , các file trong đĩa compact đu khơng b nén. Vì th , b n cĩ th s d ng chúng tr c ti p t đĩ a. Ví d , cĩ nhi u cơng c và thành ph n trong folder \Tools v n cĩ th đưc cài đt tr c ti p t CD-ROM. Ngồi ra, b n cĩ th ch y Setup khi nào c n thi t. Ví d , b n cĩ th ch y Setup đ cài đt l i Visual Basic trong folder khác, ho c đ cài đt thêm b t các ph n c a VB6. Nu vì lý do gì h th ng khơng install các đĩ a compact MSDN (b n s khám phá ra điu n y khi th y Help khơng cĩ m t lúc ch y VB6), b n cĩ th cài đt chúng tr c ti p t đĩ a s 1 c a b MSDN. ð b xung và xĩa các thành ph n VB: 1. B đĩ a compact vào CD drive. 2. Nu menu khơng t đ ng hi n lên thì ch y ch ươ ng trình Setup cĩ s n tong folder g c trên đĩa compact. 3. Ch n nút Custom trong h p tho i (dialog) Microsoft Visual Basic 6.0 Setup. 4. Ch n hay xĩa các thành ph n b ng cách check hay uncheck các h p danh sách Options c a dialog Custom. 5. Th c hi n các ch d n Setup trên màn hình. Ghi chú: Trong lúc cài VB6, nh ch n Graphics n u khơng b n s thi u m t s hình nh nh ư icons, bitmaps v.v ðáng l Microsoft cho t đ ng cài đt Graphics, t c là Default (khơng cĩ nĩi gì) thì cài đt Graphics. Integrated Development Environment (IDE) c a VB6 Khi kh i đ ng VB6 b n s th y m ra nhi u c a s (windows), scrollbars, v.v và n m ch ng lên là New Project dialog. đây VB6 cho b n ch n m t trong nhi u lo i cơng trình. Ch n Standard EXE. M t lát sau trên màn nh s hi n ra giao di n c a mơi tr ưng phát tri n tích h p (Integrated Development Environment - IDE ) gi ng nh ư d ưi đây: 2
  3. IDE c a VB6 bao g m các y u t sau: Menu Bar Ch a đ y đ các commands mà b n s d ng đ làm vi c v i VB6, k c các menu đ truy c p các ch c n ăng đ c bi t dành cho vi c l p trình ch ng h n nh ư Project, Format, ho c Debug. Trong Menu Add-Ins cĩ Add-Ins Manager cho phép b n g n thêm nh ng menu con nhi m ý đ ch y các ch ươ ng trình l i ích cho vi c l p trình. Trong Add-Ins Manager dialog b n ch n m t Add-In r i check m t hay nhi u h p trong khung Load behavior: Toolbars (Debug, Edit, form Editor, Standard) 3
  4. Các toolbars cĩ hình các icons cho phép b n click đ th c hi n cơng vi c t ươ ng đươ ng v i dùng m t menu command, nh ưng nhanh và ti n h ơn. B n dùng menu command View | Toolbars (click lên menu command View cho popupmenu hi n ra r i click command con Toolbars) đ làm cho các toolbars hi n ra hay bi n m t đi. B n cĩ th thay đ i v trí m t toolbar b ng cách n m vào hai g ch vertical n m bên trái toolbar r i d i toolbar đi ch khác (n m đây ngh ĩa là đ pointer c a mouse lên ch ch m đ trong hình phía d ưi r i b m xu ng và gi nút bên trái c a mouse, trong khi kéo pointer đi n ơi khác). Ngồi ra b n c ũng cĩ th s a đ i các toolbars theo ý thích b ng cách dùng Menu command View | Toolbars | Customize Toolbox ðây là h p đ ngh v i các cơng c , g i là controls, mà b n cĩ th đ t lên các form trong lúc thi t k (design). N u Toolbox bi n m t, b n cĩ th display nĩ tr l i b ng cách dùng menu command View | Toolbox . B n cĩ th khi n toolbox display nhi u controls h ơn b ng cách ch n Components t context menu (ch n Toolbox r i b m nút ph i c a mouse đ display context menu) hay dùng menu command Project | Components . Ngồi vi c trình bày Toolbox m c đ nh, b n cĩ th t o cách trình bày khác b ng cách ch n Add Tab t context menu và b sung các control cho tab t k t qu . Project Explorer S li t kê các forms và các modules trong project hi n hành c a b n. M t project là s t p h p các files mà b n s d ng đ t o m t trình ng d ng. T c là, trong VB6, khi nĩi vi t m t program cĩ ngh ĩa là tri n khai m t project. Properties window 4
  5. Li t kê các đc tính c a các forms ho c controls đưc ch n. M t property là m t đ c tính c a m t object ch ng h n nh ư size, caption, ho c color. Khi b n s a đ i m t property b n s th y hi u qu ngay l p t c, thí d thay đi property Font c a m t Label s th y Label y đưc display b ng Font ch mi. Khi b n ch n m t Property c a control hay form trong Properties window, phía bên ph i ch value c a property cĩ th display ba ch m ( . . . ) hay m t tam giác ch a xu ng. B m vào đĩ đ display mt dialog cho b n ch n value. Thí d d ưi đây là dialog đ ch n màu cho property ForeColor c a control Label1. Form Layout Bn dùng form Layout đ ch nh v trí c a các forms khi form hi n ra l n đ u lúc ch ươ ng trình ch y. Dùng context command Resolution Guides đ th y n u dùng m t màn nh v i đ m n (resolution) t hơn, thí d nh ư 640 X 480, thì nĩ s nh nh ư th nào. Form Designer Dùng đ thi t k giao di n l p trình. B n b sung các controls, các đ h a (graphics), các hình nh và mt form đ t o s ma sát mà b n mu n. M i form trong trình ng d ng c a b n cĩ designer form riêng c a nĩ. Khi b n maximise m t form designer, nĩ chi m c khu làm vi c. Mu n làm cho nĩ tr li c bình th ưng và đng th i đ th y các form designers khác, click nút Restore Window gĩc bên ph i, phía trên. Immediate Window Dùng đ g r i (debug) trình ng d ng c a b n. B n cĩ th display d ki n trong khi ch y ch ươ ng trình ng d ng. Khi ch ươ ng trình đang t m ng ng m t break point, b n cĩ th thay đ i giá tr các variables hay ch y m t dịng ch ươ ng trình. View Code button Click lên nút n y đ xem code c a m t form mà b n đã ch n. Window c a code gi ng nh ư d ưi đây: 5
  6. Trong Code window b n cĩ th ch n display t t c Sub c a code cùng m t lúc nh ư trong hình hay display m i l n ch m t Sub b ng cách click button cĩ hình ba dịng n m gĩc bên trái phía d ưi. View form button Click lên nút n y đ xem form c a m t form mà b n đã ch n. Ghi chú: Nhi u windows trong IDE nh ư Toolbars, Toolbox, Project Explorer .v.v cĩ th trơi lình bình (floating) hay đu b n (docked). B n cĩ th thay đ i v trí chúng b ng cách n m vào Title Bar c a window r i d i đi. D ĩ nhiên b n c ũng cĩ th m r ng hay làm nh m t window b ng cách d i m t cnh vertical hay horizontal c a nĩ. Khi đ m t window lên trên m t window khác chúng cĩ th tìm cách dính nhau. Trong hình d ưi đây, Properties Window và Form Layout đã đưc kéo ra ngồi cho floating. Nh n tr giúp trong khi đang làm vi c Trong khi l p trình b n cĩ th c n tìm hi u các thơng tin liên quan đn các commands, functions .v.v ca VB6. B n cĩ th kh i đ ng Microsoft Developer Network | MSDN Library Visual Studio 6.0 t nút Start, hay click Help | Contents t Menu Bar c a VB6, hay ch n m t keyword (highlight keyword) r i n F1 đ đ c Help. Ni dung Help bao g m nhi u đ c đim đưc thi t k đ th c hi n vi c tìm ki m thơng tin d dàng hơn. Bn cĩ th d a trên Contents đ đ c tài li u nh ư m t quy n sách, Index đ đ c nh ng đon cĩ nh c đ n m t keyword hay Search đ tìm m t tài li u nhanh h ơn. Ví d , vi c g r i thơng tin b t ngu n t nhi u đ c tính khác nhau ph thu c vào lo i đ án mà b n đang làm vi c. Các liên k t đưc 6
  7. mơ t trong ph n n y th c hi n vi c tìm ki m d dàng h ơn. Ngồi ra, b n c ũng cĩ th click See Also d ưi tiêu đ c a ch đim đ xem các tiêu đ c a các ch đim mà b n cĩ th đi đ n ho c liên h đ n nhi u thơng tin. Context Sensitive Help (tr giúp trong đúng tình hu ng) Nhi u ph n c a VB6 là context sensitive , cĩ ngh ĩa là lúc b i r i ch c n n nút F1 ho c highlight keyword r i nh n F1 là đưc thơng tin nh ng gì liên h tr c ti p v i tình hu ng hi n gi c a b n. Bn cĩ th nh n F1 t b t k ỳ ph n context sensitive nào c a giao di n VB6 đ display thơng tin Help v ph n đĩ. Các ph n context sensitive là: • Các Windows c a VB6 nh ư Properties, Code .v.v • Các control trong Toolbox. • Các Object trên m t form ho c Object tài li u. • Các đc tính trong Window Properties. • Các keywords c a VB6 • Các thơng báo l i (error messages) Ngồi ra, trong Help th ưng cĩ Example . B n click lên ch Example đ display m t thí d minh h a cách dùng m t function hay property. Microsoft on the Web Web site c a Microsoft ch a nhi u thơng tin c p nh t cho nh ng ng ưi l p trình VB6. Trang ch Visual Basic đt t i URL Thơng tin cĩ s n t i đ a ch n y bao g m: • Cp nh t các đ c tính m i, các phiên b n s n ph m, các s n ph m liên h , các thuy t trình (seminar) và các ho t đ ng (event) đ c bi t. • Thơng tin b sung trên các đc tính VB6 ch a trong các bài vi t g i là White Papers, các mách nưc (tips) và các trình tr giáo, ngu n đào t o. • Sn ph m m i t i xu ng (download) bao g m s c p nh t đ n các file ch ươ ng trình, các c p nh t tr giúp, các trình điu khi n, và các file liên h khác c a VB6. ð truy c p Web site c a Microsoft, t menu Help ch n Microsoft on the Web r i ch n menu con tùy thích nh ư d ưi đây. 7
  8. Ghi chú: M t s n i dung trên Web site c a Microsoft đưc t i ưu hĩa dành cho Microsoft Internet Explorer và khơng th display đ y đ trong m t b trình duy t (browser) khác. Do đĩ b n nên ch dùng Internet Explorer làm browser trên máy b n mà thơi. Ch ươ ng Hai- Vi t ch ươ ng trình đu tiên Bn đang làm quen v i mơi tr ưng tri n khai l p trình (Integrated Development Environment - IDE) ca MS VB6 và r t nĩng ru t mu n vi t nh ng dịng mã đu tiên đ chào m ng th gi i. Ta th ơn l i m t s v n đ mà cĩ l b n đã bi t r i. M t ch ươ ng trình Visual Basic g m cĩ ph n mã lp trình và các hình nh (visual components). B n cĩ th thi t k ph n hình nh b ng cách dùng nh ng đ ngh (Controls hay Objects) t Túi đ ngh (Toolbox) n m bên trái. N u b n khơng th y cái Túi đ ngh thì dùng m nh l nh Menu View|Toolbox đ b t nĩ hi n ra. Khi b n b t đ u thi t k m t ch ươ ng trình b ng cách ch n Standard EXE, mơi tr ưng tri n khai l p trình (IDE) cho b n s n m t Form tên là Form1. B n cĩ th đ i tên (Name) nĩ trong cái c a s Propeties n m phía d ưi bên ph i (trong hình d ưi đây ta edit Name property c a Form1 thành ra frmMainForm). B n c ũng cĩ th s a đ t a (Title) c a form ra cái gì cĩ ý ngh ĩa h ơn b ng cách đ i Caption c a form c ũng trong c a s Propeties (trong hình d ưi đây ta edit Caption property c a form thành ra "Chi tiet cua ban toi"). 8
  9. Sp đ t các v t d ng lên Form Mu n đ t m t Control lên Form, click hình cái Control trong Toolbox r i Drag (b m nút trái c a con chu t r i kéo cho thành hình ch nh t tr ưc khi buơng nút trái ra) con chu t trên Form v thành c ca Control. Nh ng Controls b n s dùng th ưng nh t t Toolbox là Label (nhãn), Textbox (h p đ đánh ch vào) và CommandButton (nút b m m nh l nh). Trong hình trên ta cĩ ba Label và ba Textbox. Mu n s a ch Label1 ra "Ten" thì edit Property Caption. Cịn Textbox khơng dùng Property Caption mà dùng Property Text. Ta c ũng cĩ th thay đ i các Property Caption và Text trong khi ch y ch ươ ng trình (at run-time). Trong lúc thi t k (design time) b n cĩ th s a đ i ki u ch c a nh ng Controls b ng cách edit Property Font c a chúng trong ca s Properties (click bên ph i c a Property Font trong Properties Window, IDE s pop-up cái Font dialog đ b n l a ch n nh ng đ c tính c a Font nh ư trong hình d ưi đây). Nu b n th y b c mình t i sao cái c ch t cĩ (default size) c a các Control h ơi nh , b n cĩ th gi i quy t b ng cách s a c ch c a chính Form cho nĩ l n h ơn. Vì khi m t Control đưc đ t lên m t Form, nĩ th a k c ch c a Form. ð s p x p cho m t s Control th ng hàng v i nhau b n ch n c nhĩm r i dùng m nh l nh Menu Format|Align|Lefts .v.v N u b n ch ưa bi t cách ch n m t nhĩm Control thì cĩ hai cách. Cách th nh t b n đè nút Shift trong khi click các Control b n mu n ch n. Cái Control mà b n ch n sau cùng s là cái chu n đ các Control khác s làm gi ng theo. Cách th hai là Drag cho s i dây thun (rubber band) b c chung quanh các Control. Trong tr ưng h p các Control n y n m trong m t container, thí d nh ư m t khung (Frame) hay PictureBox, thì b n ph i click Form tr ưc, r i đè nút Ctrl trong khi Drag rubber band bao các Control. 9
  10. Ch a m i th c a m t d án VB Ti đây b n đ ý th y trong c a s bên ph i, phía trên, g i là Project Explorer, cĩ hình gi ng nh ư m t cái cây (tree) cho th y ta cĩ m t Form trong m t Project (d án). Project là m t cách ti n d ng đ ta sp x p nh ng gì c n thi t cho m t d án. Th ưng thì m t d án cĩ nhi u Form và cĩ th c n nhng th khác. Mi Form s đưc ch a vào đĩa d ưi d ng "frmMainForm. frm ". B n save m t form b ng menu command File | Save formfilename.frm . N u trong Form1 cĩ ch a hình nh (thí d b n dùng Properties Window đ ch n m t icon hình g ươ ng m t c ưi làm icon cho frmMainForm) thì các hình nh c a frmMainForm s đuc t đ ng ch a trong h s ơ "frmMainForm. frx ". L ưu ý là khơng nh t thi t tên c a h s ơ (file) mà b n ph i cho bi t khi ch a (save) ph i gi ng nh ư tên c a Form mà b n dùng trong ch ươ ng trình. Tuy nhiên b n nên dùng cùng m t tên cho c hai đ sau n y d tìm h s ơ n u cĩ th t l c. Theo qui ưc thơng th ưng, các Form đưc đ t tên b t đ u b ng " frm ", thí d nh ư "frmMainForm". Khi b n save m t Project thì cĩ ngh ĩa là save t t c h s ơ dùng cho d án, k c các Form và m t h sơ cho chính Project, thí d nh ư "MyFirstProg.vbp" ("vbp" là vi t t t ch Visual Basic Project). B n save Vb6 project b ng menu command File | Save Project . À, mu n đ i tên Project, b n click lên hàng trên cùng bên ph i trong c a s Project Explorer (Project1 (Project1.vbp)), r i edit tên c a Project trong c a s Properties phía d ưi. B n nên ch a t t c nh ng h s ơ dùng cho cùng m t Project trong cùng m t t p (Folder/Directory). Bn cĩ th dùng Notepad đ m ra xem ch ơi, coi trong "frmMainForm.frm" cĩ gì. B n s th y trong y g m cĩ hai ph n: ph n đ u là di n t các Control n m trong Form, ph n cịn l i là mã l p trình mà bn vi t. B n c ũng s chú ý là các properties mà b n đã s a cho các Control đ u đưc ghi l i trong ph n đ u nĩi trên. VB da vào ph n di n t các Control đ thi t l p l i (reconstruct) hình nh c a Form. 10
  11. Sau n y, khi đã lão luy n VB, b n cĩ th dùng m t ch ươ ng trình t đ ng ch (generate) ra nh ng hàng di n t các Control cho m t Form. ðĩ là k thu t dùng trong các Wizards c a VB đ ch m t s ch ươ ng trình kh i đ u cho chúng ta t các b ng k m (Template). Thêm mã l p trình đ x lý m t s c Hu h t l p trình trong Visual Basic là vi t mã đ x lý các s c (Event). Thí d mu n ch m d t ch ươ ng trình, ng ưi s d ng s click nút "Xuat". ð th c hi n điu n y trong khi tri n khai ch ươ ng trình b n doubleClick (click liên ti p 2 l n) nút "Xuat". VB IDE s vi t s n cho b n cái v c a m t Subroutine: Private Sub cmdXuat_Click() End ' B n ch vi t thêm dịng n y đ k t thúc ch ươ ng trình End Sub ð ý là tên (Name) c a nút Xuat là "cmdXuat" ("cmd" là vi t t t ch CommandButton), VB g n thêm du g ch d ưi và Event Click đ làm thành tên cmdXuat_Click c a Sub, ch ươ ng trình nh s đưc x lý khi ng ưi s d ng click nút Xuat. Ch ươ ng trình nh hay Subroutine n y cịn đưc g i là Event Handler cho Event Click. Hàng ch xanh lá cây là dùng đ gi i thích cho l p trình viên (g i là Comment), VB s hồn tồn khơng chú ý đn nĩ khi x lý Sub cmdXuat_Click. Comment cĩ ngh ĩa là chú thích. Trong VB chú thích b t đ u b ng d u single quote '. Khi VB th y d u ny là nĩ b qua nh ng gì cịn l i trên dịng mã. 11
  12. Là L p trình viên chuyên nghi p b n nên t p thĩi quen dùng Comment m i n ơi đ giúp ng ưi khác và chính b n hi u ch ươ ng trình c a mình. Nên nh là ti n phí t n đ b o trì m t ch ươ ng trình thì ít nh t là t ươ ng đươ ng v i s ti n b ra l n đ u đ tri n khai. B o trì cĩ ngh ĩa là th ăm vi ng l i ch ươ ng trình đ s a l i (fix bug) và thêm các đc đim cho hay h ơn (enhancement). Nĩi chung h b n làm điu gì bí hi m hay c c c thì làm ơn gi i thích rõ ràng. Nu mu n c t m t dịng mã VB ra làm hai dịng thì ch m d t dịng th nh t b ng d u g ch d ưi _. Ti p theo, b n doubleClick nút "Viet vao dia" và vi t nh ng hàng mã sau: Private Sub cmdViet_Click() Open "myFriends.txt" For Output As #2 ' M m t h s ơ đ vi t ra và g i là c ng s 2 ' Vi t vào c ng s 2: Tên, ða ch và Tu i, ng ăn cách nhau b ng d u ch m ph y Print #2, txtTen & ";" & txtDiachi & ";" & txtTuoi Close #2 ' ðĩng c ng s 2 End Sub Trong Sub cmdViet_Click, tr ưc h t ta m m t h s ơ tên là " myFriends.txt " và g i nĩ là c ng s 2. Sau khi m h s ơ đ vi t ra ta ráp Tên, ða ch và Tu i l i, ng ăn cách b ng d u ch m ph y ( ;) đ đánh du nh sau n y ta mu n g riêng ba th ra tr l i. D u " &" là operator đ ráp (concatenate) hai dịng ch (text string) l i v i nhau. Print #2 cĩ ngh ĩa là vi t ra c ng s 2, t c là h s ơ "myFriends.txt". Th chúng ta vi t ra c ng 2 là Tên, ða ch và Tu i (txtTen & ";" & txtDiachi & ";" & txtTuoi). Nh ng r c r i c a vi c m m t h s ơ Cái c ng s 2 trên là ta t ch n (arbitrary). Th t ra mu n g i c ng s m y c ũng đưc, mi n là ch ưa cĩ ph n nào khác trong cùng ch ươ ng trình n y đang dùng c ng s y. ðây là m t cách VB làm vi c cho ti n thay vì g i nguyên m t cái tên h s ơ dài. Nu mu n ch c ch n khơng trùng s cng v i ch nào khác, ta cĩ th làm nh ư sau: fileNo = freefile Ri thay th s 2 b ng ch fileNo trong Sub cmdViet_Click. freeFile là m t Function (ch ươ ng trình nh dùng đ tính ra m t th gì) nh VB c p phát cho m t con s đ i di n h s ơ ch ưa ai dùng. Ch Output trong câu ( Open "myFriends.txt" For Output As #2 ) dùng đây đ nĩi t CPU (Central Processing Unit) ta mu n "vi t ra" m t h s ơ. Khi m m t h s ơ đ vi t ra ki u n y thì n u h s ơ ch ưa cĩ nĩ s đưc d ng nên (created). N u h s ơ đã cĩ r i thì nĩ s b xố b (delete) và đng th i m t h sơ tr ng và m i s đưc d ng nên. ðng t chuyên mơn là "vi t ch ng lên" ( overwrite ). Nu ta m m t h s ơ đ " đ c vào" thì dùng ch " Input " thay vì " Output ". Cịn n u "vi t thêm" vào mt h s ơ cĩ s n (ch khơng overwrite h s ơ y) thì dùng ch " Append " thay vì "Output". Trong tr ưng h p y b n ph i ki m xem h s ơ "myFriends.txt" đã cĩ s n ch ưa. B n cĩ th vi t nh ư sau: If Dir("myFriends.txt") <> "" then ' N u h s ơ "myFriends.txt" hi n h u Open "myFriends.txt" For Append As #2 ' M m t h s ơ đ vi t thêm và g i là c ng s 2 Else Open "myFriends.txt" For Output As #2 ' M m t h s ơ đ vi t ra và g i là c ng s 2 End If Function Dir("myFriends.txt") dùng trên s cho ta tên c a h s ơ n u h s ơ hi n h u, ng ưc li nĩ s cho m t dịng ch tr ng (empty string), bi u hi u là "". T i đây, n u lanh ý b n s h i h s ơ "myFriends.txt" n m folder nào. Câu tr l i là khơng bi t ch c. N u b n ch ưa ch a (save) ch ươ ng trình vào d ĩa (vì m i vi t) thì nĩ nm folder c a VB6.EXE. Cịn nh ư đã ch a ch ươ ng trình r i thì cĩ l nĩ n m folder c a ch ươ ng trình b n. Mu n h s ơ "myFriends.txt" luơn luơn đi cùng v i ch ươ ng trình, b n cĩ th làm nh ư sau: 12
  13. MyLocalFolder = App.path ' L y folder c a ch ươ ng trình x lý c a b n If Right(MyLocalFolder,1) <> "\" then ' N u ch cu i cùng khơng ph i là backslash MyLocalFolder = MyLocalFolder & "\" ' thì g n thêm m t backslash cu i End If ' M m t h s ơ v i tên cĩ folder (full pathname) đ vi t ra và g i là cng s 2 Open MyLocalFolder & "myFriends.txt" For Output As #2 Cu i cùng ta đĩng h s ơ l i b ng câu Close #2 T rày VB cĩ th c p s 2 đ làm c ng cho ch khác trong ch ươ ng trình. Default Property c a m t Control "txtTen" đưc dùng đây là vi t t t cho "txtTen.text", vì Default Property c a m t TextBox là text ca nĩ. Default Property c a m t Control là Property đưc VB dùng khi b n ch cho tên c a Control mà thơi. Trong khi đĩ Default Property c a Label là Caption. Vì txtTen đưc dùng nh ư txtTen.txt đ nĩi đ n m t dịng ch , nên trong ch ươ ng trình ta nh c đ n nĩ y nh ư m t variable (mã s ) dùng cho m t string. Do đĩ v i qui ưc dùng ba ch đ u "txt" cho tên c a mt Textbox giúp ta nh n di n ngay nĩ khơng ph i là m t string variable bình th ưng. Hãy l ưu ý s khác bi t khi g i m t Sub trong hai tr ưng h p sau: Call CheckmyTextbox (txtDiachi) ' txtDiachi đưc xem là Textbox tr n vn CheckmyTextbox txtDiachi ' txtDiachi đưc xem là txtDiachi.text, m t dịng ch Th t các Control trên m t Form Trong ch ươ ng trình n y ta mu n ng ưi x d ng cho vào d ki n theo th t "Tên, ða ch , Tu i". Khi mi vào, ta mu n cái d u ch p t t (cursor ) n m trong txtTen ngay đ ng ưi x d ng kh i m t cơng click vào Textbox y khi mu n mang cursor tr l i đĩ. Ta nĩi là txtTen cĩ cái Focus. Sau khi ng ưi x d ng đã cho tên vào r i, cơ s đánh nút Tab đ di chuy n cursor qua Control ti p theo, mà ta mu n là txtDiachi. ð s p th t các Control cho s di chuy n c a cursor khi ng ưi x dng đánh nút Tab ta edit Property TabIndex c a các Control. TabIndex b t đ u b ng s 0. Nhi u khi ng ưi x d ng thích dùng nút Enter thay vì Tab đ di chuy n Cursor qua Control ti p theo, b n cĩ th làm nh ư sau cho Textbox txtTen: Private Sub txtTen_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' N u nút b m là Enter SendKeys "{TAB}" ' gi m o g i nút Tab KeyAscii = 0 ' Nu t tr ng nút Enter đ Windows khơng cịn lo cho nĩ End If End Sub Cho các Textbox khác nh ư txtDiachi, txtTuoi b n c ũng làm t ươ ng t nh ư v y. Khi b n doubleClick txtTen l n đ u đ vi t mã, VB cho b n Private Sub txtTen_Change() . B n ph i click cái Combobox bên ph i, phía trên c a Code Window, cho nĩ m ra và ch n Event KeyPress. 13
  14. Nu b n mu n ch ươ ng trình mình cịn chuyên nghi p h ơn, b n cho phép ng ưi x d ng b m nút Alt+o (b m nút Alt xu ng trong khi b m nút o) đ mang Cursor v txtTuoi hay Alt+d đ mang Cursor v txtDiachi. Mu n th b n ph i thêm vào d u " &" phía tr ưc các ch T, D và o trong Caption c a các label lblTen, lblDiachi và lblTuoi. K đĩ b n ph i cho giá tr TabIndex c a lblTen, txtTen, lblDiachi, txtDiachi, lblTuoi, txtTuoi liên ti p là 0,1,2,3,4,5. Khi ng ưi x d ng đánh Alt+o, VB s mang Cursor v nhãn lblTuoi, nh ưng vì khơng cĩ ch cho nĩ đáp trong label nên nĩ ph i đáp vào Control k đĩ, t c là txtTuoi. Khi ta đã cho TabIndex c a các Control nh ng giá tr k trên thì khi Form hi n ra Cursor s n m trong TextBox txtTen vì m c d u lblTen cĩ TabIndex nh nh t(0), nĩ khơng ph i là ch Cursor đáp lên đưc, nên Cursor ph i đáp lên textbox cĩ TabIndex value k đĩ, t c là 1. Nu b n khơng mu n Cursor ng ng l i m t TextBox nào thì edit Property TabStop c a TextBox đĩ cho b ng False. Trong tr ưng h p y ng ưi s d ng v n cĩ th click vào TextBox và s a dịng ch đĩ đưc nh ư th ưng. N u b n th t s khơng mu n cho phép ng ưi s d ng s a gì TextBox thì edit Property Enabled b ng False hay Property Locked b ng True. Khi Enabled c a m t TextBox b ng False thì TextBox tr nên m đi. Nhân ti n ta edit thêm d u "&" phía tr ưc các ch X và V trong Caption các CommandButton "Xuat" và "Viet vao dia". Sau n y ng ưi s d ng cĩ th b m Alt-X coi nh ư t ươ ng đươ ng v i click nút "Xuat". Nu nh trong Form b n cĩ nhi u Textbox quá, đ i nút Enter ra nút Tab cho t ng Textbox m t thì m t cơng quá. B n cĩ th làm m t cái chung cho c Form. T c là nĩi r ng b n khơng c n bi t nút Enter va m i đưc đánh TextBox nào, b n c nh m m t đ i nĩ ra nút Tab. Tr ưc h t b n ph i ch n (select) Form r i edit Property KeyPreview c a nĩ thành True. B n làm vi c ny đ d n Form gi t cái nút ng ưi s d ng đánh (keystroke) tr ưc khi TextBox th y. Form s tráo nút Enter thành Tab r i l ng l ng trao cho TextBox. B n cĩ th thay th t t c các KeyPress event handler ca các TextBox b ng đon mã nh ư sau: Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' N u nút b m là Enter SendKeys "{TAB}" ' gi m o g i nút Tab KeyAscii = 0 ' Nu t tr ng nút Enter đ Windows khơng cịn lo cho nĩ End If End Sub Khi b n doubleClick lên b t c ch nào trên Form khơng cĩ Control n m, l n đ u đ vi t mã, VB cho bn Private Sub Form_Load(). B n ph i click cái Combobox bên ph i, phía trên c a Code Window, cho nĩ m ra và ch n Event KeyPress. ðem ra trình làng ð làm thành m t h s ơ áp d ng EXE, b n dùng m nh l nh Menu File|Make MyFirstProg.exe. Cho thêm chút h ươ ng v c a cu c đ i tơi click Form r i edit Property Icon, ch n cho nĩ t folder: 14
  15. D:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc mt icon hình g ươ ng m t c ưi. R i b m m nh l nh Menu File|Save Project . Khi dùng Explorer đ xem các h s ơ c a MyFirstProg.vbp b n s th y nh ư d ưi đây: ðáng l tơi dùng m t folder khác thay vì VB98 đ ch a d án MyFirstProg.vbp. H s ơ MyFirstProg.vbw là Workspace (ch làm vi c) dành cho VB, ta khơng nên đng t i. Bn cĩ th làm m t Shortcut cho MyFirstProg.exe v i cái icon hình g ươ ng m t c ưi đ t lên Desktop đ ch y bên ngồi IDE c a VB. Cĩ l b n mu n Download h s ơ:MyFirstProg.zip , nén chung t t c các h s ơ nĩi trên trong d án MyFirstProg.vbp. Bây gi ngay trong VB IDE b n cĩ th ch y ch ươ ng trình b ng cách dùng m nh l nh Menu Run|Start hay b m F5 . Bn c ũng cĩ th Click lên d u tam giác ch v bên ph i (nút Play c a cassette) n m trong toolbar ngay phía d ưi VB menu. Cách nén các files trong m t folder thành m t zip file duy nh t ð g i nhi u files b ng cách đính kèm (attach) m t Email trên Internet ta c n ph i nén các files y thành m t file duy nh t, g i là Zip file. Tr ưc h t, trong Window Explorer b n ch n nh ng files b n mu n Zip chung l i. B n ch n nhi u files b ng cách đè nút Ctrl trong khi click lên tên t ng file m t. Nu b n đè lên nút Shift , thay vì nút Ctrl, thì c m i lúc b n click, Window Explorer s select c m t dc tên các files n m gi a tên hai files b n click m i nh t. Ngồi ra b n c ũng cĩ th dùng Menu Command Edit | Select All , hay Ctrl+A đ select t t c các files trong m t folder. ðây là tr ưng h p bn s dùng khi Zip t t c c các files trong m t VB6 project đ g i qua Th y/Cơ. Sau khi đã select các file r i, b n right click lên các file y đ context menu pop-up. Ch n Add to Zip . Nu b n khơng th y pop-up command Add to Zip thì là b n ch ưa install ch ươ ng trình Winzip. Trong tr ưng h p y, download Winzip t Internet và install. 15
  16. Bây gi b n th kh i đ ng VB6, đi d o quanh nĩ đ th bi t các ph n c a VB6 IDE, và th làm theo nh ư bài n y. N u cĩ th c m c gì thì h i Tutor c a b n. Ch ươ ng Ba - Form và các Controls thơng th ưng Hu h t các ch ươ ng trình VB6 đu cĩ ít nh t m t Form. Khi ta ch y ch ương trình, Form n y s hi n ra tr ưc h t đ ta ra l nh nĩ làm chuy n gì. Cái Form tr ng khơng ch làm đưc gì nhi u, nên ta đt lên Form nh ng controls nh ư Textbox(h p đ đánh ch vào), Label(nhãn), Commandbutton(nút b m mnh l nh), .v.v Các controls cho ta enter các d ki n đ ch ươ ng trình dùng x lý, và các controls cũng hi n th (display) k t qu cho chúng ta xem. Sp đ t controls lên Form Ta hãy b t đ u thi t k m t ch ươ ng trình m i (New Project) b ng cách ch n Standard EXE, mơi tr ưng tri n khai l p trình (IDE) cho b n s n m t Form tên là Form1. Mu n đ t m t Control lên Form, click hình cái Control trong Toolbox r i Drag (b m nút trái c a con chu t r i kéo cho thành hình ch nh t tr ưc khi buơng nút trái ra) con chu t trên Form v thành c c a Control. M t cách khác đ đ t mt control lên Form là doubleclick cái Control trong Toolbox, m t hình control s hi n ra trên Form. K đĩ b n d i control đi đ n ch mình mu n và resize nĩ. N u b t c lúc nào b n khơng th y Túi đ ngh (Toolbox) n m bên trái, b n cĩ th dùng m nh l nh Menu View|Toolbox đ b t nĩ hi n ra. Cĩ mt cách khác là click lên toolbox icon trên toolbar chính c a VB6. Nên nh r ng Toolbox c ũng là m t window nh ư các window khác. Khi nĩ hi n lên r i b n cĩ th n m (b m nút trái c a con chu t và gi nh ư v y ch khơng buơng ra) title nĩ đ d i đi n ơi khác. B n cĩ th đĩng nĩ b ng cách click lên d u x gĩc ph i phía trên. N u right click trên Toolbox, nĩ s display context sensitive menu, trong đĩ cĩ property dockable (cĩ th đ u b n) . N u m t window là 16
  17. dockable, sau khi b n d i nĩ đi kh i vi trí docked bình th ưng c a nĩ, b n cĩ th dock nĩ l i nh ư c bng cách double click lên title c a nĩ. Resize và di chuy n control Khi b n select m t control (click lên nĩ), chung quanh control s hi n ra resize handle, 8 nút đen d c theo chu vi c a control. Click lên các nút đen c a resize handle, b n cĩ th resize control. Cĩ m t cách khác đ resize control là dùng Shift + ArrowKey. B m nút Shift trong khi b m m t arrow key, control s l n ra hay thu h p theo chi u c a ArrowKey. Lưu ý: M t s control cĩ kích thưc t i thi u, b n khơng th làm cho nĩ nh h ơn đưc. Thí d nh ư Combobox, nĩ ph i cao đ đ display m t hàng text. Tươ ng t nh ư th , b m nút Ctrl trong khi b m m t arrow key, control s di chuy n theo chi u c a ArrowKey. Ngồi ra, nên nh r ng trong lúc ch ươ ng trình ch y (at run-time), trong code ta cĩ th thay đ i kích th ưc và v trí các controls d dàng, th m chí cĩ th làm cho chúng hi n ra hay bi n m t b ng cách s a đi value các property left, top, width, height và visible c a các controls. Alignment Grid ð giúp b n s p đ t ngay ng n các controls trên m t form, VB6 cho b n Alignment Grid. Nĩ là nh ng du đen c a các hàng d c và xuơi trên form. B n cĩ th làm cho các d u đen c a grid trên form bi n mt b ng cách dùng menu command Tools | Options đ display Option Dialog, k đĩ ch n Tag General và clear checkbox "Show Grid": 17
  18. Bn c ũng cĩ th nhân d p n y thay đ i kho ng cách chi u r ng (Width) và chiu cao (Height) c a các ch m đen c a grid. Kích th ưc nh nh t c a Width hay Height là 24. Hãy so sánh hai tr ưng h p form cĩ và khơng cĩ Show Grid nh ư d ưi đây: Control Locking Mt khi b n đã s p đ t kích th ưc và v trí c a các control trên form r i, r t d ta tình c thay đ i các đc tính y vì vơ ý click lên m t control. Do đĩ VB6 cho ta Menu command Format | Lock Controls đ khĩa chúng l i. Sau khi khĩa, cái hình ng khĩa trên menu b chìm xu ng. Nu sau ny b n mu n thay đ i kích th ưc ho c v trí c a chúng thì nh dùng Menu command Format | Lock Controls li. Sau khi m khĩa, cái hình ng khĩa trên menu hi n ra bình th ưng. Cài đt các Properties c a Form Nhi u property c a m t form nh h ưng đ n di n mo v t lý (physical appearance) c a nĩ. Property Caption s quy t đ nh text đưc hi u th trong title. N u Property BorderStyle c a form khơng ph i là Sizable thì User khơng th resize form at run-time. Property Icon quy t đ nh hình icon đuc dùng trong title c a form, nh t là khi form thu nh (minimized). N u b n khơng mu n cho phép User minimize hay maximize form thì set value c a property MinButton, MaxButton ra False. N u property ControlBox là False thì form s khơng cĩ nút minize, maximize hay close (x) trên gĩc ph i c a nĩ, đng th i form c ũng khơng display c icon bên gĩc trái title nh ư trong hình d ưi đây: 18
  19. V trí đ u tiên (top,left) c a form cĩ th đưc thay đ i trong design time b ng cách di chuy n hình nh ca nĩ trong window Form Layout: Property WindowState xác đnh Form s cĩ kích th ưc bình th ưng (normal=0), hay minimized (=1), maximized =(2). Lưu ý là property Font c a Form s đưc các control n m trên nĩ th a k . T c là khi b n đ t m t control lên form, property Font c a control y s t đ ng tr nên gi ng y nh ư c a form. Vài Event thơng d ng c a Form Nhìn t m t ph ươ ng di n, Form c ũng gi ng nh ư Control. Ta cĩ th instantiate m t form nhi u l n đ cĩ nhi u form t ươ ng t nhau. Trong thí d d ưi đây, ta instantiate Form2 hai l n đ cĩ MyForm và YourForm: Private Sub CmdCreateForms_Click() Dim MyForm, YourForm Set MyForm = New Form2 MyForm.Caption = "This is My Form" MyForm.Show MyForm.Move 1000, 1000 Set YourForm = New Form2 YourForm.Caption = "YOUR FORM IS HERE" YourForm.Show YourForm.Move 2000, 2000 End Sub Mt Form c ũng cĩ nhi u Events r t h u d ng. • F orm_Initialize : Event n y xãy ra tr ưc nh t và ch m t l n thơi khi ta instantiate form đ u tiên. Ta dùng Form_Initialize event đ th c hi n nh ng gì c n ph i làm chung cho t t c các instances c a form n y. • F orm_Load : Event n y xãy ra m i l n ta instantiate m t form. N u ta ch dùng m t instance duy nh t c a m t form trong ch ươ ng trình thì Form_Load coi nh ư t ươ ng đươ ng v i Form_Initialize. Ta dùng Form_Load event đ initialise variables, controls v.v. cho instance ny. Bên trong Form_Load b n khơng th dùng Setfocus cho m t control nào trên form vì form ch ưa 19
  20. hn thành hình (ra đi). Mu n làm vi c y b n ph i delay (trì ho n) m t chút xíu b ng cách dùng Control Timer đ đ i cho Form_Load đưc hồn t t. Thí d : Private Sub Form_Load() Timer1.Interval = 500 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Timer1.Enabled = False ' Timer1_Timer only execute once txtName.Setfocus ' Make Tab Cursor start at TextBox txtName End Sub • F orm_Activate : M i l n m t form tr nên active (current) thì nĩ generate m t Activate event. Ta cĩ th dùng event n y đ refresh display trên form. • F orm_QueryUnload : Khi User click d u x phía trên bên ph i đ close form thì nĩ generate QueryUnload event. Syntax c a Sub n y nh ư d ưi đây: Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) End Sub Event n y cho ta m t d p đ cancel Close action c a form (t c là khơng cho User close form) b ng cách set Cancel b ng 1. UnloadMode cho ta bi t ai, task hay form nào mu n close form n y. Ngồi ra, b n c ũng nên bi t r ng m t form t đng Load hay tr nên active n u b n nh c đ n nĩ, thí d nh ư dùng Form2.List1 . Khi m t form đã đưc loaded r i b n cĩ th hide (làm cho bi n m t) nĩ. K đĩ, khi b n show form ra tr l i thì form khơng cĩ gì thay đi. Nh ưng n u b n Unload m t form (thí d b ng cách dùng Unload Form2 ), r i sau đĩ load tr l i b ng cách dùng Form2.Show ch ng hn, thì Form ph i tr i qua quá trình Form_Load, và d ĩ nhiên form m t t t c nh ng gì cĩ tr ưc đây. Ngồi ra, Hide/Show m t form đã đưc loaded r i thì r t nhanh, cịn Unload/Load thì m t thì gi h ơn. Khi b n Show m t Form ch ưa hi n h u thì form s đưc loaded và show. ðơi khi b n mu n Load m t form, r i làm vi c v i nĩ tr ưc khi Show, trong tr ưng h p đĩ b n dùng Load Form2 r i m t ch p sau dùng Form2.Show . MDI Form ðơi khi b n mu n cĩ m t MDI form, t c là m t form cĩ th ch a nhi u form con bên trong. D ng MDIform n y th ưng đưc dùng trong các application nh ư wordprocessor đ cĩ th m nhi u document cùng m t lúc, m i document đưc hi n th trong m t form con. ð cĩ m t MDIForm b n cn ph i dùng menu command Project | Add MDI Form . M i VB6 project ch cĩ th cĩ t i đa m t MDIform. Mu n m t form tr thành m t form con b n set property MDI Child c a nĩ thành True. At run-time b n khơng th hide (bi n nĩ thành invisible) m t MDIChild form, nh ưng cĩ th minimize nĩ. Nu b n th t s mu n hide nĩ thì ph i dùng mánh l i là cho nĩ v trí (top,left) s âm l n h ơn kích th ưc nĩ đ nĩ n m ngồi t m hi n th c a form. Trong m t ch ươ ng trình dùng MDI Form, khi b n click MDI Form nĩ khơng nh y ra phía tr ưc và che các form con, nh ưng v n luơn luơn n m d ưi. 20
  21. Controls là gì? Controls v a cĩ hình, v a cĩ code ch y bên trong m t window nho nh , gi ng nh ư m t form. Khi ta lp trình VB6 ta l p ráp các controls (là nh ng v t d ng ti n ch ) trên m t hay nhi u form đ cĩ m t ch ươ ng trình nhanh chĩng. Ta giao d ch v i m t control qua ba đ c tính c a control: • P roperties: t p h p các đ c tính c a control mà ta cĩ th n đ nh lúc design time hay run-time. Cĩ nhi u properties v di n m o, n u ta thay đi at design time s th y k t qu hi n ra l p t c, thí d Font hay màu s c. • M ethods: nh ng gì control th c hi n đuc, t c là nh ng kh n ăng c a nĩ. • E vents: nh ng s c mà control s thơng báo cho chúng ta bi t khi nĩ xãy ra v i control. Khi m t event xãy ra VB6 s x lý m t Event Handler (thí d nh ư Sub Command1_Click()), mi n là chúng ta vi t code s n trong đĩ. N u khơng cĩ code thì coi nh ư chúng ta khơng thèm bi t đ n các event lo i đĩ. Cĩ m t s Events mà chúng ta th ưng x lý là: o C lick : xãy ra khi user click lên control. Ta th ưng dùng nĩ cho CommandButton và Listbox. o M ouseDown, MouseUp : m i khi User b m m t mouse button là cĩ m t MouseDown Event, khi User buơng nĩ ra thì cĩ m t MouseUp Event. Ta th ưng dùng MouseDown Event đ Popup context sensitive menu hay b t đ u m t di n bi n Drag. Thí d : Private Sub Foods_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then ' if Right button was pressed PopupMenu mnuActions ' popup a menu End If End Sub Private Sub DrinkList_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) DrinkList.drag ' Displaying a drag icon to start the drag process End Sub ð ý là Click khơng cho chúng ta thêm chi ti t gì v s c , trong khi MouseDown/MouseUp cho ta bi t v trí c a cursor, button nào c a Mouse đưc b m và lúc y User cĩ b m nút Shift, Ctrl hay Alt khơng. M i Click là đi đơi v i m t c p MouseDown/MouseUp. N u b n mu n x lý v a Click l n MouseDown thì ph i c n th n. Thí d b n mu n v a handle Click event v a handle Mouse Drag thì ph i làm sao phân bi t hai tr ưng h p. N u khơng User ch mu n th y k t qu c a Click mà l i th y control b t đ u display m t Drag icon thì s b c mình. o K eyPress : xãy ra khi user Press m t key. Ta th ưng dùng nĩ cho TextBox đ lo i ra (filter out) các keystrokes ta khơng ch p nh n. KeyPress cho ta ASCII value, m t con s cĩ giá tr t 1 đ n 255, ca key. Trong thí d d ưi đây, m t Enter key s đưc coi nh ư m t TAB key: 21
  22. Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' Swallow the character to avoid side effect SendKeys "{TAB}" ' Emulate entering a TAB End If End Sub o K eyDown, KeyUp : m i KeyPress event là cho ta m t c p KeyDown/KeyUp event. KeyDown/KeyUp cho ta KeyCode và Shift value. ð detect Function key ta c n dùng KeyDown event. Trong thí d d ưi đây, ta display Function key User b m: Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode >= 112) And (KeyCode <= 123) Then MsgBox "You pressed the Function key: F" & Trim(Str(KeyCode - 111)) End If End Sub o G LotFocus : Control tr nên active khi nĩ nh n đưc Focus. Nĩ s generate m t GotFocus Event. Ta cĩ th dùng nĩ đ đ i màu background c a m t text box nh ư trong thí d d ưi đây: Private Sub Text2_GotFocus() Text2.BackColor = vbYellow End Sub o L LostFocus : Th ưng th ưng h m t Control GotFocus thì tr ưc đĩ cĩ m t Control LostFocus. Ta cĩ th dùng Event n y đ Validate entry data hay thu x p cơng chuy n cho m t control v a m t Focus. Trong thí d d ưi đây, n u User khơng đánh vào m t con s trong Textbox Text1 thì s đưc thơng báo và Tab Cursor s tr l i Textbox Text1. Private Sub Text1_LostFocus() If Not IsNumeric(Text1.Text) Then MsgBox "Please enter a number!" Text1.SetFocus End If End Sub o r DagDrop : xãy ra khi ta drop m t cái gì lên control . Parameter Source cho ta bi t Control nào đã đưc Drag và Drop. Nhi u khi m t control cĩ th nh n drop t nhi u control khác nhau. Trong tr ưng h p đĩ ta ph i test xem ho c Control Type, ho c Name ho c Tag value c a Source control là gì đ tùy nghi x lý. 22
  23. Trong thí d d ưi đây, khi User drop mouse xu ng Textbox Text2, n u Source là m t Listbox, khơng c n bi t Listbox nào, thì ta copy dịng đưc ch n trong Listbox y qua Textbox Text2. Private Sub Text2_DragDrop(Source As Control, X As Single, Y As Single) If TypeOf Source Is ListBox Then Text2.Text = Source.Text End If End Sub TextBox TextBox là control đuc dùng nhi u nh t đ display text và nh n keystroke c a User đ s a đ i text cĩ sn hay cho vào text m i. Property chính và default c a Textbox là text , t c là th ưng th ưng Text2.text cĩ th đưc vi t t t là Text2. Ta cĩ th disable (khi n nĩ b t l c, khơng ph n ng gì h t và khơng cho s a đ i) m t text box b ng cách set Property Enable ra False (ch s b m đi), hay Lock (khơng cho s a đ i) m t text box b ng cách set Property Locked ra True (ch khơng b m ). Text cĩ th đưc Align (Alignment Property) đ display bên trái, chính gi a hay bên ph i c a h p nĩ. Bn cĩ th ch n BackColor và ForeColor cho background và text c a TextBox. Dùng Tag Palette khi ch n màu đ cĩ đúng m t màu b n mu n. Dĩ nhiên b n cĩ th l a ch n Font và c ch cho Text v i Font Property. Bn gi i h n s characters mà User cĩ th enter cho TextBox b ng cách set MaxLength Property. Nu Property Multiline là True thì User cĩ th enter nhi u hàng. At Design time, n u b n mu n enter multiline thì ph i nh b m nút Ctrl khi press Enter m i khi xu ng hàng. N u khơng VB6 IDE t ưng rng b n đã k t thúc editing. 23
  24. Mu n assign cho text box multiline text thì ph i nhét vào m i cu i hàng CarriageReturn và LineFeed characters. Thí d nh ư: Private Sub Command1_Click() Dim TextStr TextStr = "Bau ra bau lay ong cau" & vbCrLf ' Note: vbCrLf = chr(13) & chr(10) TextStr = TextStr & "Bau cau ca bong ngat dau kho tieu" Text1.Text = TextStr End Sub Nu b n mu n mách n ưc cho User v cách dùng m t textbox nào đĩ thì cĩ th dùng Property ToolTipText đ nĩ display mách n ưc m i khi mouse cursor n m lên textbox. Dùng Property TabIndex đ n đ nh th t cho Tab Cursor d ng m i khi User b m nút TAB đ d i TAB Cursor đn Textbox k ti p. N u b n khơng mu n Tab Cursor d ng m t TextBox nào thì set Property TabStop nĩ thành False. Tab Cursor khơng dng Textbox cĩ Property Enabled b ng False, nh ưng v n d ng Textbox cĩ property Locked b ng True. Nu b n mu n dùng Textbox làm m t Password field thì set Property PasswordChar b ng " *". Làm nh ư th s ép bu c Textbox display m i character b ng PasswordChar, t c là " *", đ ng ưi khác khơng đc đưc trong khi User enter m t Paswword. Properties SelLength, SelStart và SelText Nu b n mu n bi t đưc tình hình hi n th i c a Textbox: SelText cho b n dãy ch đang đưc selected. SelStart cho b n v trí c a insertion point (ch cursor flashing). SelLength cho bi t con s characters đã đưc selected. Nu b n mu n s a đ i text trong Textbox: SelText cho b n nhét vào m t dãy ch . SelStart cho b n n 24
  25. đnh v trí b t đ u c a dãy ch b n s p select. SelLength n đ nh s characters b n mu n ch n, b t đ u t SelStart. Dưi đây là m t thí d trong đĩ ta highlight text tìm đưc: Private Sub Form_Click () Dim Search, Where ' Declare variables. ' Get search string from user. Search = InputBox("Enter text to be found:") Where = InStr(Text1.Text, Search) ' Find the given string in Text1.Text. If Where > 0 Then ' If found, Text1.SelStart = Where - 1 ' set selection start and Text1.SelLength = Len(Search) ' set selection length. Else MsgBox "String not found." ' Notify user. End If End Sub CommandButton CommandButton r t ti n cho ta dùng vào vi c x lý m t chuy n gì khi User click lên button. Event ta dùng th ưng nh t cho CommanButton là Click. Ta dùng Property Caption c a CommandButton đ enter cái gì ta mu n display trên button. N u mu n cho phép User dùng ALT+E ( đè nút Atl trong lúc bm nút E) đ generate event click thì nhét d u " &" tr ưc ch E trong Caption c a button. Caption s display ch E v i m t g ch d ưi. Ngồi ra ta c ũng cĩ th cho thêm m t cái hình vào CommandButton b ng cách ch n m t icon cho property Picture và set Property Style ra Graphical, thay vì Standard. Lúc Run-time b n cĩ th thay đ i hình hay Caption c a CommandButton. Trong thí d d ưi đây, Caption c a CommandButton CmdOperation flip-flop gi a hai values Stop và Start: Private Sub CmdOperation_Click() If CmdOperation.Caption = "&Stop" Then CmdOperation.Caption = "St&art" Else CmdOperation.Caption = "&Stop" End If End Sub Label Mc đích chính c a Label là đ display, khơng cho User Edit nh ư Textbox. Do đĩ ta cĩ th dùng Property Font, ForeColor và Backcolor đ làm cho nĩ đp. Ngồi ra Property BorderStyle cĩ th cho Label l m xu ng n u b n set nĩ b ng Fixed Single. N u set property BackStyle b ng Transparent s 25
  26. tránh tr ưng h p Backcolor c a Label làm cho khơng đp. Label c ũng cĩ Property Tabindex. N u b n mu n dùng ALT key đ mang Tab Cursor v m t Textbox, hãy đ m t Label v i TabIndex b ng TabIndex c a TextBox tr 1. Gi s Label cĩ Caption là "&Address" thì ALT+A s mang Tab Cursor v TextBox màu vàng nh ư trong thí d d ưi đây: Ngồi ra nh r ng b n cĩ th thay đi Caption c a Label lúc run-time. CheckBox CheckBox đưc dùng đ User xác nh n cĩ đ c tính nào m t cách nhanh chĩng. Property Value c a CheckBox cĩ th là Checked (làm cho h p vuơng cĩ d u, b ng 1), Unchecked (làm cho h p vuơng tr ng khơng, b ng 0) hay Grayed (làm cho h p vuơng cĩ d u màu nh t, b ng 2). M t khi bi t r ng CheckBox cĩ Value b ng 1, ta cĩ th đ c Caption c a CheckBox đ dùng n u c n. Bn cĩ th dùng Property Alignment đ làm cho Caption đng bên ph i (Left Justify) hay bên trái (Right Justify) c a h p vuơng. OptionButton OptionButton ( cịn g i là RadioButton) cĩ hình trịn v i m t ch m gi a, thay gì hình vuơng v i m t gch gi a nh ư CheckBox. OptionButton luơn luơn đưc qui t thành m t nhĩm, ch a trong m t container. Container là m t Control cĩ kh n ăng ch a các controls khác. Frame, PictureBox, hay chính Form đu là Container. Sau khi đt m t Container lên Form, n u mu n đ m t OptionButton lên Container, tr ưc h t ta ph i Select container, r i k đĩ ch n OptionButton. S d ĩ, t t c OptionButtons ph i n m trong m t container là vì b t c lúc nào, nhi u nh t là m t OptionButton trong container cĩ value True (vịng trịn cĩ ch m gi a). Mu n bi t m t OptionButton cĩ th t s n m trong m t container, b n th kéo cái container đi ch khác. N u OptionButton b d i theo container thì nĩ n m trong container. M t cách khác là th kéo OptionButton ra kh i container. N u kéo ra đưc thì nĩ khơng n m trong container. 26
  27. Mu n di chuy n m t OptionButton t container n y sang container khác, b n Cut OptionButton r i Paste nĩ vơ container kia. ðơi khi m t container n m che trên m t control khác. Mu n mang m t container ra phía sau các controls khác b n Select container r i dùng Menu command Format | Order | Send to Back . Ch ươ ng B n - Vi t Code Trong ba ch ươ ng đu chúng ta đã h c qua ba b ph n chánh c a m t ch ươ ng trình Visual Basic 6.0. ðĩ là: • Forms là cái n n hay khung đ ta xây d ng User Interface. • Controls là nh ng viên g ch đ ta dùng xây d ng User Interface. • Event procedures là code n m phía sau nh ng hình nh, nĩ là ch t keo dùng đ dán các Controls l i v i nhau đ t o thành ch ươ ng trình áp d ng c a ta. Nh ư ta đã th y, t t c các code đưc x lý (executed) khi cĩ m t Event xãy ra. Thí d nh ư khi User click mt CommandButton (Event Click) hay type nút Tab đ di chuy n Cursor t Textbox n y (Event Lostfocus) qua Textbox khác (Event GotFocus). Các nhĩm code x lý là : Private Sub Command1_Click() 27
  28. End Sub Private Sub Text1_LostFocus() End Sub và Private Sub Text2_GotFocus() End Sub Trong khi l p trình, m i l n ta double click lên m t Control c a m t Form là VB6 IDE t đ ng generate cho ta cái v t hàng Private Sub Control_Event () cho đn End Sub đ chúng ta đin nh ng hàng code c a mình vào chính gi a. ðiu khi n th t x lý các dịng code Gi d ta vi t m t ch ươ ng trình Vb6 đơ n gi n nh ư trong hình n y v i hai Textbox tên txtName, txtAge và m t nút tên CmdEnter n m trong m t form tên Form1: Thơng th ưng các dịng code đưc x lý theo th t t trên xu ng d ưi. Thí d nh ư đ ki m xem các d ki n v a đưc cho vào các Textbox cĩ t ươ ng đi h p lý hay khơng, khi User click nút CmdEnter, ta x lý Sub d ưi đây: Private Sub CmdEnter_Click() ' Make sure the Name field is not blank If txtName.Text = "" Then MsgBox "Please enter Name" Exit Sub ' Terminate this Sub End If ' Make sure a number is supplied for Age If Not IsNumeric(txtAge.Text) Then MsgBox "Please enter a number for Age" Exit Sub ' Terminate this Sub End If End Sub Cái Sub nĩi trên cĩ ch Private n m phía tr ưc, ý nĩi ch n i trong cùng m t form ch a Control CmdEnter (t c là Form1 trong tr ưng h p n y) ta m i cĩ th g i (dùng) Sub CmdEnter_Click(). Thí d ta mu n khi User b m key "Enter" trên bàn phím sau khi cho vào chi ti t Textbox txtAge thì coi nh ư User đã click nút CmdEnter. Ta vi t nh ư sau: Private Sub txtAge_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' swallow Key Enter to avoid side effect 28
  29. CmdEnter_Click ' Call Private Sub CmdEnter_Click from the same form End If End Sub Khi ta dùng câu CmdEnter_Click làm m t dịng code (cịn g i là g i Sub CmdEnter_Click) thì coi nh ư t ươ ng đươ ng v i nhét t t c 10 dịng codes gi a hai hàng Private Sub CmdEnter_Click() và End Sub t i ch câu CmdEnter_Click, nh ư vi t l i d ưi đây: Private Sub txtAge_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' Swallow Key Enter to avoid side effect ' Make sure the Name field is not blank If txtName.Text = "" Then MsgBox "Please enter Name" Exit Sub ' Terminate this Sub End If ' Make sure a number is supplied for Age If Not IsNumeric(txtAge.Text) Then MsgBox "Please enter a number for Age" Exit Sub ' Terminate this Sub End If End If End Sub Cĩ mt cách nĩi khác là khi execution đi đn hàng CmdEnter_Click thì nĩ nh y vào Private Sub CmdEnter_Click() đ execute cho đ n h t r i nh y tr l i hàng k ti p trong Private Sub txtAge_KeyPress(KeyAscii As Integer) Trong Private Sub CmdEnter_Click() n u User khơng đánh gì vào Textbox txtName thì ch ươ ng trình s display message "Please enter Name" r i Exit Sub . ðây là cách nh y ngay ra kh i Sub ch khơng đ i ph i execute xu ng t i hàng chĩt. Dùng IF THEN statement Trong Private Sub CmdEnter_Click() trên ta th y cĩ hai ch dùng IF THEN đ th xem m t điu ki n gì cĩ đưc th a mãn khơng. N u điu ki n là đúng v y, t c là True thì ta th c hi n nh ng gì đuc vi t t hàng IF THEN cho đn hàng END IF . Ng ưc l i, n u điu ki n khơng đúng thì execution nh y xu ng t i dịng code n m ngay d ưi dịng END IF . T c là cĩ khi execution s đi ngang qua, cĩ khi khơng đi ngang qua nh ng dịng code gi a câu IF THEN và câu END IF . ðiu ki n trong IF Statement là ph n n m gi a hai ch IF và THEN . Nĩ đuc g i là Logical Expression . Ta cĩ: txtName.text = "" ' content of Textbox txtName is nothing, i.e. an empty string và NOT IsNumeric(txtAge.text) ' content of TextBox txtAge is not a number Trong Logical Expression th nhì ta dùng Function IsNumeric đ đưc cho bit r ng txtAge.text cĩ ph i là m t con s hay khơng. Vì ta ch than phi n khi txtAge khơng ph i là m t con s nên ta ph i đ thêm ch NOT phía tru c. Tc là khi IsNumeric(txtAge.text) = False thì NOT IsNumeric(txtAge.text) = True Nu gi a IF THEN và END IF ch cĩ m t dịng code b n cĩ th nh p dịng code lên v i IF THEN và khơng dùng END IF . Tc là: 29
  30. If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!" End If is equivalent with If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!" Mt Logical Expression cĩ th đơn gi n (simple) nh ư trong các thí d trên hay r c r i h ơn n u ta ráp nhi u simple Logical Expression l i v i nhau b ng cách dùng nh ng t OR và AND . Khi hai Logical Expression đưc ráp l i b ng ch OR (HAY) thì ch c n ít nh t m t trong hai Expression là TRUE là Logical Expression t ng h p c ũng là TRUE. Cái TRUE Table cho OR nh ư sau: A B A OR B FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE Trong thí d d ưi đây n u m t ng ưi 25 tu i tr lên HAY cĩ l i t c trên 30 ngàn đơ la m t n ăm thì cho m ưn ti n đưc : If (PersonAge >= 25) Or (PersonIncome >= 30000) Then LendPersonMoney End If ð ý cách dùng các d u ngo c đơn gi ng nh ư trong tốn đi s . Thơng th ưng h cái gì n m trong ngo c thì mình tính tr ưc. N u cĩ nhi u l p d u ngo c thì tính theo th t t trong ra ngồi. Nh ư trong bài trên ta tính xem PersonAge >= 25 xem là TRUE hay FALSE, r i tính xem PersonIncome >= 30000 xem là TRUE hay FALSE, tr ưc khi tính k t qu t ng h p, d a vào cái TRUE table cho OR. Khi hai Logical Expression đưc ráp l i b ng ch AND (Và) thì ch khi nào c hai Expression đ u là TRUE, Logical Expression t ng h p m i là TRUE. Cái TRUE Table cho AND nh ư sau: A B A AND B FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE Trong thí d d ưi đây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t n ăm thì đă ng ký h c sinh m t đ i h c t ư: If (StudentAge >= 18) And (ParentIncome >= 100000) Then EnrollStudentAtPrivateUniversity End If 30
  31. Mt Logical Expression cĩ th t p h p c OR l n AND nh ư trong thí d d ưi đây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t n ăm HAY h c sinh cĩ Intelligent Quotient cao h ơn 160 thì đă ng ký h c sinh m t đ i h c t ư: If ((StudentAge >= 18) And (ParentIncome >= 100000) ) Or (StudentIQ > 160) Then EnrollStudentAtPrivateUniversity End If Hai d u ngo c đơn n m bên ngồi c a: ((StudentAge >= 18 ) And (ParentIncome >= 100000) ) khơng c n thi t vì theo qui ưc, ta tính AND expression tr ưc khi tính OR expression, nh ưng nĩ giúp ta đc d h ơn. Dùng IF THEN ELSE statement Hãy xem thí d : If (StudentPassmark > 75) Then ' Part A EnrollStudentAtPublicSchool Else ' Part B EnrollStudentAtPrivateSchool End If Nu h c sinh đ u v i s đim trên 75 thì cho h c tr ưng cơng, N U KHƠNG thì ph i h c tr ưng t ư. Tc là n u StudentPassmark > 75 là TRUE thì x lý ph n A, n u khơng thì x lý ph n B. ð ý ph n A g m nh ng dịng code n m gi a dịng If (StudentPassmark > 75) then và else . Cịn ph n B g m nh ng dịng code n m gi a dịng else và end if . Ta cĩ th ráp ch ELSE v i ch IF đ dùng nh ư trong thí d sau đây: 75) Then EnrollStudentAtPublicSchool ElseIf (StudentPassmark >= 55) Then EnrollStudentAtSemipublicSchool Else EnrollStudentAtPrivateSchool End If Nu h c sinh đ u v i s đim trên 75 thì cho h c tr ưng cơng, N U t 55 đim đ n 75 đim thì cho hc tr ưng bán cơng, n u khơng (t c là đim đ u d ưi 55) thì ph i h c tr ưng tư. Nu t nh nh , khơng cĩ tr ưng t ư, ta khơng cĩ quy t đ nh cho h c trị đu d ưi 55 đim h c đâu thì b ph n ELSE trong thí d trên. Ph n ch ươ ng trình tr thành: If (StudentPassmark > 75) Then EnrollStudentAtPublicSchool ElseIf (StudentPassmark >= 55) Then EnrollStudentAtSemipublicSchool End If Ta cĩ th dùng ELSEIF nhi u l n nh ư sau: 31
  32. If (TheColorYouLike = vbRed) Then MsgBox "You 're a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You 're a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You 're a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You 're a sad person" Else MsgBox "You 're an average person" End If Execution đi l n l ưt t trên xu ng d ưi, n u m t điu ki n IF là TRUE thì x lý ph n c a nĩ r i nh y xu ng ngay d ưi dịng END IF . Ch khi m t điu ki n IF khơng đưc th a mãn ta m i th m t điu ki n IF bên d ưi k đĩ. T c là n u b n thích màu đ l u màu tím (magenta) thì ch ươ ng trình s display "You're a lucky person", và khơng h bi t "You're a sad person". Dùng SELECT CASE statement Thí d cĩ nhi u ELSEIF nh ư trên cĩ th đưc vi t l i nh ư sau: Select Case TheColorYouLike Case vbRed MsgBox "You 're a lucky person" Case vbGreen MsgBox "You 're a hopeful person" Case vbBlue MsgBox "You 're a brave person" Case vbMagenta MsgBox "You 're a sad person" Else MsgBox "You 're an average person" End Select Cách vi t n y t ươ ng đi d đ c và ít nh m l n khi vi t code h ơn là dùng nhi u ELSEIF. Ph n ELSE trong Select Case statement thì optional (nhi m ý), t c là cĩ c ũng đưc, khơng cĩ c ũng khơng sao. H khi điu ki n c a m t Case đưc tho mãn thì nh ng dịng code t đĩ cho đ n dịng Case k d ưi hay Else đưc x lý và ti p theo execution s nh y xu ng dịng n m ngay d ưi dịng End Select . Nh là d ưi cùng ta vi t End Select , ch khơng ph i End If . Các Expression dùng cho m i tr ưng hp Case khơng nh t thi t ph i đơn gi n nh ư v y. ð bi t thêm chi ti t v cách dùng Select Case, b n highlight ch Case (doubleclick ch Case) r i b m nút F1 . Dùng FOR statement Trong l p trình, nĩi v Flow Control ( điu khi n h ưng đi c a execution) ta dùng hai lo i statement chính: Branch statements nh ư IF THEN ELSE (k c Select Case) và Iterative statements (l p đi, lp li) nh ư FOR và WHILE LOOP (Vịng). Ta s nĩi đ n WHILE Loop trong ph n k ti p. Trong khi Branch statement cho phép ta execute trong nhánh n y hay nhánh kia tùy theo value c a Logical Expression thì Iterative statement cho ta execute mt ph n code l p đi, lp l i nhi u l n cho đ n khi mt điu ki n đưc th a mãn. Gi d ta vi t m t ch ươ ng trình đơ n gi n đ tính t ng s các con s gi a b t c hai con s nào (coi ch ng l n quá). Cái form c a ch ươ ng trình gi ng nh ư d ưi đây: 32
  33. Sau khi cho hai con s From (T ) và To (Cho đn) ta click nút Calculate và th y k t qu hi n ra trong Textbox txtTotal. Cái Sub tính t ng s đưc li t ra d ưi đây: Private Sub CmdTotal_Click() Dim i, FromNo, ToNo, Total FromNo = CInt(txtFromNumber.Text) ' Convert Text string ra internal number b?ng Function CInt ToNo = CInt(txtToNumber.Text) ' Convert Text string ra internal number b?ng Function CInt Total = 0 ' Initialise Total value to zero For i = FromNo To ToNo ' Iterate from FromNo to ToNo Total = Total + i ' Add the number to the Total Next txtTotal.Text = CStr(Total) ' Convert internal number ra Text string End Sub Trong thí d trên, FOR loop b t đ u t dịng For i = FromNo To ToNo và ch m d t dịng Next . Khi execution b t đ u Total b ng 0, i b ng FromNo. Execution s đi qua h t nh ng dịng trong FOR loop r i value c a i s đưc t ăng lên 1, r i execution s b t đ u l i đ u loop. Trong thí d n y vì FromNo=4 và ToNo=6 nên execution s đi qua cái FOR loop 3 l n. L n th nh t i=4, l n th nhì i=5 ,và l n th ba thì i=6. Sau đĩ, khi i=7 thì nĩ l n h ơn ToNo (=6) nên execution nh y ra kh i FOR loop. Kt qu là Total=15 và đưc display trong Textbox txtTotal, sau khi đưc converted t internal number ra text string v i Function CStr. Nu ta ch mu n c ng nh ng s ch n t 4 đ n 16 ta cĩ th làm cho i t ăng value lên 2 (thay vì 1) m i khi đn cu i loop. T c là i=4,6,8 .v.v Ta s thêm ch STEP trong FOR statement nh ư sau: For i = 4 To 16 Step 2 ' Iterate from 4 to 16 with Step=2 Total = Total + i ' Add the number to the Total Next Total s b ng 4+6+8+10+12+14+16= 70. Trong thí d trên ta c ũng cĩ th dùng STEP s âm nh ư sau: For i = 16 To 4 Step -2 ' Iterate from 16 to 4 with Step=-2 Total = Total + i ' Add the number to the Total Next Trong tr ưng h p n y FOR loop b t đ u v i i=16. Khi đ n cu i loop l n th nh t value c a i b b t 2 và tr thành 14. Sau đĩ i b gi m giá tr d n d n đ n 4. K đĩ i=2 thì nh h ơn s cu i cùng (=4) nên execution nh y ra kh i FOR loop. Gi d ta mu n l y ra t t c nh ng blank space trong m t text string. Ta bi t con s characters trong mt text string, cịn g i là chi u dài c a text string cĩ th tính b ng cách dùng Function Len(TString). Và đ nĩi đ n character th i trong m t Text string ta dùng Mid Function. 33
  34. Khi User click button Remove Blank Spaces ch ươ ng trình s execute Sub d ưi đây: Private Sub CmdRemoveBlankSpaces_Click() Dim i, TLen, TMess TMess = "" ' Initialise temporary String to null string For i = 1 To Len(txtOriginalString.Text) ' Iterate from the first chracter to the last character of the string ' Check if chracter is NOT a blank space If Mid(txtOriginalString.Text, i, 1) <> " " Then ' Character is not a blank space - so append it to TMess TMess = TMess & Mid(txtOriginalString.Text, i, 1) End If Next txtResultString.Text = TMess ' Disaplay TMess by assigning it to txtResultString.text End Sub Thơng th ưng, ta dùng FOR loop khi bi t tr ưc execution s đi qua loop m t s l n nh t đ nh. Nh ưng th nh tho ng, khi m t điu ki n đưc th a mãn ta cĩ th ép execution nh y ra gi a ch ng kh i FOR loop, ch khơng đ i cho đ n đ s l n đi qua loop. Thí d nh ư ta mun bi t ph i c ng bao nhiêu s k ti p t 1 tr lên đ đưc t ng s v a l n h ơn hay b ng 76. Khi User click button Work Out , Sub d ưi đây s đưc x lý: Private Sub cmdWorkOut_Click() Dim i, Total, WantedTotal WantedTotal = CInt(txtWantedTotal.Text) ' Convert Text string ra internal number b?ng Function CInt Total = 0 ' Initialise Total value to zero For i = 1 To 30 34
  35. Total = Total + i ' Add the number to the Total If Total >= WantedTotal Then Exit For ' Jump out of FOR loop Next txtActualTotal.Text = CStr(Total) ' Display the Actual Total txtUptoNumber.Text = CStr(i) ' Display the highest number End Sub Dùng DO WHILE Loop statement Khi ta khơng bi t ch c là execution s đi qua loop bao nhiêu l n thì t t nh t là dùng DO WHILE Loop statement. Khàc v i FOR Loop, trong DO WHILE Loop ta ph i t lo initialisation (t c là m i vơ đ u i bng bao nhiêu) và t lo t ăng value c a parameter i. N u Logical Expression là True thì execute nh ng dịng code t DO WHILE cho đn Loop . Thí d m i v a qua cĩ th vi t l i b ng cách dùng DO WHILE Loop nh ư sau: Private Sub cmdWorkOut_Click() Dim i, Total WantedTotal = CInt(txtWantedTotal.Text) ' Convert Text string ra internal number b?ng Function CInt Total = 0 ' Initialise Total value to zero i = 1 ' Intialise at the first character Do While (Total " ") i = i - 1 ' Keep walking to the left Loop PriceInCents = Mid(TStr, i + 1) ' String including character "c" ' Discard the rightmost character which is "c" and convert the price string to single number Price = CSng(Left(PriceInCents, Len(PriceInCents) - 1)) txtPrice.Text = CStr(Price) ' Display the highest number 35
  36. End Sub Dùng Function Function là m t d ng subroutine gi ng gi ng nh ư Sub. Ch khác ch Function cho ta m t k t qu , cho nên cách dùng Function h ơi khác v i Sub. Ta vi t m t variable bên trái d u =, đưc assigned k t qu c a m t Function. Thí d nh ư ta dùng Trim Function đ lo i b nh ng blank space hai đ u c a text string TString: ResultString = Trim(TString) Ta đư a cho Function Trim m t text string called TString. Sau khi Function Trim đưc executed, ta cĩ kt qu nh ưng TString khơng h thay đ i. Ng ưc l i, khi ta g i m t Sub, t t c nh ng parameter ta đưa cho Sub đu cĩ th thay đ i tr khi ta tuyên b m t parameter nào đĩ là ByVal. Trong thí d sau, m t copy c a StringA đưc đưa cho Sub nên sau khi execute ProcessString, StringA khơng h b thay đi. Sub ProcessString (ByVal StringA, ConditionA, ConditionB) Public Sub và Function Khi ta dùng ch Public (thay vì Private) phía tr ưc m t Sub hay Function, ta cho phép code n m m t Form hay Basic Module khác cĩ th g i (hay dùng) Sub hay Function đĩ. Thí d trong Form2 ta cĩ đnh ngh ĩa DisplayData là: Public Sub DisplayData . . . . End Sub Trong Form1, ta g i DisplayDta nh ư sau: Form2.DisplayData Ch ươ ng Ba - Form và các Controls thơng th ưng Hu h t các ch ươ ng trình VB6 đu cĩ ít nh t m t Form. Khi ta ch y ch ươ ng trình, Form n y s hi n ra tr ưc h t đ ta ra l nh nĩ làm chuy n gì. Cái Form tr ng khơng ch làm đưc gì nhi u, nên ta đt lên Form nh ng controls nh ư Textbox(h p đ đánh ch vào), Label(nhãn), Commandbutton(nút b m mnh l nh), .v.v Các controls cho ta enter các d ki n đ ch ươ ng trình dùng x lý, và các controls cũng hi n th (display) k t qu cho chúng ta xem. Sp đ t controls lên Form Ta hãy b t đ u thi t k m t ch ươ ng trình m i (New Project) b ng cách ch n Standard EXE, mơi tr ưng tri n khai l p trình (IDE) cho b n s n m t Form tên là Form1. Mu n đ t m t Control lên Form, click hình cái Control trong Toolbox r i Drag (b m nút trái c a con chu t r i kéo cho thành hình ch nh t tr ưc khi buơng nút trái ra) con chu t trên Form v thành c c a Control. M t cách khác đ đ t mt control lên Form là doubleclick cái Control trong Toolbox, m t hình control s hi n ra trên Form. K đĩ b n d i control đi đ n ch mình mu n và resize nĩ. N u b t c lúc nào b n khơng th y Túi đ ngh (Toolbox) n m bên trái, b n cĩ th dùng m nh l nh Menu View|Toolbox đ b t nĩ hi n ra. Cĩ mt cách khác là click lên toolbox icon trên toolbar chính c a VB6. 36
  37. Nên nh r ng Toolbox c ũng là m t window nh ư các window khác. Khi nĩ hi n lên r i b n cĩ th n m (b m nút trái c a con chu t và gi nh ư v y ch khơng buơng ra) title nĩ đ d i đi n ơi khác. B n cĩ th đĩng nĩ b ng cách click lên d u x gĩc ph i phía trên. N u right click trên Toolbox, nĩ s display context sensitive menu, trong đĩ cĩ property dockable (cĩ th đ u b n) . N u m t window là dockable, sau khi b n d i nĩ đi kh i vi trí docked bình th ưng c a nĩ, b n cĩ th dock nĩ l i nh ư c bng cách double click lên title c a nĩ. Resize và di chuy n control Khi b n select m t control (click lên nĩ), chung quanh control s hi n ra resize handle, 8 nút đen d c theo chu vi c a control. Click lên các nút đen c a resize handle, b n cĩ th resize control. Cĩ m t cách khác đ resize control là dùng Shift + ArrowKey. B m nút Shift trong khi b m m t arrow key, control s l n ra hay thu h p theo chi u c a ArrowKey. Lưu ý: M t s control cĩ kích th ưc t i thi u, b n khơng th làm cho nĩ nh h ơn đưc. Thí d nh ư Combobox, nĩ ph i cao đ đ display m t hàng text. Tươ ng t nh ư th , b m nút Ctrl trong khi b m m t arrow key, control s di chuy n theo chi u c a ArrowKey. Ngồi ra, nên nh r ng trong lúc ch ươ ng trình ch y (at run-time), trong code ta cĩ th thay đ i kích th ưc và v trí các controls d dàng, th m chí cĩ th làm cho chúng hi n ra hay bi n m t b ng cách s a đi value các property left, top, width, height và visible c a các controls. Alignment Grid ð giúp b n s p đ t ngay ng n các controls trên m t form, VB6 cho b n Alignment Grid. Nĩ là nh ng du đen c a các hàng d c và xuơi trên form. B n cĩ th làm cho các d u đen c a grid trên form bi n mt b ng cách dùng menu command Tools | Options đ display Option Dialog, k đĩ ch n Tag General và clear checkbox "Show Grid": 37
  38. Bn c ũng cĩ th nhân d p n y thay đ i kho ng cách chi u r ng (Width) và chi u cao (Height) c a các ch m đen c a grid. Kích th ưc nh nh t c a Width hay Height là 24. Hãy so sánh hai tr ưng h p form cĩ và khơng cĩ Show Grid nh ư d ưi đây: Control Locking Mt khi b n đã s p đ t kích th ưc và v trí c a các control trên form r i, r t d ta tình c thay đi các đc tính y vì vơ ý click lên m t control. Do đĩ VB6 cho ta Menu command Format | Lock Controls đ khĩa chúng l i. Sau khi khĩa, cái hình ng khĩa trên menu b chìm xu ng. 38
  39. Nu sau n y b n mu n thay đ i kích th ưc ho c v trí c a chúng thì nh dùng Menu command Format | Lock Controls li. Sau khi m khĩa, cái hình ng khĩa trên menu hi n ra bình th ưng. Cài đt các Properties c a Form Nhi u property c a m t form nh h ưng đ n di n m o v t lý (physical appearance) c a nĩ. Property Caption s quy t đ nh text đưc hi u th trong title. N u Property BorderStyle c a form khơng ph i là Sizable thì User khơng th resize form at run-time. Property Icon quy t đnh hình icon đuc dùng trong title c a form, nh t là khi form thu nh (minimized). N u b n khơng mu n cho phép User minimize hay maximize form thì set value c a property MinButton, MaxButton ra False. N u property ControlBox là False thì form s khơng cĩ nút minize, maximize hay close ( x) trên gĩc ph i c a nĩ, đng th i form c ũng khơng display c icon bên gĩc trái title nh ư trong hình d ưi đây: V trí đu tiên (top,left) c a form cĩ th đưc thay đ i trong design time b ng cách di chuy n hình nh ca nĩ trong window Form Layout: Property WindowState xác đnh Form s cĩ kích th ưc bình th ưng (normal=0), hay minimized (=1), maximized =(2). Lưu ý là property Font c a Form s đưc các control n m trên nĩ th a k . T c là khi b n đ t m t control lên form, property Font c a control y s t đ ng tr nên gi ng y nh ư c a form. Vài Event thơng d ng c a Form Nhìn t m t ph ươ ng di n, Form c ũng gi ng nh ư Control. Ta cĩ th instantiate m t form nhi u l n đ cĩ nhi u form t ươ ng t nhau. Trong thí d d ưi đây, ta instantiate Form2 hai l n đ cĩ MyForm và YourForm: Private Sub CmdCreateForms_Click() Dim MyForm, YourForm Set MyForm = New Form2 MyForm.Caption = "This is My Form" MyForm.Show 39
  40. MyForm.Move 1000, 1000 Set YourForm = New Form2 YourForm.Caption = "YOUR FORM IS HERE" YourForm.Show YourForm.Move 2000, 2000 End Sub Mt Form c ũng cĩ nhi u Events r t h u d ng. • F orm_Initialize : Event n y xãy ra tr ưc nh t và ch m t l n thơi khi ta instantiate form đ u tiên. Ta dùng Form_Initialize event đ th c hi n nh ng gì c n ph i làm chung cho t t c các instances c a form n y. • F orm_Load : Event n y xãy ra m i l n ta instantiate m t form. N u ta ch dùng m t instance duy nh t c a m t form trong ch ươ ng trình thì Form_Load coi nh ư t ươ ng đươ ng v i Form_Initialize. Ta dùng Form_Load event đ initialise variables, controls v.v. cho instance ny. Bên trong Form_Load b n khơng th dùng Setfocus cho m t control nào trên form vì form ch ưa hn thành hình (ra đi). Mu n làm vi c y b n ph i delay (trì ho n) m t chút xíu b ng cách dùng Control Timer đ đ i cho Form_Load đưc hồn t t. Thí d : Private Sub Form_Load() Timer1.Interval = 500 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Timer1.Enabled = False ' Timer1_Timer only execute once txtName.Setfocus ' Make Tab Cursor start at TextBox txtName End Sub • F orm_Activate : M i l n m t form tr nên active (current) thì nĩ generate m t Activate event. Ta cĩ th dùng event n y đ refresh display trên form. • F orm_QueryUnload : Khi User click d u x phía trên bên ph i đ close form thì nĩ generate QueryUnload event. Syntax c a Sub n y nh ư d ưi đây: Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) End Sub Event n y cho ta m t d p đ cancel Close action c a form (t c là khơng cho User close form) b ng cách set Cancel b ng 1. UnloadMode cho ta bi t ai, task hay form nào mu n close form n y. Ngồi ra, b n c ũng nên bi t r ng m t form t đ ng Load hay tr nên active n u b n nh c đ n nĩ, thí d nh ư dùng Form2.List1 . Khi m t form đã đưc loaded r i b n cĩ th hide (làm cho bi n m t) nĩ. 40
  41. K đĩ, khi b n show form ra tr l i thì form khơng cĩ gì thay đi. Nh ưng n u b n Unload m t form (thí d b ng cách dùng Unload Form2 ), r i sau đĩ load tr l i b ng cách dùng Form2.Show ch ng hn, thì Form ph i tr i qua quá trình Form_Load, và d ĩ nhiên form m t t t c nh ng gì cĩ tr ưc đây. Ngồi ra, Hide/Show m t form đã đưc loaded r i thì r t nhanh, cịn Unload/Load thì m t thì gi h ơn. Khi b n Show m t Form ch ưa hi n h u thì form s đưc loaded và show. ðơi khi b n mu n Load m t form, r i làm vi c v i nĩ tr ưc khi Show, trong tr ưng h p đĩ b n dùng Load Form2 r i m t ch p sau dùng Form2.Show . MDI Form ðơi khi b n mu n cĩ m t MDI form, t c là m t form cĩ th ch a nhi u form con bên trong. D ng MDIform n y th ưng đưc dùng trong các application nh ư wordprocessor đ cĩ th m nhi u document cùng m t lúc, m i document đưc hi n th trong m t form con. ð cĩ m t MDIForm b n cn ph i dùng menu command Project | Add MDI Form . M i VB6 project ch cĩ th cĩ t i đa m t MDIform. Mu n m t form tr thành m t form con b n set property MDI Child c a nĩ thành True. At run-time b n khơng th hide (bi n nĩ thành invisible) m t MDIChild form, nh ưng cĩ th minimize nĩ. Nu b n th t s mu n hide nĩ thì ph i dùng mánh l i là cho nĩ v trí (top,left) s âm l n h ơn kích th ưc nĩ đ nĩ n m ngồi t m hi n th c a form. Trong m t ch ươ ng trình dùng MDI Form, khi b n click MDI Form nĩ khơng nh y ra phía tr ưc và che các form con, nh ưng v n luơn luơn n m d ưi. Controls là gì? Controls v a cĩ hình, v a cĩ code ch y bên trong m t window nho nh , gi ng nh ư m t form. Khi ta lp trình VB6 ta l p ráp các controls (là nh ng v t d ng ti n ch ) trên m t hay nhi u form đ cĩ m t ch ươ ng trình nhanh chĩng. Ta giao d ch v i m t control qua ba đ c tính c a control: • P roperties: t p h p các đ c tính c a control mà ta cĩ th n đ nh lúc design time hay run-time. Cĩ nhi u properties v di n m o, n u ta thay đ i at design time s th y k t qu hi n ra l p t c, thí d Font hay màu s c. • M ethods: nh ng gì control th c hi n đuc, t c là nh ng kh n ăng c a nĩ. • E vents: nh ng s c mà control s thơng báo cho chúng ta bi t khi nĩ xãy ra v i control. Khi m t event xãy ra VB6 s x lý m t Event Handler (thí d nh ư Sub Command1_Click()), mi n là chúng ta vi t code s n trong đĩ. N u khơng cĩ code thì coi nh ư chúng ta khơng thèm bi t đ n các event lo i đĩ. Cĩ m t s Events mà chúng ta th ưng x lý là: o C lick : xãy ra khi user click lên control. Ta th ưng dùng nĩ cho CommandButton và Listbox. o M ouseDown, MouseUp : m i khi User b m m t mouse button là cĩ m t MouseDown Event, khi User buơng nĩ ra thì cĩ m t MouseUp Event. Ta th ưng dùng MouseDown Event đ Popup context sensitive menu hay b t đ u m t di n bi n Drag. Thí d : Private Sub Foods_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then ' if Right button was pressed PopupMenu mnuActions ' popup a menu End If 41
  42. End Sub Private Sub DrinkList_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) DrinkList.drag ' Displaying a drag icon to start the drag process End Sub ð ý là Click khơng cho chúng ta thêm chi ti t gì v s c , trong khi MouseDown/MouseUp cho ta bi t v trí c a cursor, button nào c a Mouse đưc b m và lúc y User cĩ b m nút Shift, Ctrl hay Alt khơng. M i Click là đi đơi v i m t c p MouseDown/MouseUp. N u b n mu n x lý v a Click l n MouseDown thì ph i c n th n. Thí d b n mu n v a handle Click event v a handle Mouse Drag thì ph i làm sao phân bi t hai tr ưng h p. N u khơng User ch mu n th y k t qu c a Click mà l i th y control b t đ u display m t Drag icon thì s b c mình. o K eyPress : xãy ra khi user Press m t key. Ta th ưng dùng nĩ cho TextBox đ lo i ra (filter out) các keystrokes ta khơng ch p nh n. KeyPress cho ta ASCII value, m t con s cĩ giá tr t 1 đ n 255, ca key. Trong thí d d ưi đây, m t Enter key s đưc coi nh ư m t TAB key: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' Swallow the character to avoid side effect SendKeys "{TAB}" ' Emulate entering a TAB End If End Sub o K eyDown, KeyUp : m i KeyPress event là cho ta m t c p KeyDown/KeyUp event. KeyDown/KeyUp cho ta KeyCode và Shift value. ð detect Function key ta c n dùng KeyDown event. Trong thí d d ưi đây, ta display Function key User b m: Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode >= 112) And (KeyCode <= 123) Then MsgBox "You pressed the Function key: F" & Trim(Str(KeyCode - 111)) End If End Sub o G LotFocus : Control tr nên active khi nĩ nh n đưc Focus. Nĩ s generate m t GotFocus Event. Ta cĩ th dùng nĩ đ đ i màu background c a m t text box nh ư trong thí d d ưi đây: Private Sub Text2_GotFocus() Text2.BackColor = vbYellow End Sub 42
  43. o L LostFocus : Th ưng th ưng h m t Control GotFocus thì tr ưc đĩ cĩ m t Control LostFocus. Ta cĩ th dùng Event n y đ Validate entry data hay thu x p cơng chuy n cho m t control v a m t Focus. Trong thí d d ưi đây, n u User khơng đánh vào m t con s trong Textbox Text1 thì s đưc thơng báo và Tab Cursor s tr l i Textbox Text1. Private Sub Text1_LostFocus() If Not IsNumeric(Text1.Text) Then MsgBox "Please enter a number!" Text1.SetFocus End If End Sub o r DagDrop : xãy ra khi ta drop m t cái gì lên control . Parameter Source cho ta bi t Control nào đã đưc Drag và Drop. Nhi u khi m t control cĩ th nh n drop t nhi u control khác nhau. Trong tr ưng h p đĩ ta ph i test xem ho c Control Type, ho c Name ho c Tag value c a Source control là gì đ tùy nghi x lý. Trong thí d d ưi đây, khi User drop mouse xu ng Textbox Text2, n u Source là m t Listbox, khơng c n bi t Listbox nào, thì ta copy dịng đưc ch n trong Listbox y qua Textbox Text2. Private Sub Text2_DragDrop(Source As Control, X As Single, Y As Single) If TypeOf Source Is ListBox Then Text2.Text = Source.Text End If End Sub TextBox TextBox là control đuc dùng nhi u nh t đ display text và nh n keystroke c a User đ s a đ i text cĩ sn hay cho vào text m i. Property chính và default c a Textbox là text , t c là th ưng th ưng Text2.text cĩ th đưc vi t t t là Text2. Ta cĩ th disable (khi n nĩ b t l c, khơng ph n ng gì h t và khơng cho s a đ i) m t text box b ng cách set Property Enable ra False (ch s b m đi), hay Lock (khơng cho s a đ i) m t text box b ng cách set Property Locked ra True (ch khơng b m ). Text cĩ th đưc Align (Alignment Property) đ display bên trái, chính gi a hay bên ph i c a h p nĩ. Bn cĩ th ch n BackColor và ForeColor cho background và text c a TextBox. Dùng Tag Palette khi ch n màu đ cĩ đúng m t màu b n mu n. 43
  44. Dĩ nhiên b n cĩ th l a ch n Font và c ch cho Text v i Font Property. Bn gi i h n s characters mà User cĩ th enter cho TextBox b ng cách set MaxLength Property. Nu Property Multiline là True thì User cĩ th enter nhi u hàng. At Design time, n u b n mu n enter multiline thì ph i nh b m nút Ctrl khi press Enter m i khi xu ng hàng. Nu khơng VB6 IDE t ưng rng b n đã k t thúc editing. Mu n assign cho text box multiline text thì ph i nhét vào m i cu i hàng CarriageReturn và LineFeed characters. Thí d nh ư: Private Sub Command1_Click() Dim TextStr TextStr = "Bau ra bau lay ong cau" & vbCrLf ' Note: vbCrLf = chr(13) & chr(10) TextStr = TextStr & "Bau cau ca bong ngat dau kho tieu" Text1.Text = TextStr End Sub Nu b n mu n mách n ưc cho User v cách dùng m t textbox nào đĩ thì cĩ th dùng Property ToolTipText đ nĩ display mách n ưc m i khi mouse cursor n m lên textbox. 44
  45. Dùng Property TabIndex đ n đ nh th t cho Tab Cursor d ng m i khi User b m nút TAB đ d i TAB Cursor đn Textbox k ti p. N u b n khơng mu n Tab Cursor d ng m t TextBox nào thì set Property TabStop nĩ thành False. Tab Cursor khơng dng Textbox cĩ Property Enabled b ng False, nh ưng v n d ng Textbox cĩ property Locked b ng True. Nu b n mu n dùng Textbox làm m t Password field thì set Property PasswordChar b ng " *". Làm nh ư th s ép bu c Textbox display m i character b ng PasswordChar, t c là " *", đ ng ưi khác khơng đc đưc trong khi User enter m t Paswword. Properties SelLength, SelStart và SelText Nu b n mu n bi t đưc tình hình hi n th i c a Textbox: SelText cho b n dãy ch đang đưc selected. SelStart cho b n v trí c a insertion point (ch cursor flashing). SelLength cho bi t con s characters đã đưc selected. Nu b n mu n s a đ i text trong Textbox: SelText cho b n nhét vào m t dãy ch . SelStart cho b n n đnh v trí b t đ u c a dãy ch b n s p select. SelLength n đ nh s characters b n mu n ch n, b t đ u t SelStart. Dưi đây là m t thí d trong đĩ ta highlight text tìm đưc: Private Sub Form_Click () Dim Search, Where ' Declare variables. ' Get search string from user. Search = InputBox("Enter text to be found:") Where = InStr(Text1.Text, Search) ' Find the given string in Text1.Text. If Where > 0 Then ' If found, Text1.SelStart = Where - 1 ' set selection start and Text1.SelLength = Len(Search) ' set selection length. Else MsgBox "String not found." ' Notify user. End If End Sub CommandButton CommandButton r t ti n cho ta dùng vào vi c x lý m t chuy n gì khi User click lên button. Event ta dùng th ưng nh t cho CommanButton là Click. Ta dùng Property Caption c a CommandButton đ enter cái gì ta mu n display trên button. N u mu n cho phép User dùng ALT+E ( đè nút Atl trong lúc bm nút E) đ generate event click thì nhét d u " &" tr ưc ch E trong Caption c a button. Caption s display ch E v i m t g ch d ưi. Ngồi ra ta c ũng cĩ th cho thêm m t cái hình vào CommandButton b ng cách ch n m t icon cho property Picture và set Property Style ra Graphical, thay vì Standard. 45
  46. Lúc Run-time b n cĩ th thay đ i hình hay Caption c a CommandButton. Trong thí d d ưi đây, Caption c a CommandButton CmdOperation flip-flop gi a hai values Stop và Start: Private Sub CmdOperation_Click() If CmdOperation.Caption = "&Stop" Then CmdOperation.Caption = "St&art" Else CmdOperation.Caption = "&Stop" End If End Sub Label Mc đích chính c a Label là đ display, khơng cho User Edit nh ư Textbox. Do đĩ ta cĩ th dùng Property Font, ForeColor và Backcolor đ làm cho nĩ đp. Ngồi ra Property BorderStyle cĩ th cho Label l m xu ng n u b n set nĩ b ng Fixed Single. N u set property BackStyle b ng Transparent s tránh tr ưng h p Backcolor c a Label làm cho khơng đp. Label c ũng cĩ Property Tabindex. N u b n mu n dùng ALT key đ mang Tab Cursor v m t Textbox, hãy đ m t Label v i TabIndex b ng TabIndex c a TextBox tr 1. Gi s Label cĩ Caption là "&Address" thì ALT+A s mang Tab Cursor v TextBox màu vàng nh ư trong thí d d ưi đây: Ngồi ra nh r ng b n cĩ th thay đi Caption c a Label lúc run-time. CheckBox CheckBox đưc dùng đ User xác nh n cĩ đ c tính nào m t cách nhanh chĩng. Property Value c a CheckBox cĩ th là Checked (làm cho h p vuơng cĩ d u, b ng 1), Unchecked (làm cho h p vuơng tr ng khơng, b ng 0) hay Grayed (làm cho h p vuơng cĩ d u màu nh t, b ng 2). M t khi bi t r ng CheckBox cĩ Value b ng 1, ta cĩ th đ c Caption c a CheckBox đ dùng n u c n. 46
  47. Bn cĩ th dùng Property Alignment đ làm cho Caption đng bên ph i (Left Justify) hay bên trái (Right Justify) c a h p vuơng. OptionButton OptionButton ( cịn g i là RadioButton) cĩ hình trịn v i m t ch m gi a, thay gì hình vuơng v i m t gch gi a nh ư CheckBox. OptionButton luơn luơn đưc qui t thành m t nhĩm, ch a trong m t container. Container là m t Control cĩ kh n ăng ch a các controls khác. Frame, PictureBox, hay chính Form đu là Container. Sau khi đt m t Container lên Form, n u mu n đ m t OptionButton lên Container, tr ưc h t ta ph i Select container, r i k đĩ ch n OptionButton. S d ĩ, t t c OptionButtons ph i n m trong m t container là vì b t c lúc nào, nhi u nh t là m t OptionButton trong container cĩ value True (vịng trịn cĩ ch m gi a). Mu n bi t m t OptionButton cĩ th t s n m trong m t container, b n th kéo cái container đi ch khác. N u OptionButton b d i theo container thì nĩ n m trong container. M t cách khác là th kéo OptionButton ra kh i container. N u kéo ra đưc thì nĩ khơng n m trong container. Mu n di chuy n m t OptionButton t container n y sang container khác, b n Cut OptionButton r i Paste nĩ vơ container kia. ðơi khi m t container n m che trên m t control khác. Mu n mang m t container ra phía sau các controls khác b n Select container r i dùng Menu command Format | Order | Send to Back . 47
  48. Ch ươ ng B n - Vi t Code Trong ba ch ươ ng đu chúng ta đã h c qua ba b ph n chánh c a m t ch ươ ng trình Visual Basic 6.0. ðĩ là: • Forms là cái n n hay khung đ ta xây d ng User Interface. • Controls là nh ng viên g ch đ ta dùng xây d ng User Interface. • Event procedures là code n m phía sau nh ng hình nh, nĩ là ch t keo dùng đ dán các Controls l i v i nhau đ t o thành ch ươ ng trình áp d ng c a ta. Nh ư ta đã th y, t t c các code đưc x lý (executed) khi cĩ m t Event xãy ra. Thí d nh ư khi User click m t CommandButton (Event Click) hay type nút Tab đ di chuy n Cursor t Textbox n y (Event Lostfocus) qua Textbox khác (Event GotFocus). Các nhĩm code x lý là : Private Sub Command1_Click() End Sub Private Sub Text1_LostFocus() End Sub và Private Sub Text2_GotFocus() End Sub Trong khi l p trình, m i l n ta double click lên m t Control c a m t Form là VB6 IDE t đ ng generate cho ta cái v t hàng Private Sub Control_Event () cho đn End Sub đ chúng ta đin nh ng hàng code c a mình vào chính gi a. ðiu khi n th t x lý các dịng code Gi d ta vi t m t ch ươ ng trình Vb6 đơ n gi n nh ư trong hình n y v i hai Textbox tên txtName, txtAge và m t nút tên CmdEnter n m trong m t form tên Form1: 48
  49. Thơng th ưng các dịng code đưc x lý theo th t t trên xu ng d ưi. Thí d nh ư đ ki m xem các d ki n v a đưc cho vào các Textbox cĩ t ươ ng đi h p lý hay khơng, khi User click nút CmdEnter, ta x lý Sub d ưi đây: Private Sub CmdEnter_Click() ' Make sure the Name field is not blank If txtName.Text = "" Then MsgBox "Please enter Name" Exit Sub ' Terminate this Sub End If ' Make sure a number is supplied for Age If Not IsNumeric(txtAge.Text) Then MsgBox "Please enter a number for Age" Exit Sub ' Terminate this Sub End If End Sub Cái Sub nĩi trên cĩ ch Private n m phía tr ưc, ý nĩi ch n i trong cùng m t form ch a Control CmdEnter (t c là Form1 trong tr ưng h p n y) ta m i cĩ th g i (dùng) Sub CmdEnter_Click(). Thí d ta mu n khi User b m key "Enter" trên bàn phím sau khi cho vào chi ti t Textbox txtAge thì coi nh ư User đã click nút CmdEnter. Ta vi t nh ư sau: Private Sub txtAge_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' swallow Key Enter to avoid side effect CmdEnter_Click ' Call Private Sub CmdEnter_Click from the same form End If End Sub Khi ta dùng câu CmdEnter_Click làm m t dịng code (cịn g i là g i Sub CmdEnter_Click) thì coi nh ư t ươ ng đươ ng v i nhét t t c 10 dịng codes gi a hai hàng Private Sub CmdEnter_Click() và End Sub t i ch câu CmdEnter_Click, nh ư vi t l i d ưi đây: Private Sub txtAge_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' Swallow Key Enter to avoid side effect ' Make sure the Name field is not blank If txtName.Text = "" Then MsgBox "Please enter Name" Exit Sub ' Terminate this Sub End If ' Make sure a number is supplied for Age 49
  50. If Not IsNumeric(txtAge.Text) Then MsgBox "Please enter a number for Age" Exit Sub ' Terminate this Sub End If End If End Sub Cĩ m t cách nĩi khác là khi execution đi đn hàng CmdEnter_Click thì nĩ nh y vào Private Sub CmdEnter_Click() đ execute cho đ n h t r i nh y tr l i hàng k ti p trong Private Sub txtAge_KeyPress(KeyAscii As Integer) Trong Private Sub CmdEnter_Click() n u User khơng đánh gì vào Textbox txtName thì ch ươ ng trình s display message "Please enter Name" r i Exit Sub . ðây là cách nh y ngay ra kh i Sub ch khơng đ i ph i execute xu ng t i hàng chĩt. Dùng IF THEN statement Trong Private Sub CmdEnter_Click() trên ta th y cĩ hai ch dùng IF THEN đ th xem m t điu ki n gì cĩ đưc th a mãn khơng. N u điu ki n là đúng v y, t c là True thì ta th c hi n nh ng gì đuc vi t t hàng IF THEN cho đn hàng END IF . Ng ưc l i, n u điu ki n khơng đúng thì execution nhy xu ng t i dịng code n m ngay d ưi dịng END IF . T c là cĩ khi execution s đi ngang qua, cĩ khi khơng đi ngang qua nh ng dịng code gi a câu IF THEN và câu END IF . ðiu ki n trong IF Statement là ph n n m gi a hai ch IF và THEN . Nĩ đuc g i là Logical Expression . Ta cĩ: txtName.text = "" ' content of Textbox txtName is nothing, i.e. an empty string và NOT IsNumeric(txtAge.text) ' content of TextBox txtAge is not a number Trong Logical Expression th nhì ta dùng Function IsNumeric đ đưc cho bi t r ng txtAge.text cĩ ph i là m t con s hay khơng. Vì ta ch than phi n khi txtAge khơng ph i là m t con s nên ta ph i đ thêm ch NOT phía tru c. Tc là khi IsNumeric(txtAge.text) = False thì NOT IsNumeric(txtAge.text) = True Nu gi a IF THEN và END IF ch cĩ m t dịng code b n cĩ th nh p dịng code lên v i IF THEN và khơng dùng END IF . Tc là: If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!" End If is equivalent with If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!" Mt Logical Expression cĩ th đơn gi n (simple) nh ư trong các thí d trên hay r c r i h ơn n u ta ráp nhi u simple Logical Expression l i v i nhau b ng cách dùng nh ng t OR và AND . Khi hai Logical Expression đưc ráp l i b ng ch OR (HAY) thì ch c n ít nh t m t trong hai Expression là TRUE là Logical Expression t ng h p c ũng là TRUE. Cái TRUE Table cho OR nh ư sau: A B A OR B FALSE FALSE FALSE FALSE TRUE TRUE 50
  51. TRUE FALSE TRUE TRUE TRUE TRUE Trong thí d d ưi đây n u m t ngưi 25 tu i tr lên HAY cĩ l i t c trên 30 ngàn đơ la m t n ăm thì cho m ưn ti n đưc : If (PersonAge >= 25) Or (PersonIncome >= 30000) Then LendPersonMoney End If ð ý cách dùng các d u ngo c đơn gi ng nh ư trong tốn đi s . Thơng th ưng h cái gì nm trong ngo c thì mình tính tr ưc. N u cĩ nhi u l p d u ngo c thì tính theo th t t trong ra ngồi. Nh ư trong bài trên ta tính xem PersonAge >= 25 xem là TRUE hay FALSE, r i tính xem PersonIncome >= 30000 xem là TRUE hay FALSE, tr ưc khi tính k t qu t ng h p, d a vào cái TRUE table cho OR. Khi hai Logical Expression đưc ráp l i b ng ch AND (Và) thì ch khi nào c hai Expression đ u là TRUE, Logical Expression t ng h p m i là TRUE. Cái TRUE Table cho AND nh ư sau: A B A AND B FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE Trong thí d d ưi đây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t n ăm thì đă ng ký h c sinh m t đ i h c t ư: If (StudentAge >= 18) And (ParentIncome >= 100000) Then EnrollStudentAtPrivateUniversity End If Mt Logical Expression cĩ th t p h p c OR l n AND nh ư trong thí d d ưi đây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t n ăm HAY h c sinh cĩ Intelligent Quotient cao h ơn 160 thì đă ng ký h c sinh m t đ i h c t ư: If ((StudentAge >= 18) And (ParentIncome >= 100000) ) Or (StudentIQ > 160) Then EnrollStudentAtPrivateUniversity End If Hai d u ngo c đơn n m bên ngồi c a: ((StudentAge >= 18 ) And (ParentIncome >= 100000) ) khơng c n thi t vì theo qui ưc, ta tính AND expression tr ưc khi tính OR expression, nh ưng nĩ giúp ta đc d h ơn. Dùng IF THEN ELSE statement Hãy xem thí d : If (StudentPassmark > 75) Then ' Part A 51
  52. EnrollStudentAtPublicSchool Else ' Part B EnrollStudentAtPrivateSchool End If Nu h c sinh đ u v i s đim trên 75 thì cho h c tr ưng cơng, N U KHƠNG thì ph i h c tr ưng t ư. Tc là n u StudentPassmark > 75 là TRUE thì x lý ph n A, n u khơng thì x lý ph n B. ð ý ph n A g m nh ng dịng code n m gi a dịng If (StudentPassmark > 75) then và else . Cịn ph n B g m nh ng dịng code n m gi a dịng else và end if . Ta cĩ th ráp ch ELSE v i ch IF đ dùng nh ư trong thí d sau đây: 75) Then EnrollStudentAtPublicSchool ElseIf (StudentPassmark >= 55) Then EnrollStudentAtSemipublicSchool Else EnrollStudentAtPrivateSchool End If Nu h c sinh đ u v i s đim trên 75 thì cho h c tr ưng cơng, N U t 55 đim đ n 75 đim thì cho hc tr ưng bán cơng, n u khơng (t c là đim đ u d ưi 55) thì ph i h c tr ưng t ư. Nu t nh nh , khơng cĩ tr ưng t ư, ta khơng cĩ quy t đ nh cho h c trị đu d ưi 55 đim h c đâu thì b ph n ELSE trong thí d trên. Ph n ch ươ ng trình tr thành: If (StudentPassmark > 75) Then EnrollStudentAtPublicSchool ElseIf (StudentPassmark >= 55) Then EnrollStudentAtSemipublicSchool End If Ta cĩ th dùng ELSEIF nhi u l n nh ư sau: If (TheColorYouLike = vbRed) Then MsgBox "You 're a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You 're a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You 're a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You 're a sad person" Else MsgBox "You 're an average person" End If Execution đi l n l ưt t trên xu ng d ưi, n u m t điu kin IF là TRUE thì x lý ph n c a nĩ r i nh y xu ng ngay d ưi dịng END IF . Ch khi m t điu ki n IF khơng đưc th a mãn ta m i th m t điu ki n IF bên d ưi k đĩ. T c là n u b n thích màu đ l u màu tím (magenta) thì ch ươ ng trình s display "You're a lucky person", và khơng h bi t "You're a sad person". 52