Giáo trình Visual basic
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Visual basic", để 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:
giao_trinh_visual_basic.pdf
Nội dung text: Giáo trình Visual basic
- Giáo Trình Visual Basic Trung Tâm VNIT ĈҤI HӐC CÔNG NGHӊ THÔNG TIN Trung Tâm VNIT Biên soҥn : GV Bùi TiӃn Trѭӡng - 1 -
- Giáo Trình Visual Basic Trung Tâm VNIT Chѭѫng I : Tәng Quan VӅ Visual Basic Microsoft Visual Basic 6.0 là môi trѭӡng phát triӇn ӭng dөng tích hӧp (Integrated Development Environment ± IDE) cӫa Micorosoft dành cho lұp trình viên sӱ dөng ngôn ngӳ Visual Basic ÿӇ xây dӵng các ӭng dөng. Visual Basic 6.0 là mӝt thành phҫn cӫa bӝ công cө phát triӇn ӭng dөng Visual Studio 98 Các phiên bҧn chính: · MS Visual Basic 6.0 Learning Edition · MS Visual Basic 6.0 Professional Edition · MS Visual Basic 6.0 Enterprise Edition · Cách cài ÿһt Visual Basic 6.0 · Các yêu cҫu vӅ cҩu hình phҫn cӭng: CPU, Ә cӭng, RAM, · Cài ÿһt Visual Basic 6.0 tӯ bӝ cài ÿһt Visual Studio 98 · Cài ÿһt Visual Basic 6.0 tӯ bӝ cài ÿһt dành riêng cho Visual Basic · Cài ÿһt tài liӋu tham khҧo Microsoft Develop Network ± MSDN I, Khӣi ÿӝng chѭѫng trình VB Start à Programs à Microsoft Visual Studio 6.0 à Microsoft Visual Basic 6.0 Ĉѭӡng dүn : C:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE Biên soҥn : GV Bùi TiӃn Trѭӡng - 2 -
- Giáo Trình Visual Basic Trung Tâm VNIT II, Giӟi thiӋu giao diӋn cӱa sә làm viӋc cӫa VB II.1, Thanh công cө (Tool Box) (Menu View / Toolbox) Toolbox là cӱa sә chӭa các nút công cө vӟi các ÿLӅu khiӇn (Control) hay còn gӑi là các ÿӕi tѭӧng (Object) Fӫa VB. Có 2 loҥi nhóm công cө : - Công cө hӛ trӧ sҹn ngay khi khӣi ÿӝng chѭѫng trình - Công cө mӣ rӝng, ÿѭӧc lҩy thêm theo yêu cҫu cӫa chѭѫng trình. ViӋc lҩy thêm công cө tiӃn hành bҵng cách vào menu Project / chӑn mөc Components (phím Wҳt là Ctrl + T). ĈӇ lҩy công cө nào thì bҥn có thӇ tích chӑn vào nó rӗi ҩn OK Biên soҥn : GV Bùi TiӃn Trѭӡng - 3 -
- Giáo Trình Visual Basic Trung Tâm VNIT II.2, Cӱa sә Project Explorer (menu View / Project Explorer) Ctrl + R &ӱa sә Project Explorer dùng ÿӇ quan sát và quҧn lý toàn bӝ dӵ án mà Eҥn ÿang thiӃt kӃ. Trên cӱa sӕ này sӁ liӋt kê tên dӵ án và tҩt cҧ các form mà Eҥn ÿã thiӃt kӃ. ViӋc sҳp xӃp có thӇ theo nhóm thѭ Pөc hoһc theo vҫn tên form +ӛ trӧ chӭc năng giúp bҥn có thӇ gӑi xem thiӃt kӃ hoһc mã nguӗn cӫa form ÿѭӧc chӑn trong danh sách II.3, Thanh thuӝc tính (Properties) (mnu View / Properties Window) F4 Properties là thanh chӭa nhӳng tính chҩt quan trӑng cӫa các ÿӕi tѭӧng mà chѭѫng trình Visual Basic ÿã thiӃt kӃ Vҹn. Còn viӋc thiӃt lұp và sӱ dung thuӝc tính nhѭ thӃ nào thì tuǤ thuӝc vào ngѭӡi lұp trình. 0ӛi khi thay ÿәi viӋc lӵa chӑn công cө thì các thuӝc tính trên thanh Properties FNJng sӁ tӵÿӝng thay ÿәi theo. ViӋc sҳp xӃp các thuӝc tính có thӇ theo Yҫn Alpha hoһc theo nhóm chӭc năng Fӫa thuӝc tính. III, Tҥo/Lѭu Project làm viӋc III.1, Tҥo Project · Khӣi ÿӝng chѭѫng trình Visual Basic · Chӑn menu File / New Project ( Ctrl + N) Biên soҥn : GV Bùi TiӃn Trѭӡng - 4 -
- Giáo Trình Visual Basic Trung Tâm VNIT · Trong hӝp thoҥi New Project thì ta sӁ lӵa chӑn loҥi Project muӕn tҥo. Thông thѭӡng là lӵa chӑn Standard EXE, còn nӃu muӕn lұp trình các dӵ án vӟi cѫ sӣ Gӳ liӋu thì chӑn Data Project. · Khi ÿó chѭѫng trình VB sӁ có dҥng nhѭ sau : III.2, Lѭu Project 0ӝt trong nhӳng vҩn ÿӅ quan trӑng khi viӃt chѭѫng trình là lѭu lҥi nhӳng gì mình ÿã làm. Mһc dù chѭa có thao tác gì thay ÿәi trong Form trӕng, ra cNJng nên lѭu Form lên ÿƭa. Khi ra lѭu Project, có 2 loҥi tұp tin ÿѭӧc lѭu : 1. Tұp tin chӭa các thông tin VB cҫn trong viӋc xây dӵng Project. Tұp tin này có phҫn mӣ rӝng là VBP 2. Tұp tin chӭa thông tin vӅ Form. Tұp tin này có phҫn mӣ rӝng là FRM Các bѭӟc thӵc hiӋn : · Vào menu File / Save Project Biên soҥn : GV Bùi TiӃn Trѭӡng - 5 -
- Giáo Trình Visual Basic Trung Tâm VNIT · VB sӁ hiӋn lên hӝp thoҥi cho phép ta lӵa chӑn ÿѭӡng dүn ÿӇ lѭu bài. Ta chӑn ÿѭӡng dүn ÿӃn thѭ mөc riêng cӫa mình trong ÿƭa, sau ÿó ҩn Save /́u ý : Ta nên ÿͭi tên form tŕͳc khi thΉc hi͟n vi͟c ĺu. Tên ÿ͏t cho form tuǤ theo chc Qăng x΅ lý cͿa ch́˿ng trình, và th́͵ng b͇t ÿ̿u b͉ng frm IV, Các bѭӟc cѫ bҧn xây dӵng 1 chѭѫng trình (Hello) IV.1, Tҥo giao diӋn : gӗm 1 form , 1 textbox và 1 command button Texbox Command button ĈӇ vӁ 1 control (ÿLӅu khiӇn) ta Nhҩn chӑn ÿLӅu khiӇn trên toolbox ± trong bài này chӑn textbox. ChuyӇn con trӓ lên form tӟi vӏ trí muӕn ÿһt control, Nhҩn và Kéo chuӝt tӟi kích Fӥ cҫn có cӫa control. KӃt thúc bҵng cách Nhҧ chuӝt Biên soҥn : GV Bùi TiӃn Trѭӡng - 6 -
- Giáo Trình Visual Basic Trung Tâm VNIT Thay ÿәi kích cӥ, di chuyӇn, khoá 1 control : · ĈӇ thay ÿәi kích cӥ: nhҩn chӑn control, ÿһt chuӝt tӟi góc (phҧi, dѭӟi) và kéo chuӝt Wӟi kích cӥ mong muӕn. · ĈӇ thay ÿәi vӏ trí: kéo control tӟi vӏ trí bҵng chuӝt, rӗi thҧ chuӝt. · ĈӇ khoá cӕÿӏnh vӏ trí: sӱ dөng chӭc năng Format | Lock Controls IV.2, Ĉһt giá trӏ thuӝc tính cho ÿLӅu khiӇn : · Nhҩn chӑn control · HiӇn thӏ cӱa sә thuӝc tính: View | Properties · Chӑn thuӝc tính cҫn ÿһt tӯ : Properites List · Nhұp giá trӏ mӟi vào cӝt bên phҧi Ghi chú: · Object box: Danh sách form và các control trên form · Sort tabs: KiӇu sҳp xӃp danh sách các thuӝc tính: theo bҧng chӳ cái (Alphabetic) hay theo phân loҥi (Categorized) · Properties list: Danh sách các thuӝc tính gҳn vӟi ÿӕi tѭӧng ÿѭӧc chӑn (trên form hay tӯ object box) IV.3, ViӃt mã lӋnh 0ӣ Code Editor bҵng cách: Nhҩn ÿúp lên control hoһc chӑn View Code tӯ cӱa sә Project Explorer. Biên soҥn : GV Bùi TiӃn Trѭӡng - 7 -
- Giáo Trình Visual Basic Trung Tâm VNIT 7ҥo thӫ tөc ÿáp ӭng sӵ kiӋn : + Chӑn control tӯ hӝp danh sách bên trái (chӭa form và các control) + Chӑn tên sӵ kiӋn tӯ hӝp bên phҧi (chӭa danh sách sӵ kiӋn gҳn vӟi ÿӕi tѭӧng vӯa ÿѭӧc chӑn) Private Sub Command1_Click () Text1.Text = "Hello, world!" End Sub ĈӇ chuyӇn ÿәi giӳa hiӇn thӏ tҩt các thӫ tөc trên cùng 1 cӱa sә và hiӇn thӏ mӛi thӫ tөc tҥi 1 thӡi ÿLӇm: + Chӑn Tools | Options + Thay ÿәi các giá trӏ tѭѫng ӭng trong tab: Editor IV.4, Chҥy chѭѫng trình : · Chӑn Run | Start hay nhҩn F5ÿӇ chҥy chѭѫng trình · Chӑn Run | EndÿӇ dӯng chѭѫng trình ÿang chҥy · Chӑn Run | Break hay nhҩn ÿӇ kӃt thúc chѭѫng trình bҩt thѭӡng Chѭѫng II : Form và Control I, Thuӝc tính, sӵ kiӋn, phѭѫng thӭc : Form và control (ÿLӅu khiӇn) cӫa Visual Basic là các ÿӕi tѭӧng vӟi thuӝc tính (property), phѭѫng thӭc (method) và sӵ kiӋn (event). · Thuӝc tính : là các ÿһc ÿLӇm quy ÿӏnh ÿӕi tѭӧng, tұp hӧp các thuӝc tính cӫa control có thӇ thiӃt lұp khi thiӃt kӃ hay khi chҥy chѭѫng trình. · Phѭѫng thӭc : là các hành ÿӝng mà control có thӇ thӵc hiӋn ÿѭӧc Biên soҥn : GV Bùi TiӃn Trѭӡng - 8 -
- Giáo Trình Visual Basic Trung Tâm VNIT · Sӵ kiӋn : là sӵÿáp ӭng tác ÿӝng gҳn vӟi mӛi ÿӕi tѭӧng. Khi 1 sӵ kiӋn xҧy ra vӟi control thì chѭѫng trình sӁ tӵÿӝng xӱ lý 1 hàm sӵ kiӋn (Event_Handle). Ví dө khi bҥn kích vào 1 nút lӋnh trên form thì sӁ tӵ ÿӝng thӵc hiӋn hành ÿӝng Command_Click Chúng ta có thӇ coi FORM nhѭ 1 control ÿһc biӋt.Sau ÿây là mӝt sӕ sӵ kiӋn thông Gөng trên form : · Form_Initialize() : sӵ kiӋn này xҧy ra trѭӟc nhҩt và chӍ xҧy ra 1 lҫn duy nhҩt. Trong quá trình thӵc hiӋn chѭѫng trình ta ÿóng mӣ form nhiӅu lҫn thì sӵ kiӋn này chӍ xҧy ra ӣ lҫn mӣ form ÿҫu tiên · Form_Load() : sӵ kiӋn này luôn xҧy ra mӛi khi ta gӑi mӣÿӃn form · Form_Activate() : sau khi form xӱ lý xong sӵ kiӋn Form_Load(), nӃu không có gì thay ÿәi, chѭѫng trình sӁ phát sinh ra sӵ kiӋn này · Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) : Khi ngѭӡi sӱ dөng ҩn nút X ÿӇ ÿóng form thì sӁ tҥo ra sӵ kiӋn này, tham sӕ UnloadMode cho biӃt ai hay tác vө nào ÿóng form. Do ÿó ta có thӇ bҳt sӵ kiӋn này ÿӇ hӓi ngѭӡi sӱ dөng có chҳc muӕn ÿóng form hay không, nӃu không thì thiӃt lұp tham sӕ Cancel=1. II, Các ÿLӅu khiӇn cѫ sӣ : Các ÿLӅu khiӇn trong môi trѭӡng Visual Basic ÿѭӧc chia thành 2 loҥi, ÿLӅu khiӇn cѫ sӣ và ÿLӅu khiӇn mӣ rӝng. · ĈLӅu khiӇn cѫ sӣ gӗm nhӳng ÿLӅu khiӇn có thӇÿѭӧc sӱ dөng ngay trong bҩt kǤ màn hình thiӃt kӃ nào, ÿó là nhӳng ÿLӅu khiӇn mһc ÿӏnh do môi trѭӡng cung cҩp. · ĈLӅu khiӇn mӣ rӝng còn gӑi là nhӳng Component ÿӝc lұp, ta có thӇ thêm hoһc bӟt nhӳng Component khi thiӃt kӃ giao diӋn. Nhӡ các ÿLӅu khiӇn mӣ rӝng mà các giao diӋn cӫa ӭng dөng trӣ nên ÿa dҥng và và tiӋn dөng hѫn vӟi ngѭӡi dùng. Trong phҥm vi cӫa bài này, chúng ta sӁ tìm hiӇu ý nghƭa và cách sӱ dөng cӫa các ÿLӅu khiӇn cѫ sӣ. II.1, Các thuӝc tính chung cӫa ÿLӅu khiӇn : · Name : Tên cӫa công cө · Caption, Text : Chú Thích, Chú Giҧi, Nӝi Dung · BackColor ( Màu NӅn ) · ForeColor ( Màu Chӳ ) · Font : Chӑn Phông Chӳ · Top ( Trên ), Left ( Trái ) · Height ( ChiӅu Cao ), Width ( ChiӅu Ngang ) · Enabled : True : hiӋn công cө cho sӱ dөng False : làm mӡ chӭc năng không cho sӱ dөng · Visible : True : HiӇn thӏ công cө False : ҭn công cө không cho nhìn thҩy Biên soҥn : GV Bùi TiӃn Trѭӡng - 9 -
- Giáo Trình Visual Basic Trung Tâm VNIT II.2, Công cөÿLӅu khiӇn TEXTBOX 0ӝt trong nhӳng thành phҫn quen thuӝc ÿӕi vӟi nhӳng ngѭӡi làm viӋc trên môi trѭӡng Windows ÿó là TextBox, mӝt ÿLӅu khiӇn có dҥng hình hӝp và có thӇ nhұp văn bҧn vào nó. Văn bҧn trong TextBox có thӇ nhұp ӣ nhiӅu dòng khác nhau, có hӋ thӕng thanh cuӝn ÿӇ di chuyӇn qua các dòng, màu cӫa văn bҧn, « và có nhiӅu tính chҩt khác ta sӁ xem xét trong phҫn này. Các thuӝc tính và hành ÿӝng cӫa TextBox tұp trung vào viӋc [ӱ lý dӳ liӋu văn bҧn ÿѭӧc nhұp vào trong TextBox. Sau ÿây là mӝt sӕ các thuӝc tính và hành ÿӝng thông thѭӡng cӫa TextBox Name Trong môi trѭӡng lұp trình, ÿӏnh danh ÿӇ phân biӋt các biӃn, hàm, là thành phҫn không thӇ thiӃu và giá trӏ cӫa không ÿѭӧc trùng trong cùng mӝt phҥm vi sӱ dөng. Khi làm viӋc vӟi các ÿLӅu khiӇn cӫa Visual Basic thì ÿӏnh danh là thành phҫn có ҧnh hѭӣng nhiӅu ÿӃn cách thӭc viӃt chѭѫng trình, nó có thӇ tҥo ra mҧng các ÿLӅu khiӇn. Ĉӏnh danh cӫa ÿLӅu khiӇn sӁÿѭӧc lѭu giӳ trong thuӝc tính Name cӫa tӯng ÿLӅu khiӇn, không chӍ riêng gì ÿLӅu khiӇn TextBox mà nó có ý nghƭa cho tҩt cҧ các ÿLӅu khiӇn trong Visual Basic. Khi tҥo giá trӏ cho thuӝc tính Name phҧi tuân thӫ các qui tҳc ÿһt tên tѭѫng Wӵ nhѭ tên biӃn. Text Thuӝc tính lѭu trӳ nӝi dung cӫa ÿLӅu khiӇn. Có 2 cách ÿӇÿѭa nӝi dung vào cho thuӝc tính Text cӫa TextBox : trên màn hình giao tiӃp, nhұp trӵc tiӃp vào vùng nhұp liӋu cӫa ÿӕi tѭӧng TextBox hoһc là sӱ dөng phép gán trong cӱa sә lӋnh VD : Text1.Text = "B̹n gán giá trͣ cho thuͱc tính Text cͿa ÿL͙u khi͛n TextBox" MultiLine 9ӟi giá trӏ mһc ÿӏnh cӫa các thuӝc tính trong ÿLӅu khiӇn khi ÿѭӧc tҥo, ta sӁ có mӝt TextBox chӍ có thӇ nhұp văn bҧn trên 1 dòng, vӟi sӕ ký tӵ tӕi ÿa là 65.535 ký tӵ. Khi thiӃt kӃ TextBox, chiӅu dài hiӇn thӏ cӫa TextBox sӁ có thӇ nhӓ hѫn sӕ ký tӵ mà nó có thӇ lѭu trӳ, do ÿó khi văn bҧn hiӇn thӏ quá dài thì sӁ gây khó khăn cho ngѭӡi sӱ dөng khi làm viӋc vӟi văn bҧn. Ta có thӇ thiӃt lұp thuӝc tính MultiLine cӫa TextBox là True ÿӇ TextBox có thӇ hiӇn thӏ Yăn bҧn ӣ nhiӅu dòng và chuӛi văn bҧn sӁ tӵÿӝng xuӕng dòng khi dài hѫn chiӅu dài Fӫa TextBox. Alignment 1ӝi dung văn bҧn cӫa TextBox sӁÿѭӧc canh theo lӅ bên trái, ӣ chӃÿӝ mһc ÿӏnh. NӃu Eҥn muӕn văn bҧn cӫa mình hiӇn thӏ ӣ giӳa chӭ không phҧi là trái thì thuӝc tính Alignment cӫa TextBox sӁ giúp ta thӵc hiӋn ÿѭӧc ÿLӅu này. Thuӝc tính Alignment có thӇ nhұn mӝt trong ba giá trӏ sau: · 0 ± Left Justify : dùng ÿӇ canh trái · 1 ± Right Justify : dùng ÿӇ canh phҧi · 2 ± Center : dùng ÿӇ canh giӳa. Thuӝc tính canh lӅ cӫa TextBox ҧnh hѭӣng ÿӃn toàn bӝ khӕi văn bҧn có trong TextBox Biên soҥn : GV Bùi TiӃn Trѭӡng - 10 -
- Giáo Trình Visual Basic Trung Tâm VNIT MaxLength Nhѭÿã trình bày ӣ trên, sӕ ký tӕi ÿa có thӇ nhұp vào TextBox là 65.535 ký tӵ, tuy nhiên QӃu ta muӕn giӟi hҥn sӕ ký tӵ tӕi ÿa mà ngѭӡi dùng có thӇ nhұp vào TextBox thì khi ÿó ta dùng thuӝc tính MaxLength cӫa TextBox. Mһc ÿӏnh giá trӏ cӫa MaxLength bҵng 0 có nghƭa là TextBox có thӇ nhұn tӕi ÿa sӕ ký tӵ do chѭѫng trình qui ÿӏnh PasswordChar 1Ӄu bҥn muӕn tҥo mӝt ô ÿӇ cho ngѭӡi dùng nhұp mұt mã vào (các ký tӵ nhұp vào sӁ Wӵ ÿӝng ÿѭӧc hiӇn thӏ thành mӝt ký tӵ khác) thì ta phҧi sӱ dөng ÿӃn thuӝc tính PasswordChar. Thuӝc tính này sӁ nhұn là mӝt ký tӵ bҩt kǤ và chӍ duy nhҩt mӝt ký tӵ, khi ngѭӡi dùng nhұp nӝi dung vào TextBox, dӳ liӋu hiӇn thӏ trên TextBox là nhӳng ký tӵ Fӫa thuӝc tính PasswordChar, nhѭng nӝi dung ÿѭӧc nhұp trong thuӝc tính Text thì không thay ÿәi. Locked và Enabled 1Ӄu bҥn ÿӏnh viӃt mӝt chѭѫng trình tính tәng 2 sӕ, trên hӝp thoҥi bҥn sӱ dөng 2 TextBox dùng ÿӇ nhұp 2 sӕ cҫn tính tәng và mӝt TextBox ÿӇ chӭa kӃt quҧ cӫa phép tính. Khi này, TextBox kӃt quҧ chӍ nên ÿӇ cho ngѭӡi dùng xem kӃt quҧ và không cho hӑ thay ÿәi kӃt quҧ tính ÿѭӧc. Locked và Enabled là 2 giҧi pháp bҥn có thӇ chӑn ÿӇ tҥo ra nhӳng TextBox chӍ xem, không cho chӍnh sӱa. Khi giá trӏ cӫa Locked cӫa TextBox ÿѭӧc thiӃt lұp là True thì TextBox sӁ bӏ khoá, ngѭӡi dùng có thӇÿѭa con trӓ vào vùng nhұp liӋu cӫa ÿLӅu khiӇn, nhѭng sӁ không thӵc hiӋn ÿѭӧc thao tác nhұp trӵc tiӃp lên TextBox. TextBox không nhұn Focus khi thuӝc tính Enabled cӫa nó là False. Ngѭӡi sӱ dөng sӁ không thӇ nhұp dӳ liӋu vào TextBox, nӝi dung cӫa văn bҧn trong TextBox sӁ bӏ mӡ. Ĉây là ÿLӇm khác biӋt giӳa thuӝc tính Locked và Enabled. Ngѭӡi sӱ dөng sӁ không nhұn biӃt ÿѭӧc mӝt TextBox có Locked hay không cho ÿӃn khi hӑ thӵc hiӋn thao tác nhұp liӋu cho TextBox, nhѭng hӑ có thӇ GӉ dàng biӃt ÿѭӧc TextBox nào không thӇ nhұp liӋu khi nó bӏ làm mӡ bҵng thuӝc tính Enabled. Khi ta sӱ dөng mӝt trong hai thuӝc tính trên ÿӇ vô hiӋu hoá các TextBox thì nӝi dung Fӫa chúng sӁ không thӇ thay ÿәi trӵc tiӃp nhѭng vүn có thӇ thay ÿәi bҵng lӋnh cӫa chѭѫng trình. Ví dө :Text1.Text = "ĈL͙u khi͛n bͣ khoá" SetFocus Focus là vӏ trí cӫa con trӓ xuҩt hiӋn trên ÿLӅu khiӇn. Khi con trӓ nҵm ӣÿLӅu khiӇn nào thì ÿLӅu khiӇn ÿó ÿѭӧc gӑi là ÿang nhұn Focus. Trong khi chѭѫng trình ÿang chҥy, ta có thӇ ÿһt con trӓ vào bҩt kǤ ÿLӅu khiӇn nào có trên hӝp thoҥi làm viӋc, tҩt nhiên ÿLӅu khiӇn ÿó phҧi có khҧ năng nhұn Focus. ViӋc ÿһt Focus vào mӝt ÿLӅu khiӇn có thӇ thӵc hiӋn bҵng chuӝt, bàn phím, và có thӇ sӱ dөng lӋnh. Hành ÿӝng SetFocus dùng ÿӇ lҩy Focus vӅ cho ÿLӅu khiӇn khi cҫn, hành ÿӝng này gҫn nhѭ có ӣ tҩt cҧ các ÿLӅu khiӇn trong môi trѭӡng cӫa Visual Basic. Ví dө sau ÿây sӁ chuyӇn Focus ÿӃn cho ÿLӅu khiӇn có tên Text1 Ví dө :Text1.SetFocus Biên soҥn : GV Bùi TiӃn Trѭӡng - 11 -
- Giáo Trình Visual Basic Trung Tâm VNIT Sau ÿây là mӝt vài sӵ kiӋn thѭӡng gһp khi làm viӋc vӟi TextBox Change 6ӵ kiӋn này sӁ phát sinh khi trong vùng nhұp liӋu cӫa ÿLӅu khiӇn có bҩt kǤ sӵ thay ÿәi nào Validate Sau khi nhұp nӝi dung cho TextBox, bҥn có thӇ kiӇm tra giá trӏ nhұp có hӧp lӋ hay không. NӃu giá trӏ không hӧp lӋ ta có thӇ yêu cҫu nhұp lҥi giá trӏ phù hӧp. 6ӵ kiӋn Validate sӁ phát sinh trѭӟc khi ta chuyӇn Focus sang ÿLӅu khiӇn khác, ta có thӇ gán giá trӏ True cho tham sӕ Cancel cӫa thӫ tөc xӱ lý sӵ kiӋn ÿӇ ngăn không cho Focus di chuyӇn sang ÿLӅu khiӇn khác Sau ÿây là mӝt vài xӱ lý cѫ bҧn trên TextBox Chӑn và thay thӃ nӝi dung trong TextBox Ta có thӇ thӵc hiӋn thao tác chӑn nӝi dung có trong TextBox bҵng chuӝt, bàn phím giӕng vӟi bҩt kǤ môi trѭӡng soҥn thҧo văn bҧn khác. Bên cҥnh ÿó, ta còn có thӇ thӵc hiӋn thao tác chӑn nӝi dung bҵng lӋnh thông qua cӫa thuӝc tính cӫa ÿLӅu khiӇn: SelLength, SelStart, SelText · SelLength: trҧ vӅ hay thiӃt lұp chiӅu dài cӫa sӕ ký tӵÿѭӧc chӑn trên TextBox · SelStart: trҧ vӅ hay thiӃt lұp vӏ trí bҳt ÿҫu cӫa nӝi dung ÿѭӧc chӑn, nӃu không có ký tӵ nào ÿѭӧc chӑn thì SelStart chính là vӏ trí mà nӝi dung có trong thuӝc tính SelText sӁÿѭӧc chèn vào · SelText: trҧ vӅ chuӛi ÿang ÿѭӧc chӑn hay gán chuӛi nӝi dung vào thuӝc tính Text tҥi vӏ trí SelStart Ví dө : Trên ô Text có nӝi dung nhѭ sau, khi ta bôi ÿen 1 ÿRҥn chӳ thì cho kӃt quҧ : ĈLӅu khiӇn viӋc nhұp liӋu vào TextBox Trong quá trình nhұp liӋu trên TextBox, ngѭӡi sӱ dөng có thӇ vô tình nhұp sai kiӇu dӳ liӋu, chҷng hҥn nhѭ nhұp chӳ cái vào vùng cӫa sӕÿLӋn thoҥi. Khi ÿó, chѭѫng trình phҧi phát sinh ra lӛi vӅ kiӇu dӳ liӋu mà ngѭӡi dùng không biӃt. ĈӇ hҥn chӃ viӋc có thӇ nhұp sai dӳ liӋu ta có thӇ hҥn chӃ bҵng cách dùng các sӵ kiӋn vӅ bàn phím ÿӇ kiӇm tra dӳ liӋu khi hӑ nhұp. Biên soҥn : GV Bùi TiӃn Trѭӡng - 12 -
- Giáo Trình Visual Basic Trung Tâm VNIT 6ӵ kiӋn KeyPress, KeyUp, KeyDown thѭӡng ÿѭӧc dùng ÿӇ giӟi hҥn viӋc nhұp liӋu cho ngѭӡi dùng. Trong ÿó, KeyPress sӱ dөng ÿӇ kiӇm tra nhӳng ký tӵ bình thѭӡng, không có các phím tә hӧp. Ví dө sau ÿây sӁ giӟi hҥn chӍ cho phép ngѭӡi dùng nhұp sӕ, sӱ dөng sӵ kiӋn KeyPress cӫa ÿLӅu khiӇn TextBox Text1 Private Sub Text1_KeyPress(KeyAscii As Integer) If (KeyAscii Asc("9")) And KeyAscii <> 8 Then KeyAscii = 0 End If End Sub II.3, Command Button, CheckBox và Option Group : Trong khi giao tiӃp giӳa ӭng dөng và ngѭӡi dùng, ngoài viӋc tҥo nhӳng vùng nhұp liӋu còn mӝt thao tác quan trӑng không thӇ thiӃu ÿó là ghi nhұn lҥi nhӳng chӑn lӵa cӫa hӑ. Cách ghi nhұn các chӑn lӵa cӫa ngѭӡi dùng mӝt cách trӵc quan nhҩt thông qua hӋ thӕng các nút bҩm. Có 3 loҥi nút trong môi trѭӡng cӫa Visual Basic, ÿó là Command Button, CheckBox, Option Button. - Command Button: là nhӳng nút bҩm có dҥng hình chӳ nhұt. - CheckBox: trҥng thái thông thѭӡng cӫa ÿLӅu khiӇn là Pӝt ô vuông. Click vào checkbox ÿӇ chӑn nó, click nó mӝt Oҫn nӳa ÿӇ bӓ chӑn. - Option Button: có trҥng thái là chӑn và không chӑn giӕng nhѭ checkbox, nhѭng nó ӣ dҥng hình tròn. Option Button thѭӡng phҧi sӱ dөng trong mӝt nhóm và ÿây cNJng là ÿLӇm khác biӋt giӳa CheckBox và Option Button: CheckBox có thӇ làm viӋc mӝt mình nhѭng Option Button thì phҧi làm viӋc theo nhóm. Khi ta click chӑn mӝt option button thì tҩt cҧ nhӳng option button khác có trong nhóm VӁ tӵÿӝng bӓ chӑn Các thuӝc tính, hành ÿӝng và sӵ kiӋn cӫa ÿLӅu khiӇn Các thuӝc tính cӫa ÿLӅu khiӇn có thӇÿѭӧc thiӃt lұp giá trӏ bҵng cӱa sә thuӝc tính cӫa ÿLӅu khiӇn khi thiӃt kӃ, hay giá trӏÿѭӧc gán khi chѭѫng trình ÿang chҥy (run time). Bên Fҥnh ÿó, có nhӳng thuӝc tính chӍ nhұn giá trӏ lúc chѭѫng trình ÿang thӵc thi. Caption Các ÿLӅu khiӇn khi ÿѭӧc tҥo ÿӅu mang mӝt ý nghƭa nhҩt ÿӏnh, Caption chính là thuӝc tính ÿӇ ngѭӡi sӱ dөng có thӇ biӃt ÿѭӧc ý nghƭa sӱ dөng cӫa nút ÿLӅu khiӇn. Thuӝc tính này có thӇ thay ÿәi lúc thiӃt kӃ hay lúc chѭѫng trình ÿang chҥy. Biên soҥn : GV Bùi TiӃn Trѭӡng - 13 -
- Giáo Trình Visual Basic Trung Tâm VNIT Trong môi trѭӡng Windows, ta có thӇ di chuyӇn ÿӃn mӝt ÿLӅu khiӇn nhanh bҵng phím Wҳt nӃu có. Phím tҳt là sӵ kӃt hӧp cӫa phím Alt và mӝt ký tӵ bҩt kǤ. Ta có thӇ tҥo phím Wҳt ÿӇ di chuyӇn ÿӃn các nút ÿLӅu khiӇn bҵng cách thêm dҩu & trѭӟc ký tӵ cҫn tҥo phím NӃt hӧp ӣ thuӝc tính Caption. Ví dө : Tҥo phím tҳt Atl + T ÿӇ di chuyӇn ÿӃn nút ÿLӅu khiӇn có Caption Thӵc hiӋn Caption: &Thӵc hiӋn à TKӵc hiӋn TabIndex Ta có thӇ di chuyӇn qua lҥi giӳa các ÿLӅu khiӇn theo mӝt thӭ tӵ tuҫn tӵ thông qua thuӝc tính TabIndex. Nhѭng trѭӟc tiên ta phҧi thiӃt lұp thuӝc tính TabStop cӫa ÿLӅu khiӇn là True, cho phép ÿLӅu khiӇn nhұn Focus khi ngѭӡi dùng tab ÿӃn nó. TabIndex có giá trӏ nhӓ nhҩt là 0, chӍ ra vӏ trí hiӋn hành cӫa ÿLӅu khiӇn so vӟi thӭ tӵ Tab Enabled Khác vӟi TextBox, các ÿLӅu khiӇn nút chӍ có thuӝc tính mӡ, không có thuӝc tính Locked. Khi giá trӏ cӫa thuӝc tính Enabled là False thì nút ÿLӅu khiӇn sӁ bӏ mӡ và ngѭӡi sӱ dөng không thӇ tѭѫng tác vӟi nó. Visible 0ӝt kӻ thuұt khi thiӃt kӃ thành phҫn giao tiӃp là cho ҭn nhӳng ÿLӅu khiӇn chѭa cҫn sӱ Gөng nhҵm tҥo cho hӝp thoҥi giao tiӃp có vӁ thoáng và tiӃt kiӋm ÿѭӧc không gian lѭu trӳ. Khi cҫn sӱ dөng thì sӁ cho xuҩt hiӋn ÿLӅu khiӇn cҫn thiӃt. Giá trӏ cӫa Visible bҵng False sӁ làm cho các ÿLӅu khiӇn không hiӇn thӏ khi chѭѫng trình ÿang chҥy. Ta có thӇ thay ÿәi giá trӏ cӫa thuӝc tính khi thiӃt kӃ cNJng nhѭ khi thӵc thi. Click Ĉây là sӵ kiӋn xӱ lý chính cӫa các nút ÿLӅu khiӇn. Sӵ kiӋn sӁ phát sinh khi ngѭӡi dùng thӵc hiӋn thao tác click chuӝt lên ÿLӅu khiӇn 0ӝt vài xӱ lý cѫ bҧn trên các nút ÿLӅu khiӇn Xác ÿӏnh trҥng thái cӫa ÿLӅu khiӇn CheckBox Khi trên màn hình giao tiӃp có nhiӅu CheckBox khác nhau thì lúc xӱ lý ta phҧi xác ÿӏnh ÿѭӧc ÿLӅu khiӇn nào ÿѭӧc chӑn. Thuӝc tính Value cӫa ÿLӅu khiӇn sӁ giúp ta xác ÿӏnh ÿѭӧc trҥng thái chính xác cӫa tӯng CheckBox, Value có thӇ chӭa 1 trong 3 giá trӏ sau: 0 là không có chӑn, 1 thì có chӑn và 2 là mӡ Ví dө : If Check1.Value = 1 then Check1.Caption = "Check 1 ÿ́ͻc chͥn" End if Ta cNJng có thӇ sӱ dөng thuӝc tính Value ÿӇ thiӃt lұp trҥng thái cho CheckBox khi chѭѫng trình ÿang chҥy. Ví dө sau sӁ xác ÿӏnh trҥng thái có chӑn cho ÿLӅu khiӇn Check1 Ví dө :Check1.Value = 1 Biên soҥn : GV Bùi TiӃn Trѭӡng - 14 -
- Giáo Trình Visual Basic Trung Tâm VNIT Xác ÿӏnh trҥng thái cӫa ÿLӅu khiӇn Option Group Khi làm viӋc vӟi Option Group ta phҧi tҥo nhóm cho các ÿLӅu khiӇn loҥi trӯ nhau. ĈӇ biӃt ÿѭӧc trҥng thái cӫa tӯng Option Group, ta phҧi dӵa vào thuӝc tính Value. NӃu giá trӏ cӫa Value là True thì ÿLӅu khiӇn ÿѭӧc chӑn. Tѭѫng tӵ nhѭ CheckBox, ta cNJng có thӇ Vӱ dөng thuӝc tính này ÿӇ chӑn hay bӓ chӑn cӫa Option Group. Ví dө : If Option1.Value=True then MsgBox "Nút ÿL͙u khi͛n ÿang ÿ́ͻc chͥn" Else MsgBox "Nút ÿL͙u khi͛n không ÿ́ͻc chͥn" End if Xác ÿӏnh trҥng thái cӫa ÿLӅu khiӇn Command Button Ví dө : Bài toán tính tәng dӵa trên phép tính ÿѭӧc lӵa chӑn tӯ OptionBox ThiӃt kӃ giao diӋn có dҥng nhѭ sau : Private Sub cmdtinh_Click() If Option1.Value Then Text3 = Val(Text1) + Val(Text2) End If If Option2.Value Then Text3 = Val(Text1) - Val(Text2) End If If Option3.Value Then Text3 = Val(Text1) * Val(Text2) End If If Option4.Value Then If Val(Text2) <> 0 Then Text3 = Val(Text1) / Val(Text2) Else Text3 = "E" End If End If End Sub Biên soҥn : GV Bùi TiӃn Trѭӡng - 15 -
- Giáo Trình Visual Basic Trung Tâm VNIT II.4, List Box và Combo Box List Box và Combo Box cNJng là hai ÿLӅu khiӇn cѫ sӣ cӫa môi trѭӡng Visual Basic nhѭng chúng có nhiӅu tính năng hӛ trӧ ngѭӡi sӱ dөng trong viӋc nhұp dӳ liӋu và giao tiӃp vӟi chѭѫng trình ӭng dөng. List Box có dҥng là mӝt danh sách liӋt kê các phҫn tӱÿã ÿѭӧc ÿѭa vào trong khi thiӃt NӃ, hay bҵng lӋnh. Ngѭӡi sӱ dөng chӍ có thӇ chӑn nhӳng phҫn tӱ có trong danh sách Fӫa List Box. List Box có hӛ trӧ thanh cuӝn nên ta có thӇ hiӇn thӏ dӳ liӋu ӣ nhiӅu dòng mà không làm tӕn nhiӅu không gian hiӇn thӏ. Combo Box là sӵ kӃt hӧp cӫa mӝt List Box và mӝt Text Box. Bҥn có thӇ cho phép ngѭӡi sӱ dөng chӑn mӝt phҫn tӱ trên List Box hoһc gõ trӵc tiӃp nӝi dung hӑ cҫn vào vùng Text Box. Các thuӝc tính, hành ÿӝng và sӵ kiӋn cӫa ÿLӅu khiӇn Các thuӝc tính cӫa ÿLӅu khiӇn có thӇÿѭӧc thiӃt lұp giá trӏ bҵng cӱa sә thuӝc tính cӫa ÿLӅu khiӇn khi thiӃt kӃ, hay giá trӏÿѭӧc gán khi chѭѫng trình ÿang chҥy (run time). Bên Fҥnh ÿó, có nhӳng thuӝc tính chӍ nhұn giá trӏ lúc chѭѫng trình ÿang thӵc thi. AddItem Khi làm viӋc vӟi List Box và Combo Box thì viӋc ÿҫu tiên cҫn thӵc hiӋn là phҧi tҥo nguӗn dӳ liӋu cho ÿLӅu khiӇn. Nguӗn dӳ liӋu có thӇÿѭӧc tҥo khi thiӃt kӃ, hay tҥo bҵng OӋnh lúc thӵc thi. Khi thiӃt kӃ, ta có thӇ tҥo nguӗn dӳ liӋu cho List Box, Combo Box thông qua thuӝc tính List trong cӱa sә thuӝc tính cӫa ÿLӅu khiӇn. Khi thӵc thi, ta có thӇ dùng hành ÿӝng AddItem ÿӇ tҥo dӳ liӋu nguӗn cho các ÿLӅu khiӇn, có dҥng nhѭ sau: VD : List1.AddItem ³Chuͯi nͱi dung c̿n thêm vào danh sách´ Combo1.AddItem ³Chuͯi nͱi dung c̿n thêm vào danh sách´ List, ListCount, ListIndex Nguӗn dӳ liӋu sau khi thêm vào cho ÿLӅu khiӇn sӁÿѭӧc chӭa trong thuӝc tính List cӫa ÿLӅu khiӇn. Thuӝc tính List ÿѭӧc tә chӭc là mӝt mҧng các phҫn tӱ, ÿӇ truy xuҩt tӯng phҫn trong List ta sӱ dөng chӍ sӕ cӫa mҧng. ChӍ sӕ cӫa mҧng tӯ 0 ÿӃn ListCount-1. ListCount cho biӃt tәng sӕ phҫn tӱ có trong Pҧng. Khi ta click vào mӝt phҫn tӱ trên ÿLӅu khiӇn, ÿӇ lҩy giá trӏ cӫa phҫn tӱÿó ta dùng thuӝc tính ListIndex và List. ListIndex là chӍ sӕ cӫa phҫn tӱÿѭӧc click. Ví dө : cho biӃt vӏ trí và nӝi dung cӫa phҫn tӱÿѭӧc chӑn trong List Private Sub List1_Click() MsgBox "Ph̿n t΅ th " & List1.ListIndex & " có giá trͣ : " & List1(List1.ListIndex) End Sub ItemData Khi bҥn cҫn lѭu trӳ mӝt giá trӏÿһc biӋt cùng vӟi phҫn tӱÿѭӧc thêm vào trong danh sách thì ItemData là cách giҧi quyӃt nhҽ nhàng và hiӋu quҧ. ItemData là mӝt mҧng các Vӕ nguyên, chӍ sӕ cӫa các phҫn tӱ trong ItemData ӭng vӟi chӍ sӕ cӫa List. Ta có thӇ sӱ Gөng thuӝc tính NewIndex, chӍ sӕ cӫa phҫn tӱ mӟi thêm vào bҵng lӋnh AddItem, ÿӇ ÿӗng bӝ giӳa chӍ sӕ cӫa List vӟi chӍ sӕ cӫa ItemData Ví dө :Combo1.AddItem "donTRUONGBT" Combo1.ItemData(Combo1.NewIndex) = 28121982 Biên soҥn : GV Bùi TiӃn Trѭӡng - 16 -
- Giáo Trình Visual Basic Trung Tâm VNIT RemoveItem, Clear Trong khi thӵc thi, nӃu muӕn xoá mӝt phҫn tӱ cӫa List Box ta sӱ dөng hành ÿӝng RemoveItem. NӃu muӕn xoá hӃt tҩt cҧ các phҫn tӱ có trong danh sách, dùng hành ÿӝng Clear Ví dө : List1.RemoveItem 1 à xoá ph̿n t΅ͷ vͣ trí th 2 trong listbox Combo1.Clear à xoá toàn bͱ nͱi dung trong listbox Multiselect, Selected cӫa List Box ĈLӅu khiӇn List Box cho phép ta chӑn nhiӅu phҫn tӱ cùng mӝt lúc. ĈӇ có thӇ chӑn nhiӅu phҫn tӱ cùng mӝt lúc, ta phҧi thiӃt lұp lҥi giá trӏ cho thuӝc tính Multiselect 0 chӍ cho phép chӑn mӝt phҫn tӱ 1 dùng chuӝt hay thanh Space bar ÿӇ chӑn nhiӅu phҫn tӱ 2 nhҩn giӳ phím Shift và click chuӝt ÿӇ chӑn nhiӅu phҫn tӱ có trong List Khi chѭѫng trình ÿang thӵc thi, ÿӇ biӃt ÿѭӧc nhӳng phҫn tӱ nào ÿѭӧc chӑn ta phҧi duyӋt qua danh sách các phҫn tӱ có trong List Box, sau ÿó dùng thuӝc tính Selected ÿӇ kiӇm tra. Thuӝc tính Selected cNJng ÿѭӧc tә chӭc ӣ dҥng mҧng. Mӝt phҫn tӱÿѭӧc chӑn QӃu giá trӏ cӫa Selected bҵng True Ví dө : For i = 0 To List1.ListCount - 1 If List1.Selected( i) = True Then MsgBox "Ph̿n t΅ th " & i & " ÿ́ͻc chͥn" End If Next Text cӫa Combo Box Combo Box ÿѭӧc tҥo thành bӣi Text Box và List Box, ÿӇ truy xuҩt giá trӏ cӫa List Box ta dùng thuӝc tính List nhѭÿã trình bày ӣ trên. Text Box sӁ chӭa giá trӏ hiӋn hành cӫa phҫn tӱÿѭӧc chӑn, ta có thӇ truy xuҩt giá trӏ này thông qua thuӝc tính Text cӫa ÿLӅu khiӇn. Ví dө : thӵc hiӋn các chӭc năng cѫ bҧn trên ListBox Biên soҥn : GV Bùi TiӃn Trѭӡng - 17 -
- Giáo Trình Visual Basic Trung Tâm VNIT II.5, Picture Box và Image Image là mӝt ÿLӅu khiӇn chӍ dùng ÿӇ hiӇn thӏ hình ҧnh lên màn hình giao tiӃp cӫa ӭng Gөng. Trong khi Picture Box có thӇ hiӇn thӏ hình ҧnh và thӵc hiӋn các thao tác xӱ lý trên ÿӕi tѭӧng ҧnh nhѭ là lѭu ҧnh vào ÿƭa, thӵc hiӋn các thao tác vӁ thông qua các hàm ÿӗ Kӑa cӫa hӋ thӕng, « Ta có thӇ sӱ dөng ÿLӅu khiӇn Picture Box nhѭ là Image nhѭng phҧi quan tâm mӝt ÿLӅu là ÿLӅu khiӇn Image chiӃm ít vùng nhӟ và có thao tác tӵ vӁ lҥi nhanh hѫn nhiӅu so vӟi Picture Box. Picture Box chiӃm nhiӅu vùng nhӟ và tӕn nhiӅu thӡi gian xӱ lý nhiӅu hѫn Image. ĈLӇm ÿһc biӋt cӫa ÿLӅu khiӇn Picture Box là có thӇ làm vұt chӭa có các ÿLӅu khiӇn khác và là ÿLӅu khiӇn có thӇÿѭӧc Wҥo trӵc tiӃp trên màn hình MDI. Trong cӱa sә thiӃt kӃ, Picture Box và Image ÿѭӧc thӇ hiӋn Gѭӟi dҥng biӇu tѭӧng ÿӗ hoҥ trên thanh Toolbox nhѭ hình bên, Picture Box là biӇu tѭӧng nҵm bên trong hình vuông ӣ trên, Image là biӇu tѭӧng nҵm bên trong hình vuông ӣ Gѭӟi. Biên soҥn : GV Bùi TiӃn Trѭӡng - 18 -
- Giáo Trình Visual Basic Trung Tâm VNIT Các thuӝc tính, hành ÿӝng và sӵ kiӋn cӫa ÿLӅu khiӇn Các thuӝc tính cӫa ÿLӅu khiӇn có thӇÿѭӧc thiӃt lұp giá trӏ bҵng cӱa sә thuӝc tính cӫa ÿLӅu khiӇn khi thiӃt kӃ, hay giá trӏÿѭӧc gán khi chѭѫng trình ÿang chҥy (runtime). Bên Fҥnh ÿó, có nhӳng thuӝc tính chӍ nhұn giá trӏ lúc chѭѫng trình ÿang thӵc thi. Picture Khi bҥn cҫn ÿѭa hình ҧnh lên màn hình giao tiӃp bҥn có thӇ tҥo Image hoһc Picture Box chӭa ҧnh cҫn hiӇn thӏ. Nӝi dung cӫa ҧnh sӁÿѭӧc chӭa trong thuӝc tính Picture cӫa ÿLӅu khiӇn. Giá trӏ cӫa thuӝc tính là ÿѭӡng dүn ÿӃn tұp tin ҧnh cҫn hiӇn thӏ. Giá trӏ này có thӇÿѭӧc thiӃt lұp khi thiӃt kӃ hay trong lúc thӵc thi. Khi thӵc thi, ta không thӇ gán trӵc tiӃp ÿѭӡng dүn ÿӃn tұp tin ҧnh cho thuӝc tính Picture mà phҧi thông qua mӝt hàm xӱ lý ÿӇ chuyӇn ҧnh tӯ tұp tin vào thuӝc tính Picture. Hàm [ӱ lý cҫn sӱ dөng là LoadPicture, hàm này sӁ nhұn tham sӕ vào là ÿѭӡng dүn ÿӃn tұp tin ҧnh Ví dө : Picture1.Picture = LoadPicture( "C:\ Sicily.bmp" ) Image1.Picture = LoadPicture( "C:\ Omertà.bmp") Stretch cӫa Image và AutoSize cӫa Picture Box Thuӝc tính Stretch cӫa Image khi thiӃt lұp là True sӁ làm thay ÿәi kích thѭӟc cӫa cӫa ҧnh theo kích thѭӟc cӫa ÿLӅu khiӇn nhѭng không làm thay ÿәi cҩu trúc cӫa ҧnh nguӗn. Ĉӕi tѭӧng Picture Box không thay ÿәi kích thѭӟc cӫa ҧnh nguӗn, nhѭng nó có thӇ tӵ ÿӝng thay ÿәi kích thѭӟc bҵng vӟi kích thѭӟc cӫa ҧnh thông qua thuӝc tính AutoSize Yӟi giá trӏÿѭӧc gán là True. II.6, Timer Ý nghƭa Trong các nhӳng ӭng dөng luôn có mӝt sӵ kiӋn tӵÿӝng phát sinh và tӗn tҥi ӣ bên dѭӟi chӍ có ngѭӡi lұp trình mӟi có thӇ can thiӋp xӱ lý sӵ kiӋn này, ÿó chính là sӵ kiӋn phát sinh theo thӡi gian. Môi trѭӡng phát triӇn cӫa Visual Basic cung cҩp khҧ năng xӱ lý sӵ kiӋn thӡi gian thông qua Timer. ĈLӅu khiӇn Timer giúp ta thӵc thi mӝt ÿRҥn lӋnh cӫa chѭѫng trình theo chu kǤ thӡi gian ÿѭӧc chӍÿӏnh. 6ӱ dөng ĈӇ làm viӋc vӟi Timer, trѭӟc tiên ta phҧi thêm ÿLӅu khiӇn vào trong chѭѫng trình, trên Toolbox ÿLӅu khiӇn có dҥng nhѭ hình bên, và thiӃt Oұp thuӝc tính Interval cӫa ÿLӅu khiӇn. Giá trӏ cӫa Interval sӁ xác ÿӏnh chu kǤ thӡi gian phát sӵ kiӋn cӫa ÿLӅu khiӇn ÿѭӧc phát sinh. Ĉѫn vӏ tính cӫa thuӝc tính này là Mili giây (1 phҫn ngàn cӫa giây). Ví dө muӕn ÿLӅu khiӇn Timer sau 1 giây phát sinh ra 1 sӵ kiӋn thì giá trӏ cӫa Interval sӁ bҵng 1000. Sau khi ÿLӅu khiӇn ÿѭӧc thêm vào chѭѫng trình, ta có thӇ kích hoҥt hoһc là vô hiӋu hoá ÿLӅu khiӇn thông qua thuӝc tính Enabled. Khi giá trӏ cӫa Enabled là True thì nó sӁ phát sinh ra sӵ kiӋn Timer sau mӝt Biên soҥn : GV Bùi TiӃn Trѭӡng - 19 -
- Giáo Trình Visual Basic Trung Tâm VNIT chu kǤ thӡi gian ÿѭӧc xác ÿӏnh bӣi thuӝc tính Interval. Ta sӁ viӃt các lӋnh cҫn thӵc hiӋn trong thӫ tөc cӫa sӵ kiӋn phát sinh, chҷng hҥn nhѭ là Timer1_Timer(). Ví dө, nӃu ta muӕn sau mӛi 5 giây chѭѫng trình hiӋn mӝt hӝp thoҥi có nӝi dung ³Xin chao cac ban´ thì ta sӁ thêm mӝt ÿLӅu khiӇn Timer có tên là Timer1 vào chѭѫng trình Yӟi các thuӝc tính sau: Interval = 5000, Enabled = True. Các thuӝc tính này ÿӅu có thӇ ÿѭӧc thiӃt lұp giá trӏ trong lúc thӵc thi. Khi ÿó, ta sӁ viӃt lӋnh xӱ lý trong sӵ kiӋn cӫa ÿLӅu khiӇn Timer nhѭ sau: Private Sub Timer1_Timer() MsgBox "Xin chao cac ban" End Sub Ví dөÿѭa ra ngày giӡ cӫa hӋ thӕng : ThiӃt kӃ giao diӋn có dҥng .Ӄt quҧ khi thӵc hiӋn chѭѫng trình ThiӃt lұp thông tin cho Timer và ÿRҥn mã lӋnh thӵc hiӋn Private Sub Timer1_Timer() lblTime.Caption = Format(Time, "hh : mm : ss") lblDate.Caption = Format(Date, "dddd dd/mm/yyyy") End Sub II.7, Frame, Label, Shape và Line Frame ĈLӅu khiӇn Frame thѭӡng ÿѭӧc dùng ÿӇ nhóm các ÿLӅu khiӇn trên màn hình thành mӝt nhóm có ý nghƭa sӱ dөng nhѭ nhau. Frame xuҩt hiӋn trên màn hình nhѭ là mӝt hình hӝp, có chӭa ÿLӅu khiӇn Lable ӣ góc trên bên trái cӫa ÿӕi tѭӧng. Ta có thӇ làm cho các ÿLӅu khiӇn có trong Frame trӣ thành mӝt chӭc Qăng duy nhҩt, chҷng hҥn nhѭ nhóm các Option Button thành mӝt nhóm. Khi ÿó, nӃu ta chӑn mӝt ÿLӅu khiӇn Otion Button bҩt kǤ trong nhóm thì ÿLӅ u khiӇn khác trong nhóm sӁ tӵÿӝng bӓ chӑn. Biên soҥn : GV Bùi TiӃn Trѭӡng - 20 -
- Giáo Trình Visual Basic Trung Tâm VNIT ĈӇ tҥo nhóm cho các ÿLӅu khiӇn ta phҧi tҥo ra ÿLӅu khiӇn Frame trѭӟc tiên, sau ÿó vӁ ÿLӅu khiӇn cӫa nhóm cҫn tҥo trong phҥm vi Frame chӭa nhóm. NӃu mӝt ÿLӅu khiӇn ÿѭӧc vӁ bên ngoài Frame hay ÿã ÿѭӧc tҥo trѭӟc ÿó thì sӁ không thuӝc vӅ nhóm cӫa các ÿLӅu khiӇn khác có trong Frame ÿang tҥo. Ta có thӇ ghi chú ý nghƭa cӫa nhóm thông qua thuӝc tính Caption cӫa Frame. Label %ҥn có thӇ sӱ dөng ÿLӅu khiӇn Label ÿӇ hiӇn thӏ nhӳng văn bҧn mà không có phép ngѭӡi sӱ dөng thay ÿәi giá trӏ trӵc tiӃp khi chѭѫng trình ÿang chҥy. Nhѭng ta vүn có thӇ thay ÿәi nӝi dung cӫa Lable lúc thӵc thi thông qua thuӝc tính Caption cӫa nó. Ngoài ra Label còn dùng ÿӇ hiӇn thӏ tiêu ÿӅ cho nhӳng ÿLӅu khiӇn không có thuӝc tính biӇu diӉn tiêu ÿӅ riêng, nhѭ TextBox, Image« Nhìn chung thì ÿLӅu khiӇn Label có thӇ hiӋn thӏ nӝi dung văn bҧn tѭѫng Wӵ nhѭ mӝt TextBox nhѭng ÿLӇm khác biӋt cѫ bҧn là Label không cho phép nhұp nӝi dung trӵc tiӃp lên nó. Ngoài ra Label có thӇ thӵc hiӋn các thao tác ÿӏnh dҥng giӕng vӟi TextBox vӅ canh lӅ, font chӳ Tuy Label không thӇ nhұn Focus nhѭng nó vүn có khҧ năng nhұn sӵ kiӋn Click, DlbClick và xӱ lý ÿѭӧc viӋc di chuyӇn ÿӃn ÿLӅu khiӇn bҵng tә hӧp phím tҳt (Alt + phím) ÿӃn ÿLӅu khiӇn ÿѭӧc phép nhұn Focus có TabIndex lӟn hѫn và mang giá trӏ gҫn nó nhҩt Shape Shape là mӝt ÿLӅu khiӇn gӗm các ÿӕi tѭӧng ÿӗ hoҥ. Ta có thӇ tҥo các hình nhѭ hình tròn, chӳ nhұt, vuông, oval và thӵc hiӋn các thao tác tô màu nӅn, màu viӅn, kiӇu tô cho hình thông qua ÿLӅu khiӇn này ViӋc tҥo ra ÿLӅu khiӇn Shape ÿѭӧc thӵc hiӋn chӫ yӃu trong giai ÿRҥn thiӃt kӃ, tuy nhiên ta có thӇ thay ÿәi hình dҥng, màu sҳc cӫa ÿLӅu khiӇn khi thӵc thi ĈLӅu khiӇn Shape có thӇÿѭӧc hiӇn thӏӣ mӝt sӕ hình khác nhau thông qua thuӝc tính Shape cӫa ÿLӅu khiӇn. Thuӝc tính Shape có thӇ nhұn Pӝt trong nhӳng giá trӏ tӯ 0 ÿӃn 5 tѭѫng ӭng vӟi hình chӳ nhұt, hình vuӝng, hình oval, hình tròn, hình chӳ nhұt có góc tròn, hình vuông có góc tròn Ta có thӇ thiӃt lұp màu tô, màu nӅn, kiӇu tô cho ÿLӅu khiӇn thông qua các thuӝc tính FillColor, BackColor, FilStyle, Line Giӕng vӟi ÿLӅu khiӇn Shape, Line cNJng là mӝt ÿLӅu khiӇn thuӝc vӅ hình hӑc. Ta có thӇ Vӱ dөng ÿLӅu khiӇn này ÿӇ vӁ nhӳng ÿѭӡng ngang, ÿѭӡng dӑc tҥi bҩt kǤ vӏ trí nào trên màn hình giao tiӃp. Ta có thӇ thiӃt lұp các kiӇu ÿѭӡng khác nhau cho ÿLӅu khiӇn Line thông qua thuӝc tính BorderStyle vӟi tұp giá trӏ tӯ 0 ÿӃn 6 tѭѫng ӭng vӟi các kiӇu ÿѭӡng khác nhau. Biên soҥn : GV Bùi TiӃn Trѭӡng - 21 -
- Giáo Trình Visual Basic Trung Tâm VNIT Chѭѫng III : Ngôn Ngӳ Lұp Trình Visual Basic I, Sӱ dөng Code Editor : Code Editor cӫa Visual Basic là mӝt cӱa sә nѫi bҥn viӃt phҫn lӟn mã chѭѫng trình. Nó giӕng mӝt trình soҥn thҧo ÿѭӧc chuyên hoá cao vӟi nhiӅu tính năng tҥo thuұn lӧi cho viӋc viӃt mã Visual Basic. 0ӝt cӱa sә riêng ÿѭӧc mӣ cho mӛi module bҥn chӑn tӯ Project Explorer. Mã nҵm trong Pӛi module ÿѭӧc chia thành các phҫn riêng cho tӯng ÿӕi tѭӧng trong module. 0ӛi module form gӗm: Phҫn general: chӭa phҫn khai báo và các thӫ tөc dùng chung. Phҫn declarations: chӭa thӫ tөc sӵ kiӋn cho tӯng ÿӕi tѭӧng. ĈӇ truy nhұp tӟi phҫn mã lӋnh cҫn viӃt, nên sӱ dөng hӝp combo box trái rӗi hӝp combo box phҧi. Visual Basic có chӭc năng Auto Code Completion giúp viӃt mã lӋnh trong Code Editor ÿѭӧc dӉ dàng. (gӑi bҵng Ctrl + SpaceBar) Biên soҥn : GV Bùi TiӃn Trѭӡng - 22 -
- Giáo Trình Visual Basic Trung Tâm VNIT ĈӇ chӑn phҫn tӯ nào ÿó, chuyӇn thanh sáng tӟi ÿó, rӗi nhҩn TAB. Ngoài ra, chӭc năng Bookmarks giúp ÿánh dҩu 1 vӏ trí mã lӋnh ÿӇ có thӇ quay lҥi ÿѭӧc nhanh chóng (Edit | Bookmarks). II, Qui ѭӟc viӃt lӋnh trong Visual Basic II.1, Chia 1 lӋnh thành nhiӅu dòng : Bҵng cách sӱ dөng ký tӵ: [ _ ] adoJT.RecordSource = _ "SELECT * FROM Bang1, Bang2" _ & "WHERE Bang1.ID = Bang2.ID" _ & "AND Bang1.NickName = 'Truongbt' " Trong mӝt sӕ trѭӡng hӧp cách chia 1 câu lӋnh này không thӵc hiӋn ÿѭӧc : nӕi các dòng chú giҧi, II.2, Nӕi nhiӅu lӋnh vào 1 dòng : Bҵng cách sӱ dөng kí tӵ: [ : ] txtMsg.Text = "Hello" : Red = 255 : txtMsg.BackColor = Red Biên soҥn : GV Bùi TiӃn Trѭӡng - 23 -
- Giáo Trình Visual Basic Trung Tâm VNIT II.3, Thêm chú giҧi vào mã lӋnh : Bҵng cách sӱ dөng kí tӵ: [ µ ] ' ÿây là dòng chú thích cho lӋnh ÿѭa chuӛi ³Hi!´ vào ô textbox. txtMsg.Text = "Hi!" ' chú thích trên cùng dòng lӋnh II.4, HӋ thӕng sӕ &ѫ sӕ 10 &ѫ sӕ 8 &ѫ sӕ 16 (Decimal) (Octal) (Hexadecimal ) 9 &O11 &H9 15 &O17 &HF 16 &O20 &H10 20 &O24 &H14 255 &O377 &HFF II.5, Qui tҳc ÿһt tên : Tên thӫ tөc, hàm, biӃn, hҵng phҧi tuân theo qui tҳc: · Bҳt ÿҫu bҵng kí tӵ chӳ · Không chӭa ký tӵ phân cách (nhѭ [ . ] hay kí tӵ rӛng), ký tӵ khai báo kiӇu. · Không dài hѫn 255 kí tӵ. Tên cӫa control, forms, class, và module không vѭӧt quá 40 kí tӵ. · Không trùng vӟi các tӯ khoá cӫa ngôn ngӳ. %ҧng quy cách ÿһt tên cho các ÿLӅu khiӇn (theo thông thѭӡng) ĈLӅu khiӇn Tên Quy cách ĈLӅu khiӇn Tên Quy cách Label lbl Image img TextBox txt Adodc ado Frame fra DataGrid dg ± grd Command cmd DataList dlst Checkbox chk DataCombo dcbo OptionBox opt TreeView tvw ComboBox cbo ListView lvw ListBox lst RichTextBox rtb Timer tmr Adodc ado PictureBox pic DataGrid dg ± grd Biên soҥn : GV Bùi TiӃn Trѭӡng - 24 -
- Giáo Trình Visual Basic Trung Tâm VNIT %ҧng quy cách ÿһt tên cho các kiӇu dӳ liӋu (theo thông thѭӡng) KiӇu dӳ liӋu Tên Byte Phҥm vi Quy cách 6ӕ nguyên Integer 2 -32.768 ÿӃn 32.767 int Long 4 -2,147,483,648 ÿӃn 2,147,483,647 lng -3.402823E38 ÿӃn - 1.401298E -45 6ӕ thӵc Single 4 Yӟi các trӏ âm -1.79769313486231E308 ÿӃn -4.94065645841247E-324 cho trӏ âm Double 8 dbl 4.94065645841247E-324 ÿӃn 1.79769313486232E308 cho trӏ Gѭѫng Byte 1 0 ± 255 Chuӛi String (1byte/1ký tӵ). Khoҧng 2 tӹ ký tӵ str Char 1 chr Logic Boolean 2 True hoһc False 1/1/100 ÿӃn 31/12/9999 Ngày giӡ Date 8 00:00:00 ÿӃn 23:59:59 0һc ÿӏnh Variant II.6, Mӝt sӕ khái niӋm : Giá trӏ : Các giá trӏ dҥng chuӛi (text) nҵm trong cһp dҩu nháy kép ³´. Ví dө: ³Xin chào´. Các giá trӏ khi ÿһt trong dҩu nháy kép có phân biӋt chӳ hoa và chӳ thѭӡng. Các giá trӏ sӕ thұp phân ghi ӣ dҥng sӕ nhѭ bình thѭӡng. Ví dө: 10 hay 100.9 « Các giá trӏ sӕ thұp lөc phân bҳt ÿҫu bҵng &H. Ví dө ghi giá trӏ thұp lөc phân cӫa 255: &Hff Có hai giá trӏÿһc biӋt là giá trӏ rӛng (Empty) và giá trӏ không xác ÿӏnh (Null). Giá trӏ rӛng chӍ dùng cho các biӃn chuӛi hay biӃn kiӇu Variant và ÿѭӧc thӇ hiӋn bҵng ³´. Giá trӏ Null chӍ dùng cho các biӃn kiӇu Variant. 9ӟi các biӃn kiӇu ÿӕi tѭӧng, khi chѭa ÿѭӧc xác ÿӏnh thì giá trӏ cӫa ÿӕi tѭӧng là Nothing. BiӇu thӭc : BiӇu thӭc là thành phҫn cӫa mӝt câu lӋnh có thӇ tính ra giá trӏ. BiӇu thӭc có thӇ chӭa các biӃn, hàm và các toán tӱ (sӕ hӑc, logic, so sánh) Các toán tӱ : Visual Basic có các bӝ toán tӱ sau: · Toán tӱ so sánh: =, , =,<= · Toán tӱ sӕ hӑc: +, -, *, /, \, ^ · Toán tӱ gán = và toán tӱ nӕi chuӛi & · Toán tӱ logic: AND, OR, NOT (Toán tӱ mӝt ngôi) · Toán tӱ bitwise: AND, OR, XOR, NOT Biên soҥn : GV Bùi TiӃn Trѭӡng - 25 -
- Giáo Trình Visual Basic Trung Tâm VNIT Các tӯ khoá : Visual Basic tѭѫng tӵ nhѭ các ngôn ngӳ lұp trình khác sӱ dөng mӝt bӝ tӯ khoá giúp xác ÿӏnh cú pháp cӫa các câu lӋnh. Theo quy ѭӟc, tên cӫa các ÿӕi tѭӧng lұp trình trong chѭѫng trình nhѭ biӃn, thӫ tөc, hàm,« không ÿѭӧc trùng vӟi các tӯ khoá. · Dim, Private, Public, Friend, Static, As, WithEvents, Declare · If, Then, Else, End, Select, Case, For, Do, While, Until, Loop, Next, Step, To · Let, Set, Get, Property Error, GoTo, On, Resume, Option, Explicit, Time, Date, Seek, Len, Mid, Print, Lock · True, False, Is, Null,Nothing, Empty, New · ByVal, ByRef, Optional,ParamArray · Binary, String III, BiӃn - Hҵng - KiӇu Dӳ LiӋu III.1, BiӃn sӕ : BiӃn sӕ là nѫi lѭu trӳ tҥm thӡi giá trӏ. BiӃn thѭӡng ÿѭӧc ÿӏnh nghƭa bӣi ngѭӡi sӱ dөng. Chúng ta có thӇ xem các thuӝc tính cӫa 1 ÿӕi tѭӧng nhѭ biӃn. intSoNguyen = 10 intSoNguyen = intSoNguyen + 1 txtKetqua.text = intSoNguyen * 28250 Khai báo biӃn Cú pháp : Dim[Public] TênBiӃn [As KiӇuDӳLiӋu] VD : Dim intSO As Integer µ khai báo biӃn sӕ kiӇu sӕ nguyên BiӃn khai báo vӟi Dim trong 1 thӫ tөc tӗn tҥi khi thӫ tөc ÿó ÿѭӧc chҥy : Khi thӫ tөc kӃt thúcthì giá trӏ cӫa biӃn ÿó cNJng mҩt; Tӭc là biӃn này có phҥm vi ÿӏa phѭѫng (local) trong thӫ tөc mà nó ÿѭӧc khai báo. Phҥm vi cѫ bҧn cӫa biӃn: BiӃn khai báo trong phҫn Declarations cӫa 1 module form, standard, hay class, chӭ không phҧi bên trong 1 thӫ tөc có thӇÿѭӧc sӱ dөng bӣi mӑi thӫ tөc trong module. BiӃn khai báo vӟi tӯ khoá Public sӱ dөng ÿѭӧc trong toàn chѭѫng trình. BiӃn khai báo vӟi tӯ khoá Static vүn lѭu tiӃp giá trӏ cӫa nó ngay cҧ khi thӫ tөc chӭa khai báo cӫa nó ÿã kӃt thúc. Chú ý: Trong 1 ph̹m vi, không ÿ́ͻc có 2 bi͗n khai báo trùng tên. Khai báo không tѭӡng minh : Trong Visual Basic, biӃn có thӇ không khai báo trѭӟc khi sӱ dөng: Function BinhPhuong(so As Long) As Double GiaTri = Abs(so) µ ta s΅ dͽng bi͗n GiaTri mà không c̿n khai báo BinhPhuong = Sqr(GiaTri) End Function Tuy nhiên, ÿLӅu này dӉ dүn sinh lӛi trong chѭѫng trình vì trѭӡng hӧp trùng biӃn hoһc trùng hàm. Biên soҥn : GV Bùi TiӃn Trѭӡng - 26 -
- Giáo Trình Visual Basic Trung Tâm VNIT Khai báo tѭӡng minh : ĈӇ yêu cҫu Visual Basic luôn kiӇm tra biӃn phҧi ÿѭӧc khai báo trѭӟc khai sӱ dөng: Ĉһt câu lӋnh sau vào phҫn Declarations cӫa 1 module class, form, hay standard: Option Explicit Hay t menu Tools, chͥn Options, nh̽n chͥn tab Editor rͫi ÿánh d̽u chͥn Require Variable Declaration. Sau ÿó, câu l͟nh Option Explicit s͕ luôn ÿ́ͻc chèn tΉÿͱng. III.2, Hҵng sӕ : Có 2 kiӇu hҵng sӕ +ҵng sӕ cѫ sӣ hay ÿӏnh nghƭa trѭӟc bӣi hӋ thӕng +ҵng sӕ do ngѭӡi dùng ÿӏnh nghƭa 7ӵ khai báo 1 hҵng sӕ: [Public|Private] Const TênHҵngSӕ[As KiӇuDL] = GiáTrӏ Ví dө: Const conPi = 3.14159265358979 Public Const conMaxPlanets As Integer = 9 Const conReleaseDate = #1/1/95# Phҥm vi hҵng sӕ do ngѭӡi dùng ÿӏnh nghƭa : · Hҵng khai báo trong 1 thӫ tөc có phҥm vi chӍ trong thӫ tөc ÿó · Hҵng khai báo trong phҫn Declarations cӫa 1 module có phҥm vi trong toàn module. · Hҵng khai báo trong phҫn Declarations cӫa 1 module vӟi tӯ khoá Public có phҥm vi trong toàn chѭѫng trình. III.3, KiӇu dӳ liӋu : Khai báo biӃn vӟi kiӇu dӳ liӋu BiӃn thѭӡng ÿѭӧc khai báo trѭӟc vӟi kiӇu dӳ liӋu ÿӏnh sҹn. Ví dө: Private I As Integer Dim HTT As Double Static YourName As String Public ThapPhan As Currency Private JT As Integer, HTT As Double 1Ӄu kiӇu biӃn không nêu rõ, biӃn sӁ có kiӇu là Variant. Dim v 'ӳ liӋu kiӇu sӕ : Integer, Long, Single, Double, Currency KiӇu Byte : Khi biӃn sӕ chӭa dӳ liӋu nhӏ phân, nên khai báo nó thành mҧng các dӳ liӋu kiӇu byte. ĈLӅu ÿó giúp giӳÿѭӧc khuôn dҥng dӳ liӋu trong quá trình chuyӇn ÿәi. KiӇu dӳ liӋu chuӛi : String Ví dө: Dim S as String S = "Database" S = Left(S, 4) Biên soҥn : GV Bùi TiӃn Trѭӡng - 27 -
- Giáo Trình Visual Basic Trung Tâm VNIT 0һc ÿӏnh, biӃn chuӛi có ÿӝ dài biӃn ÿәi phù hӧp vӟi giá trӏ nó lѭu trӳ. ĈӇ khai báo 1 biӃn chuӛi có ÿӝ dài cӕÿӏnh, sӱ dөng cú pháp: String * size Ví dө: Dim EmpName As String * 50 Visual Basic có thӇ tӵÿӝng chuyӇn ÿәi dӳ liӋu giӳa kiӇu sӕ và chuӛi. Tuy nhiên, chúng ta phҧi luôn cҭn thұn, bӣi khi trao ÿәi giӳa chuӛi và sӕ, lӛi có thӇ nҧy sinh khi chuӛi sӕ chӭa giá trӏ không ӣ khuôn dҥng sӕ. KiӇu dӳ liӋu logic (Boolean) : True/False KiӇu dӳ liӋu thӡi gian (Date) : Giá trӏ vӅ ngày tháng, hay thӡi gian có thӇÿѭӧc lѭu trӳ trong kiӇu dӳ liӋu Date hay trong Variant. KiӇu dӳ liӋu ÿӕi tѭӧng : BiӃn ÿӕi tѭӧng ÿѭӧc lѭu trӳ thành ÿӏa chӍ 32-bit. Ĉӏa chӍ này tham trӓ tӟi ÿӕi tѭӧng trong chѭѫng trình, hay tӟi ÿӕi tѭӧng trong chѭѫng trình khác. Dim objDb As Object Set objDb = OpenDatabase("c:\Vb6\Biblio.mdb") KiӇu dӳ liӋu Variant : BiӃn kiӇu Variant có thӇ lѭu trӳ dӳ liӋu có kiӇu bҩt kǤ. Chúng ta không phҧi chuyӇn ÿәi giӳa các kiӇu dӳ liӋu nӃu chúng ta gán chúng cho 1 biӃn kiӇu Variant. KiӇu dӳ liӋu do ngѭӡi dùng tӵ ÿӏnh nghƭa (Type) : Chúng ta có thӇ ÿӏnh nghƭa nhӳng kiӇu dӳ liӋu mӟi, tѭѫng tӵ nhѭ khái niӋm Record trong Pascal. IV, Các cҩu trúc ÿLӅu khiӇn : IV.1, Các lӋnh rӁ nhánh : A, If « Then « Else Trѭӟc khi ÿi vào cҩu trúc ÿҫy ÿӫ, ta hãy tiӃp cұn trѭӟc qua cҩu trúc If « End If Cú Pháp : If Then Các câu lӋnh End If Mô Tҧ : · Sӱ dөng cú pháp này, ngѭӡi lұp trình muӕn khai báo vӟi trình biên dӏch rҵng : các câu lӋnh nҵm trong vùng If chӍÿѭӧc thӵc hiӋn nӃu nhѭÿLӅu kiӋn chӍ ra trong PӋnh ÿӅ If là ÿúng (True) · ĈLӅu kiӋn trong mӋnh ÿӅ If là mӝt biӇu thӭc trҧ vӅ giá tӏ True/False hoһc mӝt giá trӏ sӕ. Khi ÿó các giá trӏ sӕ khác 0 là True, ngѭӧc lҥi là False Ví dө : µKiӇm tra xem i có phҧi sӕ chҹn không? If i Mod 2 = 0 Then MsgBox i & ³ là sͩ ch͍Q´ Biên soҥn : GV Bùi TiӃn Trѭӡng - 28 -
- Giáo Trình Visual Basic Trung Tâm VNIT End If µKiӇm tra xem bҥn ÿã nhұp hӑ tên hay chѭa? Str = Input(³Nhͅp vào tên cͿa b̹n: ³) If Str = ´³ Then MsgBox ³%̹n ch́a nhͅp vào tên cͿa mình.´ End If &ҩu trúc If « Then « End If còn thiӃu sót vì ÿôi khi ta muӕn thӵc hiӋn các lӋnh này QӃu ÿLӅu kiӋn ÿúng nhѭng nӃu ÿLӅu kiӋn sai thì thӵc hiӋn các lӋnh kia. Khi ÿó, nӃu sӱ Gөng cҩu trúc If « Then « End If ta sӁ viӃt nhѭ sau: If ÿL͙u_ki͟n Then Các l͟nh s͕ thΉc hi͟n n͗u ÿL͙u ki͟n ÿúng End If If Not ÿL͙u_ki͟n Then Các l͟nh s͕ thΉc hi͟n n͗u ÿL͙u ki͟n sai End If ĈӇ thay thӃ cách viӃt trên, Visual Basic (và hҫu hӃt các ngôn ngӳ khác) cung cҩp cҩu trúc If « Then « Else « End If Cú Pháp : If Then Các câu lӋnh khi btÿk ÿúng Else Các câu lӋnh khi btÿk sai End If Mô Tҧ : · ĈLӅu kiӋn trong mӋnh ÿӅ If là mӝt biӇu thӭc trҧ vӅ giá tӏ True/False hoһc mӝt giá trӏ sӕ. Khi ÿó các giá trӏ sӕ khác 0 là True, ngѭӧc lҥi là False Ví dө : µKiӇm tra xem i có phҧi sӕ chҹn không? If i Mod 2 = 0 Then MsgBox i & ³ là sͩ ch͍Q´ Else MsgBox i & ³ là sͩ l͓´ End If µKiӇm tra xem bҥn ÿã nhұp hӑ tên hay chѭa? Str = Input(³Nhͅp vào tên cͿa b̹n: ³) If Str = ´³ Then MsgBox ³%̹n ch́a nhͅp vào tên cͿa mình.´ Else MsgBox ³Chào b̹n, ´ & Str End If Biên soҥn : GV Bùi TiӃn Trѭӡng - 29 -
- Giáo Trình Visual Basic Trung Tâm VNIT Ví dө : KiӇm tra sӕ nhұp có phҧi sӕ nguyên tӕ hay không? - ThiӃt kӃ giao diӋn : - Code : Private Sub cmdKiemTra_Click() Dim kt As Boolean, so As Long, i As Long kt = True so = Val(txtSo) For i = 2 To so / 2 If so Mod i = 0 Then kt = False Next If kt = True Then MsgBox so & " là sͩ nguyên tͩ" Else MsgBox so & " không ph̻i sͩ nguyên tͩ" End If End Sub B, Select « Case &ҩu trúc If « Then « Else hҥn chӃ giá trӏ trҧ vӅ cӫa biӇu thӭc ÿLӅu kiӋn là True/False hoһc là giá trӏ sӕ và thѭӡng chӍ dùng khi sӕ trѭӡng hӧp cҫn xét là ít. Trѭӡng hӧp sӕ trѭӡng hӧp cҫn xét nhiӅu, ngѭӡi lұp trình có thӇ sӱ dөng cú pháp Select « Case Cú pháp : Select Case Case Các câu lӋnh thӵc hiӋn khi giá trӏ cӫa biӇu thӭc bҵng Giá trӏ 1 Case Các câu lӋnh thӵc hiӋn khi giá trӏ cӫa biӇu thӭc bҵng Giá trӏ 2 Case Else Các câu lӋnh thӵc hiӋn khi giá trӏ cӫa biӇu thӭc không bҵng các giá trӏÿã xét ӣ trên End Select Mô tҧ : Khӕi lӋnh Case Else có thӇ không cҫn viӃt. Tuy nhiên, ngѭӡi lұp trình ÿѭӧc khuyên dùng khӕi lӋnh này trong cҩu trúc Select « Case ÿӇ giҧm bӟt các lӛi logic. Các giá trӏ dùng ÿӅ so sánh có thӇ gӗm nhiӅu giá trӏ phân biӋt bӣi dҩu phҭy (,) hoһc là mӝt phҫn cӫa biӇu thӭc so sánh. Biên soҥn : GV Bùi TiӃn Trѭӡng - 30 -
- Giáo Trình Visual Basic Trung Tâm VNIT Ví dө : Select Case thang Case 1,3,5,7,8,10,12 MsgBox ³Thang nay co 31 ngay.´ Case 4,6,9,11 MsgBox ³Thang nay co 30 ngay.´ Case 2 If (nam mod 400 = 0) and _ ( nam mod 4 = 0 and nam mod 100 = To [Step ] Các câu lӋnh cӫa vòng lһp For Next [biӃn_ÿӃm] Mô tҧ : · Sӱ dөng cú pháp này, ngѭӡi lұp trình muӕn khai báo vӟi trình biên dӏch rҵng: các câu lӋnh ÿһt trong vùng For « Next chӍÿѭӧc thӵc hiӋn nӃu nhѭ có giá trӏ trong ÿRҥn [ , ] Biên soҥn : GV Bùi TiӃn Trѭӡng - 31 -
- Giáo Trình Visual Basic Trung Tâm VNIT · Sau mӛi lҫn thӵc hiӋn các lӋnh trong vùng For « Next , sӁ tӵ ÿӝng tăng thêm . NӃu không chӍ ra có giá trӏ là 1 · NӃu có trӏ lӟn hѫn 0, cҩu trúc lһp chӍ thӵc hiӋn khi · NӃu có trӏ nhӓ hѫn 0, cҩu trúc lһp chӍ thӵc hiӋn khi >= Ví dө : Dim i As Long, tong As Long tong = 0 For i= 1 To 10 tong = tong + i Next MsgBox ³ Tong cac so nguyen trong khoang [1-10] co gia tri = ³ & tong µ c̽u trúc l͏p sau s͕ không thΉc hi͟n For i= 1 To 10 Step -1 tong = tong + i Next B, For Each « Next Cú pháp : For Each In Các câu lӋnh cӫa vòng lһp For Next [ phҫn tӱ ] Mô tҧ : 9ӟi cú pháp này, chѭѫng trình sӁ duyӋt qua tӯng phҫn tӱ trong tұp hӧp các phҫn tӱ ÿang duyӋt. Phҧi khai báo biӃn là kiӇu cӫa phҫn tӱ trong tұp hӧp ÿang duyӋt Ví dө : · DuyӋt các form ÿang mӣ trong ӭng dөng và hiӇn thӏ tên cӫa form Dim frm As Form For each frm In Forms MsgBox frm.Name Next · Lҩy ra toàn bӝ font cӫa hӋ thӕng và ÿѭa vào listbox Sub ShowFonts() Dim i As Long lstFont.Clear For i = 1 To Screen.FontCount - 1 lstFont.AddItem Screen.Fonts(i) Next End Sub Biên soҥn : GV Bùi TiӃn Trѭӡng - 32 -
- Giáo Trình Visual Basic Trung Tâm VNIT Chúng ta có thӇ chҩm dӭt lһp khi ÿang ӣ giӳa chӯng vòng lһp bҵng lӋnh Exit For C, Do While « Loop hoһc While « Wend Cú pháp : Do While Các lӋnh Loop While Các lӋnh Wend Mô tҧ : · Sӱ dөng cú pháp này, ngѭӡi lұp trình muӕn khai báo vӟi trình biên dӏch rҵng: các câu lӋnh ÿһt trong vùng lһp chӍÿѭӧc thӵc hiӋn khi có giá trӏ True · Sau mӛi lҫn thӵc hiӋn các lӋnh trong vùng lһp, sӁÿѭӧc kiӇm tra lҥi : o NӃu có trӏ True, thӵc hiӋn lҥi vòng lһp o NӃu có trӏ False, chҩm dӭt vòng lһp · Cҩu trúc này kiӇm tra trѭӟc khi thӵc hiӋn các lӋnh nên có thӇ không xҧy ra lҫn lһp nào nӃu ngay lҫn ÿҫu tiên có giá trӏ False Ví dө : Tính tәng các sӕ nguyên tӯ 1 ÿӃn 10 Dim i As Long, Tong As Long i = 1 Do While i Mô tҧ : · Sӱ dөng cú pháp này, ngѭӡi lұp trình muӕn khai báo vӟi trình biên dӏch rҵng: các câu lӋnh ÿһt trong vùng Do Loop While sӁ tiӃp tөc ÿѭӧc thӵc hiӋn khi có giá trӏ True · Sau mӛi lҫn thӵc hiӋn các lӋnh trong vùng Do While Loop, VӁÿѭӧc kiӇm tra lҥi : o NӃu có trӏ True, thӵc hiӋn lҥi vòng lһp Biên soҥn : GV Bùi TiӃn Trѭӡng - 33 -
- Giáo Trình Visual Basic Trung Tâm VNIT o NӃu có trӏ False, chҩm dӭt vòng lһp · Cҩu trúc này kiӇm tra sau khi thӵc hiӋn các lӋnh lҫn ÿҫu tiên nên lһp xҧy ra ít nhҩt mӝt lҫn nӃu ngay lҫn ÿҫu tiên có giá trӏ False Chúng ta có thӇ chҩm dӭt lһp khi ÿang ӣ giӳa chӯng vòng lһp bҵng lӋnh Exit Do Ví dө : Tính tәng các sӕ nguyên tӯ 1 ÿӃn 10 Dim i As Long, Tong As Long i = 0 : Tong = 0 Do i = i + 1 Tong = Tong + i Loop While (i M\2 Then MsgBox M & ³ là sӕ nguyên tӕ³ Else MsgBox M & ³ là không sӕ nguyên tӕ³ End If V, Hàm - Thӫ Tөc Ĉa sӕ các ngôn ngӳ khác coi thӫ tөc và hàm nhѭ nhau, Visual Basic phân biӋt rõ ràng thӫ tөc và hàm bӣi ÿһc ÿLӇm hàm có giá trӏ trҧ vӅ còn thӫ tөc thì không V.1, Thӫ Tөc : Khai báo thӫ tөc Cú pháp [Private|Public][Static] Sub TênThͿ7ͽc (tham sͩ) Các l͟nh trong thͿ tͽc End Sub Mô tҧ : · Tӯ khoá Public chӍ ra thӫ tөc có phҥm vi sӱ dөng toàn cөc trong chѭѫng trình · Tӯ khoá Private chӍ ra thӫ tөc chӍ có thӇ sӱ dөng trong phҥm vi cӫa module khaibáo · NӃu không chӍ rõ Public hay Private thì mһc ÿӏnh Visual Basic sӱ dөng Public · Các tham sӕ có thӇ có hay không tuǤ theo chӭc năng cӫa thӫ tөc Biên soҥn : GV Bùi TiӃn Trѭӡng - 34 -
- Giáo Trình Visual Basic Trung Tâm VNIT Ví dө : Sub MoCSDL() Thӫ tөc xӱ lý sӵ kiӋn ĈӇ xӱ lý các sӵ kiӋn xҧy ra cho mӝt ÿӕi tѭӧng, Visual Basic 6.0 sӱ dөng thӫ tөc xӱ lý Vӵ kiӋn ÿӇ cung cҩp cho ngѭӡi lұp trình nѫi viӃt lӋnh ÿáp ӭng lҥi sӵ kiӋn. &ҩu trúc cӫa thӫ tөc xӱ lý sӵ kiӋn: Private Sub Tên_ÿӕi_tѭӧng_Tên_sӵ_kiӋn(các tham sӕ vӅ thông tin cӫa sӵ kiӋn) Các l͟nh trong thͿ tͽc End Sub Ví dө : Khi ngѭӡi dùng click lên mӝt nút lӋnh có tên là cmdThoat Private Sub cmdThoat_Click() End End Sub Khi ngѭӡi dùng di chuyӇn chuӝt trên form thì hiӋn vӏ trí chuӝt lên TitleBar Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.Caption = ³X: ³ & X & ³ Y:´ & Y End Sub V.2, Hàm : Cú pháp : [Private|Public][Static] Functiion TênHàm (tham sͩ) As Ki͛uD·Li͟u Các l͟nh trong hàm End Function Mô tҧ : · Tӯ khoá Public chӍ ra thӫ tөc có phҥm vi sӱ dөng toàn cөc trong chѭѫng trình · Tӯ khoá Private chӍ ra thӫ tөc chӍ có thӇ sӱ dөng trong phҥm vi cӫa module khai báo · NӃu không chӍ rõ Public hay Private thì mһc ÿӏnh Visual Basic sӱ dөng Public · Hàm phҧi có giá trӏ trҧ vӅ, giá trӏÿó phҧi thuӝc kiӇu dӳ liӋu cӫa VB. NӃu không khai báo rõ thì sӁ trҧ vӅ kiӇu Variant Ví dө : KiӇm tra xem 1 thѭ mөc hay 1 tұp tin có tӗn tҥi trong máy tính không? Private Function FileExists(ByVal sPathName As String) As Boolean On Error Resume Next FileExists = (GetAttr(sPathName) And vbNormal) = vbNormal On Error GoTo 0 End Function Biên soҥn : GV Bùi TiӃn Trѭӡng - 35 -
- Giáo Trình Visual Basic Trung Tâm VNIT Private Sub cmdCheck_Click() strFileName = Trim(txtFileName.Text) If FileExists(strFileName) = True Then If Left(Right(strFileName, 4), 1) = "." Then txtResuilt.Text = "Tӗn tҥi FILE" Else txtResuilt.Text = "Tӗn tҥi FOLDER" End If Else If Left(Right(strFileName, 4), 1) = "." Then txtResuilt.Text = "Không tӗn tҥi FILE" Else txtResuilt.Text = "Không tӗn tҥi FOLDER" End If End If End Sub Tìm USNLN và BSCNN cӫa 2 sӕ (ÿѭa vào qua tham sӕ) Public Function TimUSCLN(intA As Long, intB As Long) As Long While (intA intB Then intA = intA - intB Else intB = intB - intA End If Wend TimUSCLN = intA End Function Public Function TimBSCNN(intC As Long, intD As Long) As Long Dim Tuso As Double,Mauso As Double Tuso = intC * intD Mauso = TimUSCLN(intC, intD) TimBSCNN = Tuso / Mauso End Function 0ӝt sӕ hàm thông dөng : · Các hàm chuyӇn ÿәi kiӇu dӳ liӋu : Val; CLng; CInt; CDate · Các hàm vӅ ngày giӡ : Date; Now; DateSerial; Day; Month; Year; DateDiff; WeekDay · Các hàm xӱ lý chuӛi : Len; Left; Mid; Right; InStr; Replace; StrConv; LCase; UCase; Format · Các hàm kiӇm tra giá trӏ : IsNull; IsEmpty; IsNumeric; IsDate Biên soҥn : GV Bùi TiӃn Trѭӡng - 36 -
- Giáo Trình Visual Basic Trung Tâm VNIT Chѭѫng IV : Mҧng - Record I, Tәng quan vӅ mҧng I.1, Khái niӋm, cҩu trúc và ý nghƭa sӱ dөng mҧng Khái niӋm vӅ mҧng : Là mӝt tұp hӧp hay danh sách các phҫn tӱ có các ÿһc ÿLӇm giӕng nhau. Ví dө : - Các hͥc sinh trong mͱt lͳp hͥc t̹o thành mͱt m̻ng trong ÿó mͯi ph̿n t΅ là mͱt hͥc sinh. Vͳi danh sách các hͥc sinh này chúng ta có th͛ thΉc hi͟n các công vi͟c nh́ s͇p [͗p tên các hͥc sinh theo th tΉ alphabet, tìm trong danh sách mͱt hͥc sinh có mͱt tên cho tŕͳc,« - Tͅp hͻp các sͩ nguyên 15, 16, 3, 18, 46 lͅp thành mͱt m̻ng các sͩ nguyên có 5 ph̿n W΅. Ph̿n t΅ th nh̽t là 15, th 2 là 16,«. Ta có th͛ thΉc hi͟n các công vi͟c nh́ tìm sͩ Oͳn nh̽t, nhͧ nh̽t, s͇p x͗p các sͩ theo th tΉ tăng d̿n,« &ҩu trúc cӫa mӝt mҧng 0ӛi phҫn tӱÿѭӧc phân biӋt vӟi phҫn tӱ khác dӵa vào sӕ thӭ tӵ hay vӏ trí cӫa nó trong Pҧng. Các phҫn tӱÿѭӧc ÿánh sӕ thӭ tӵ liên tөc, thѭӡng bҳt ÿҫu tӯ 1 hoһc 0. Ví dө : - Các hͥc sinh trong danh sách lͳp s͕ÿ́ͻc ÿánh sͩ th tΉ 1, 2, 3, - Trong m̻ng các sͩ nguyên có 5 ph̿n t΅ͷ trên, ph̿n t΅ th nh̽t là 15, th 2 là 16, TuǤ theo cách khai báo mà ch͡ sͩ cͿa ph̿n t΅ th nh̽t có th͛ là 0 hay 1. 9ͳi c̽u trúc nh́ vͅy, m̻ng ÿ́ͻc dùng khi nào? Ý nghƭa cӫa viӋc sӱ dөng mҧng 0ҧng là công cө giúp nhóm các ÿӕi tѭӧng giӕng nhau lҥi ÿӇ xӱ lý nhѭ mӝt ÿӕi tѭӧng duy nhҩt. Thay vì sӱ dөng tên ÿӇÿӅ cұp tӟi mӝt ÿӕi tѭӧng, ta sӱ dөng tên mҧng và chӍ ra vӏ trí cӫa ÿӕi tѭӧng muӕn truy cұp tӟi. Ví dө : Thay vì khai báo 100 bi͗n khác nhau A1, A2,« A100 ÿ͛ cha giá trͣ cͿa 100 sͩ nguyên, ta có th͛ khai báo mͱt m̻ng A là tͅp hͻp các sͩ nguyên, có 100 ph̿n t΅. Ít nh̽t, có th͛ th̽y r͉ng ch͡ c̿n 1 câu khai báo bi͗n thay vì s΅ dͽng 100 câu khai báo. Vì có th͛ truy cͅp tͳi mͱt ÿͩi t́ͻng thông qua vͣ trí cͿa nó trong m̻ng, ta có th͛ s΅ dͽng các vòng l͏p vͳi mͱt bi͗n ÿ͗m ÿ͛ duy͟t qua tng ph̿n t΅ cͿa A. I.2, Khai báo mҧng và cách truy xuҩt ÿӃn phҫn tӱ mҧng : Khai báo mҧng : Cú pháp : Dim TenMang (ChӍ sӕ cuӕi) As KiӇu Biên soҥn : GV Bùi TiӃn Trѭӡng - 37 -
- Giáo Trình Visual Basic Trung Tâm VNIT Ho͏c Dim TenMang (ChӍ sӕÿҫu To chӍ sӕ cuӕi) As KiӇu Mô tҧ : · NӃu dùng cách thӭ nhҩt, chӍ sӕ cӫa phҫn tӱÿҫu tiên trong mҧng là 0, sӕ phҫn tӱ Fӫa mҧng bҵng ChӍ sӕ cuӕi + 1. · NӃu dùng cách thӭ hai, chӍ sӕ cӫa phҫn tӱÿҫu tiên và cuӕi cùng ÿѭӧc chӍ rõ trong câu khai báo, sӕ phҫn tӱ cӫa mҧng bҵng (ChӍ sӕ cuӕi ± ChӍ sӕÿҫu + 1). Chú ý rҵng chӍ sӕ cuӕi phҧi lӟn hѫn chӍ sӕÿҫu. Ví dө : Khai báo mҧng A chӭa 10 sӕ nguyên Dim A(9) As Integer Ho͏c Dim A(1 to 10) As Interger Truy cұp mӝt phҫn tӱ cӫa mҧng : Cú pháp : TenMang(Vӏ trí cӫa phҫn tӱ muӕn truy xuҩt) Mô tҧ : · NӃu vӏ trí cҫn truy xuҩt nҵm ngoài chӍ sӕ mҧng thì sӁ báo lӛi . · Sӱ dөng hàm LBound(Tên mҧng), UBound(Tên mҧng) ÿӇ xác ÿӏnh chӍ sӕ nhӓ nhҩt, lӟn nhҩt cӫa mҧng. Ví dө : HiӇn thӏ vӏ trí và giá trӏ cӫa tӯng phҫn tӱ trong mҧng A(5) Private Sub cmdHienThi_Click() For i = LBound(A) To UBound(A) MsgBox ³9ͣ trí " & i & ", có giá trͣ là " & A(i) Next End Sub I.3, Mӝt sӕ giҧi thuұt trên mҧng : A, Giҧi thuұt duyӋt mҧng Giҧi thuұt duyӋt mҧng ÿѫn giҧn sӱ dөng mӝt vòng lһp For ÿӇ duyӋt tӯng phҫn tӱ cӫa Pҧng dӵa trên chӍ sӕ. Ĉây là giҧi thuұt cѫ bҧn nhҩt cҫn nҳm vӳng ÿӇ mӣ rӝng trong nhiӅu bài toán khác. For i = LBound(A) To UBound(A) µThΉc hi͟n các x΅ lý vͳi ph̿n t΅ A(i). Next Ví dө : 7ăng giá trӏ cӫa mӛi phҫn tӱ trong mҧng A lên 1 For i = LBound(A) To UBound(A) A(i) = A(i) + 1 Next Tính tәng các phҫn tӱ trong mҧng Biên soҥn : GV Bùi TiӃn Trѭӡng - 38 -
- Giáo Trình Visual Basic Trung Tâm VNIT Tong = 0 For i = LBound(A) To UBound(A) Tong = Tong + A(i) Next MsgBox ³7ͭng các ph̿n t΅ trong m̻ng = ³ & Tong B, Tìm kiӃm các phҫn tӱ thӓa mӝt ÿLӅu kiӋn cho trѭӟc %ҧn chҩt cӫa viӋc tìm kiӃm là duyӋt qua tӯng phҫn tӱ trong mҧng và so sánh mӛi phҫn Wӱ vӟi ÿLӅu kiӋn tìm kiӃm do ÿó, giҧi thuұt này có thӇ coi là mӝt sӵ mӣ rӝng cӫa giҧi thuұt ӣ trên DuyӋt mҧng có ÿLӅu kiӋn. For i = LBound(A) To UBound(A) If KiemTra(A(i)) = True Then µA(i) là ph̿n t΅ tho̻ÿL͙u ki͟n tìm ki͗m µThΉc hi͟n các b́ͳc x΅ lý ti͗p theo End If Next Trong giҧi thuұt này, KiemTra() là mӝt hàm dùng ÿӇ so sánh giá trӏ cӫa phҫn tӱÿang xét vӟi ÿLӅu kiӋn tìm kiӃm. Ví dө : LiӋt kê tҩt cҧ các phҫn tӱ cӫa A là sӕ nguyên tӕ For i = LBound(A) To UBound(A) If LaSoNT(A(i)) Then MsgBox ³6ͩ nguyên tͩ : ³ & A(i) & ³ͷ vͣ trí ³ & i End if Next 9ӟi hàm LaSoNT() nhѭ sau: Function LaSoNT (pt As Integer) As Boolean µĈL͙u ki͟n 1: Sͩ nguyên tͩ là sͩ nguyên d́˿ng lͳn h˿n 1 LaSoNT = (pt > 1) µĈL͙u ki͟n 2: Sͩ nguyên tͩ là sͩ ch͡ chia h͗t cho 1 và chính no For i=2 to pt \ 2 If pt Mod i = 0 Then LaSoNT = False Exit Function End If Next End Function C, Tìm giá trӏ nhӓ nhҩt cӫa mҧng Giҧi thuұt này sӱ dөng mӝt kӻ thuұt gӑi là kӻ thuұt xoá vӃt : Dim gtnn As Ki͛u cͿa mͱt ph̿n t΅ trong m̻ng A gtnn = A(LBound(A)) For i = LBound(A) To UBound(A) µĈ͛ÿ˿n gi̻n, không nên dùng i=LBound(A)+1 If A(i) < gtnn Then gthh = A(i) Next MsgBox ³Giá trͣ nhͧ nh̽t trong m̻ng là : ³ & gtnn Biên soҥn : GV Bùi TiӃn Trѭӡng - 39 -
- Giáo Trình Visual Basic Trung Tâm VNIT Ĉôi khi, ta cҫn tìm ra vӏ trí cӫa phҫn tӱ chӭa giá trӏ nhӓ nhҩt thay vì giá trӏ nhӓ nhҩt cӫa Pҧng, giҧi thuұt sӁ thay ÿәi nhѭ sau gtnn = LBound(A) For i = LBound(A) To UBound(A) If A(i) A(j) Then tam = A(i) A(i) = A(j) A(j) = tam End If Next Next In mҧng sau khi sҳp xӃp : strChuoi = ³´ For i = 0 To UBound(A) ± 1 strChuoi = strChuoi & ³³ & A(i) Next MsgBox ³0̻ng ÿã s͇p x͗p : ³ & strChuoi F, Hѭӟng dүn bài tұp : ThiӃt kӃ giao diӋn chѭѫng trình nhѭ sau : Biên soҥn : GV Bùi TiӃn Trѭӡng - 40 -
- Giáo Trình Visual Basic Trung Tâm VNIT Mã nguӗn cӫa chѭѫng trình Dim A(100) As Long, intSoPT As Integer, i As Integer, j As Integer Private Sub cmdSinhSo_Click() intSoPT = Val(txtSoPhanTu.Text) txtHienPhanTu.Text = "" Randomize For i = 1 To intSoPT A(i) = Int(100 * Rnd) txtHienPhanTu = txtHienPhanTu & A(i) & " " Next End Sub Private Sub cmdInPTChan_Click() txtPTChan.Text = "" For i = 1 To intSoPT If A(i) Mod 2 = 0 Then txtPTChan = txtPTChan & A(i) & " " Next End Sub Private Sub cmdTongPTChan_Click() Dim intTongChan As Long intTongChan = 0 For i = 1 To intSoPT If A(i) Mod 2 = 0 Then intTongChan = intTongChan + A(i) Next txtTongPTChan.Text = intTongChan End Sub Private Sub cmdGTNN_Click() Dim gtnn As Integer gtnn = A(1) Biên soҥn : GV Bùi TiӃn Trѭӡng - 41 -
- Giáo Trình Visual Basic Trung Tâm VNIT For i = 2 To intSoPT If A(i) A(j) Then tg = A(i): A(i) = A(j): A(j) = tg End If Next Next txtSapxeptang.Text = "" For i = 1 To intSoPT txtSapxeptang.Text = txtSapxeptang.Text & A(i) & " " Next End Sub .Ӄt quҧ sau khi thӵc thi chѭѫng trình II, Các hàm thao tác trên mҧng : II.1, Hàm Array() Hàm Array() tҥo ra mӝt biӃn kiӇu Variant chӭa mӝt mҧng. Ta có thӇ sӱ dөng biӃn này nhѭ mӝt biӃn mҧng bình thѭӡng. Cú pháp : Array(Danh sách các phҫn tӱ cӫa mҧng) Mô tҧ : Các phҫn tӱ trong danh sách ÿѭӧc phân cách nhau bӣi dҫu phҧy (,) Ví dө : Dim A µKhai báo mӝt biӃn kiӇu Variant ÿӇ chӭa mҧng Biên soҥn : GV Bùi TiӃn Trѭӡng - 42 -
- Giáo Trình Visual Basic Trung Tâm VNIT A = Array(1,3,6) For i = 0 To UBound(A) Print A(i) & ³³ Next µ.Ӄt quҧ: 1 3 6 II.2, Hàm Choose() Hàm Choose() trҧ vӅ giá trӏ cӫa mӝt phҫn tӱ trong mҧng là mӝt danh sách các tham sӕ Gӵa trên thӭ tӵ cӫa phҫn tӱÿó. Cú pháp : Choose(chӍ sӕ, phҫn tӱ 1[, phҫn tӱ 2, [, phҫn tӱ n]]) Mô tҧ : · ChӍ sӕ là vӏ trí cӫa phҫn tӱ muӕn cho ïn tӯ danh sách. Các phҫn tӱ trong danh sách ÿѭӧc ÿánh sӕ bҳt ÿҫu tӯ 1 · Các phҫn tӱ trong danh sách ÿѭӧc phân cách nhau bӣi dҫu phҧy (,) Ví dө : LiӋt kê tên các tháng trong năm Dim i As Integer For i = 1 To 12 Print Choose(i,´Tháng 1´´Tháng 2´´Tháng 3´, _ ´Tháng 4´´Tháng 5´, Tháng 6´´Tháng 7´,_ ´Tháng 8´, ´Tháng 9´´Tháng 10´´Tháng 11´´Tháng 12´) Next II.3, Hàm Split() Hàm Split() cҳt mӝt chuӛi thành mӝt mҧng các chuӛi con Cú pháp : Split(Chuӛi muӕn cҳt [, dҩu phân cách[, sӕ phҫn tӱ kӃt quҧ]]) Mô tҧ : · Chuӛi muӕn cҳt là chuӛi sӁÿѭӧc chia thành các chuӛi con · Dҩu phân cách dùng ÿӇ xác ÿӏnh cách chia chuӛi muӕn cҳt thành các chuӛi con. 1Ӄu không chӍ rõ thành dҩu phân cách mһc ÿӏnh là ³³. · Sӕ phҫn tӱ kӃt quҧ giӟi hҥn sӕ chuӛi con có trong mҧng kӃt quҧ. Mһc ÿӏnh sӕ phҫn tӱ kӃt quҧ là - 1 nghƭa là không giӟi hҥn sӕ chuӛi con trҧ vӅ. Ví dө : Cҳt mӝt câu thành các tӯ Dim Str As String Str = InputBox(³Nhͅp vào mͱt câu´) Dim A A = Split(Str) µ/̿n ĺͻt in ra các t trong câu For i = 0 To UBound(A) Print A(i) & ³³ Next II.4, Hàm Join() Hàm Join() trҧ vӅ mӝt chuӛi là kӃt hӧp cӫa các phҫn tӱ trong mӝt mҧng kiӇu chuӛi. Cú pháp Biên soҥn : GV Bùi TiӃn Trѭӡng - 43 -
- Giáo Trình Visual Basic Trung Tâm VNIT Join(Mҧng nguӗn[, dҩu phân cách]) Mô tҧ Mҧng nguӗn là mҧng chӭa các phҫn tӱ sӁ nӕi lҥi thành mӝt chuӛi. Dҩu phân cách nӃu không ÿѭӧc chӍ rõ thì mһc ÿӏnh là ³³ Ví dө : Nӕi các tӯÿã cҳt ӣ ví dө trên thành mӝt chuӛi cách nhau bӣi dҩu phҧy Str = Join(A) III, KiӇu Dӳ LiӋu Record III.1, Khái niӋm KiӇu Record hay còn gӑi là kiӇu dӳ liӋu do ngѭӡi dùng ÿӏnh nghƭa là mӝt kiӇu dӳ liӋu Kӛn hӧp gӗm nhiӅu thành phҫn dӳ liӋu khác nhau. Cú pháp : Public | Private Type As As ««« End Type Mô tҧ : Các thành phҫn có thӇ thuӝc các kiӇu dӳ liӋu khác nhau : Long, String, Boolean, Date, và cҧ Record « III.2, Ví dө : Khai báo bҧn ghi quҧn lý thông tin sinh viên Public Type SinhVien masv As String hotensv As String Ngaysinh As String DiemThi As Double End Type Public objSV As SinhVien Sub NhapHoSo() With objSV .masv = ³012199026´ .hotensv = ³donTRUONGBT´ .Ngaysinh = ³28/12´ End With End Sub Sub InHoSo() With objSV lblThongTinSV = "Mã SV : " & .masv & ³ " & "Hͥ Tên : " & _ .hotensv & ³³ & "Ngày Sinh :" & .Ngaysinh End With End Sub Biên soҥn : GV Bùi TiӃn Trѭӡng - 44 -
- Giáo Trình Visual Basic Trung Tâm VNIT Chѭѫng V : Menu Editor ± MDI Form I, Menu Editor I.1, Giӟi thiӋu vӅ hӋ thӕng thӵc ÿѫn cӫa mӝt ӭng dөng Khi xây dӵng ӭng dөng trên nӅn cӫa hӋ ÿLӅu Windows, giao tiӃp giӳa ӭng dөng và ngѭӡi sӱ dөng chӫ yӃu thông qua hӋ thӕng hӝp thoҥi cӫa ӭng dөng, hӝp thoҥi ÿѫn giҧn chӍ là nhӳng chӭc năng cӫa chѭѫng trình ÿѭӧc thӇ hiӋn bҵng giao diӋn ÿӗ hoҥ. ĈӇ quҧn lý các chӭc năng cӫa ӭng dөng ta cҫn phҧi xây dӵng nhӳng ÿLӅu khiӇn ÿӇ gӑi thӵc hiӋn tӯng chӭc năng mӝt. Khi này, hãy tѭӣng tѭӧng mӝt chѭѫng trình có hѫn 20 ÿLӅu khiӇn nҵm khҳp nѫi trên màn hình cӫa ӭng dөng thì sӁ không còn chӛ cho nhӳng thao tác xӱ lý cӫa ӭng dөng. Do ÿó, hӋ thӕng thӵc ÿѫn là cách tiӃp cұn ÿѫn giҧn nhҩt khi thiӃt kӃ hӋ thӕng chӭc Qăng cho ӭng dөng: thay vì hiӇn thӏ hӃt các chӭc năng mӝt lúc ta sӁ tә chӭc chúng thành các phҫn tӱ cӫa thӵc ÿѫn và ҭn ÿi cho ÿӃn khi cҫn sӱ dөng. HӋ thӕng thӵc ÿѫn VӁ chӭa nhӳng ÿLӅu khiӇn cӫa nó trong nhӳng cӱa sә riêng (drop down) và có thӇ sӱ Gөng ngay khi cҫn Menu bar giӕng nhѭ mӝt vұt chӭa, lѭu giӳ tҩt cҧ các chӭc năng trong hӋ thӕng. Trên menu bar sӁ liӋt kê các chӭc năng hay nhóm chӭc năng cӫa chѭѫng trình gӑi là menu. Khi ngѭӡi dùng chӑn mӝt nhóm chӭc năng trên menu bar thì sӁ mӣ cӱa sә chӭa các chӭc năng tѭѫng ӭng, chҷng hҥn trong hình trên ta chӑn mөc File trên menu bar Biên soҥn : GV Bùi TiӃn Trѭӡng - 45 -
- Giáo Trình Visual Basic Trung Tâm VNIT 0ӛi cӱa sӕ cӫa menu bar sӁ chӭc mӝt sӕ chӭc năng, và ÿѭӧc tә chӭc dѭӟi dҥng 1 danh sách theo chiӅu dӑc. Nhӳng chӭc năng này gӑi là Menu item , nhӳng menu item thѭӡng ÿѭӧc sҳp xӃp theo tӯng nhóm có ý nghƭa giӕng nhau và ngăn cách bӣi mӝt mӝt thành phҫn gӑi là Menu separator . Ngѭӡi sӱ dөng có thӇ di chuyӇn các phím mNJi tên lên xuӕng hay dùng chuӝt di chuyӇn qua các item ÿӇ chӑn mӝt menu item. Khi mӝt menu item ÿѭӧc chӑn thì sӁ có mӝt vӋt sáng xuҩt hiӋn tҥi vӏ trí cӫa nó, gӑi là Selected item . Sau ÿó, nhҩn phím Enter hoһc click chuӝt trái ÿӇ thӵc hiӋn chӭc năng cӫa menu item ÿang chӑn. Menu item có thӇӣ tình trҥng bӏ mӡ là Disabled item , khi ÿó ngѭӡi sӱ dөng sӁ không thӇ thӵc hiӋn ÿѭӧc chӭc năng cӫa menu item ÿó. I.2, ThiӃt kӃ hӋ thӕng thӵc ÿѫn cho ӭng dөng Trong môi trѭӡng phát triӇn cӫa Visual Basic 6 thì hӋ thӕng thӵc ÿѫn sӁ không có sҹn trên màn hình thiӃt kӃ. Do ÿó ta phҧi tҥo ra mӝt Menu bar cho màn hình làm viӋc thông qua tiӋn ích Menu Editor do môi trѭӡng cung cҩp, ta có thӇ mӣ Menu Editor bҵng cách chӑn menu item Menu Editor trong mөc Tools cӫa cӱa sә thiӃt kӃt, hoһc nhҩn tә hӧp phím Ctrl+E 7ҥo chӭc năng hay nhóm chӭc năng (menu) trên Menu bar ĈӇ tҥo mӝt menu trên menu bar, ta chӍ cҫn cung cҩp 2 thông tin chính là Caption và Name trong Menu Editor. Thuӝc tính Caption dùng ÿӇ hiӇn thӏ tên cӫa chӭc năng trên menu bar và ta sӁ dùng thuӝc tính Name trong khi viӃt lӋnh xӱ lý cho chӭc năng tѭѫng ӭng, giá trӏ cӫa Name thѭӡng ÿѭӧc bҳt ÿҫu vӟi mnu và không ÿѭӧc rӛng, không ÿѭӧc trùng . Khi này bҥn ÿã tҥo ÿѭӧc hӋ thӕng thӵc ÿѫn cho chѭѫng trình, công viӋc tiӃp theo là tҥo các Menu item cho các nhóm chӭc năng trên Menu bar. Biên soҥn : GV Bùi TiӃn Trѭӡng - 46 -
- Giáo Trình Visual Basic Trung Tâm VNIT 7ҥo Menu item Khi có yêu cҫu tҥo mӝt menu item New cho chӭc năng File, bҥn phҧi làm thӃ nào? ĈӇ thӵc hiӋn, trѭӟc tiên ta click vào nút Next trên Menu Editor, sau ÿó click vào nút có hình mNJi tên qua phҧi trên Menu Editor ÿӇ tҥo mӝt khoҧng cách so vӟi lӅ trái cho phҫn Wӱ mӟi (xem hình trên). Bây giӡ, bҥn nhұp giá trӏ cho Caption là New và Name là mnuFileNew. Khi này, Menu item mӟi tҥo sӁ xuҩt hiӋn bên dѭӟi menu File và thөt vào trong mӝt ÿRҥn 4 ký tӵ, giӕng nhѭ sau: File New Nhѭ vұy ta ÿã tҥo ÿѭӧc menu File vӟi mӝt Menu item là New. NӃu ta click Next (hay nhҩn Enter) thì ta sӁ tiӃp tөc tҥo Menu item, muӕn tҥo thêm menu trên Menu bar thì ta phҧi click vào nút có hình mNJi tên qua trái cho ÿӃn khi không còn khoҧng cách vӟi lӅ trái. Vi͗t l͟nh x΅ lý cho các Menu item cNJng giͩng nh́ cho các ÿL͙u khi͛n khác, Menu item ch͡ có 1 sΉ ki͟n duy nh̽t là Click. Thêm/Xoá mӝt thành phҫn trên hӋ thӕng thӵc ÿѫn ĈӇ chèn thêm mӝt thành phҫn vào hӋ thӕng thӵc ÿã có, ta chӑn mӝt thành phҫn sau ÿó click vào nút Insert cӫa Menu Editor, khi này ta sӁ có mӝt thành phҫn mӟi trong hӋ thӕng ngay trên thành phҫn ÿã chӑn. Nhұp giá trӏ cho các thuӝc tính Caption và Name ÿӇ tҥo mӝt thành phҫn mӟi trên thanh menu bar. Muӕn bӓ mӝt thành phҫn ÿã có trong hӋ thӕng thӵc ÿѫn chӍ cҫn chӑn thành phҫn ÿó và nhҩn nút Delete trên Menu Editor 6ҳp xӃp thӭ tӵ cӫa các thành phҫn trên hӋ thӕng thӵc ÿѫn Ta sӱ dөng các nút hình mNJi tên lên, xuӕng, qua trái, qua phҧi trên Menu Editor ÿӇ thӵc hiӋn mӝt sӕ thao tác sҳp xӃp và thay ÿәi tính chҩt cӫa các thành phҫn trên hӋ thӕng thӵc ÿѫn. ChuyӇn ptӱÿѭӧc chӑn qua phҧi, nhѭ là chuyӇn mӝt Menu item thành mӝt Menu ChuyӇn ptӱÿѭӧc chӑn qua trái , nhѭ là chuyӇn mӝt Menu thành mӝt Menu item Di chuyӇn phҫn tӱÿѭӧc chӑn lên trên Di chuyӇn mӝt phҫn tӱÿѭӧc chӑn xuӕng dѭӟi Menu Separator Menu separator không phҧi là mӝt chӭc năng cӫa chѭѫng trình, nó chӍ có ý nghƭa chia các menu item theo chӭc năng tѭѫng tӵ nhau. Menu separator có dҥng là mӝt ÿѭӡng Nҿ nҵm ngang. ĈӇ thêm menu separator vào hӋ thӕng cNJng tѭѫng tӵ nhѭ thêm mӝt menu item nhѭng giá trӏ cӫa thuӝc tính Caption là dҩu trӯ (-). Biên soҥn : GV Bùi TiӃn Trѭӡng - 47 -
- Giáo Trình Visual Basic Trung Tâm VNIT Access character Ta có thӇ kích hoҥt chӭc năng cӫa mӝt menu, menu item thông qua bàn phím bҵng cách nhҩt phím Atl sau ÿó chӑn chӑn phím ӭng vӟi chӭc năng cҫn thӵc hiӋn. Phím này Jӑi là access character và phҧi là mӝt trong nhӳng ký tӵ có trong thuӝc tính Caption Fӫa chӭc năng. ĈӇ mӝt ký tӵ trong Caption cӫa menu hay menu item là Access character ta chӍ cҫn ÿһt vào trѭӟc ký tӵÿó mӝt ký tӵ &. ĈLӅu quan trӑng là các Access character trong cùng mӝt Fҩp, nghƭa là các thành cùng là menu hay các menu item cӫa cùng mӝt menu, nên là duy nhҩt. Ví dө: &File &New &Open Shortcut key Ngoài ra ÿӇ thӵc hiӋn mӝt chӭc năng cӫa hӋ thӕng ta còn có thӇ sӱ dөng Shortcut key, ÿó là mӝt phím hay tә hӧp phím, mà không cҫn mӣ menu chӭa nó. Shortcut key là mӝt Vӕ phím, tә hӧp phím do Menu Editor cung cҩp, ta không thӇ tӵ ý thêm vào. ĈӇ tҥo Shortcut key cho mӝt menu hay menu item ta vào Menu Editor, chӑn thành phҫn Fҫn tҥo shortcut key, sau ÿó chӑn mӝt phím hay tә hӧp phím ÿã ÿѭӧc xây dӵng sҹn trong ComboBox Shortcut. Ví dө: &File &New Ctrl+N &Open Ctrl+O 0ӝt sӕ thao tác xӱ lý Trong hӋ thӕng thӵc ÿѫn, menu và menu item cNJng có nhӳng thuӝc tính giӕng vӟi ÿLӅu khiӇn khác là Enabled và Visible, ngoài ra menu item còn có thêm thuӝc tính Checked. 1Ӄu thuӝc tính Check cӫa mӝt menu item ÿѭӧc thiӃt lұp là True thì bên phҧi menu item ÿó sӁ xuҩt hiӋn mӝt dҩu check ( ). Giá trӏ cӫa các thuӝc tính này có thӇ ÿѭӧc thiӃt lұp lúc thiӃt kӃ hay lúc thӵc thi chѭѫng trình. Thi͗t lͅp giá trͣ cho thuͱc tính Checked, Enabled, Visible khi thi͗t k͗ Ta có thӇ dӉ dàng thiӃt lұp giá trӏ cho 3 thuӝc tính thông qua Menu Editor bҵng cách click vào các check box tѭѫng ӭng cӫa mӝt menu item ÿang chӑn. Khi này, menu item VӁ thӇ hiӋn theo thuӝc tính ÿã chӑn. Xác lͅp giá trͣ khi ch́˿ng trình ÿang thΉc thi Giá trӏ các thuӝc tính trên ÿӅu có thӇ thiӃt lұp khi chѭѫng trình ÿang chҥy. Dӵa vào ÿây ta có thӇ dӉ dàng thay ÿәi trҥng thái cӫa phҫn tӱ theo sӵ chӑn lӵa cӫa ngѭӡi sӱ dөng. Xét ví dө : nӃu ta muӕn khi ngѭӡi dùng click chӑn menu item NoiDung thì menu item xuҩt hiӋn dҩu Check ÿӇ báo là chӭc năng NoiDung ÿang thӵc thi. NӃu click vào chӭc Qăng NoiDung mӝt lҫn nӳa thì dҩu check sӁ mҩt ÿi. ĈӇ làm ÿLӅu ÿó, ta viӃt lӋnh trong Vӵ kiӋn Click cӫa menu item NoiDung nhѭ sau: Private Sub mnuNoiDung_Click() mnuNoiDung.Checked = Not mnuNoiDung.Checked End Sub Biên soҥn : GV Bùi TiӃn Trѭӡng - 48 -
- Giáo Trình Visual Basic Trung Tâm VNIT II, MDI Form : II.1, Màn hình SDI và màn hình MDI Các chѭѫng trình chҥy trên Windows có giao diӋn thuӝc mӝt trong hai loҥi chính : giao diӋn mӝt cӱa sә (SDI : Single Document Interface) và giao diӋn ÿa cӱa sә (MDI : Multi Document Interface) 0ӝt ví dө dӉ thҩy nhҩt vӅӭng dөng có giao diӋn mӝt cӱa sә là chѭѫng trình Notepad trong hӋÿLӅu hành Windows. Tҥi mӛi thӡi ÿLӇm chúng ta chӍ có thӇ mӣ mӝt văn bҧn. Khi cҫn mӣ văn bҧn thӭ hai, chúng ta phҧi ÿóng văn bҧn thӭ nhҩt lҥi. Khác vӟi Notepad, Microsoft Excel và Microsoft Word là hai ӭng dөng có giao diӋn ÿa Fӱa sә (MDI) trên Windows. Các ӭng dөng này cho phép mӣ nhiӅu văn bҧn cùng lúc. 0ӛi văn bҧn ÿѭӧc mӣ sӁ có mӝt cӱa sә hiӇn thӏ riêng tѭѫng ӭng. 0ӛi loҥi giao diӋn, SDI hay MDI, sӁ thích hӧp vӟi nhӳng loҥi ӭng dөng khác nhau. II.2, Màn hình MDI và màn hình MDI Child Nhѭÿã trình bày ӣ trên, các ӭng dөng giao diӋn MDI cho phép mӣ nhiӅu thӇ hiӋn khác nhau tҥi mӝt thӡi ÿLӇm. Mӛi thӇ hiӋn sӁÿѭӧc mӣ trong mӝt cӱa sә khác nhau. Mӝt ӭng Gөng ÿa cӱa sә sӁ có hai màn hình giao tiӃp : mӝt ÿóng vai trò cӱa sә chính MDI và Pӝt ÿóng vai trò dҥng chung cho các thӇ hiӋn cӱa sә con MDI Child bên trong cӱa sә MDI. Màn hình MDI Màn hình MDI hoàn toàn giӕng vӟi các màn hình bình thѭӡng mà chúng ta ÿã tӯng làm viӋc trong nhӳng chѭѫng trѭӟc. ĈLӇm khác nhau là màn hình MDI không thӇ chӭa các ÿLӅu khiӇn trên nó ngoҥi trӯÿLӅu khiӇn Picture box và các ÿLӅu khiӇn không hiӇn thӏ nhѭ Biên soҥn : GV Bùi TiӃn Trѭӡng - 49 -
- Giáo Trình Visual Basic Trung Tâm VNIT Timer, Ngoài ra, trong mӝt ӭng dөng sӁ chӍ có duy nhҩt mӝt màn hình MDI và vӟi nhӳng lý do này màn hình MDI thѭӡng ÿӵѫc dùng nhѭ màn hình chính cӫa ӭng dөng. Màn hình MDI Child Màn hình MDI Child là mӝt màn hình giao tiӃp giӕng nhѭ tҩt cҧ các màn hình giao tiӃp Form mà chúng ta ÿã làm viӋc trѭӟc ÿây. Ӣ thӡi ÿLӇm thiӃt kӃ, màn hình MDI Child sӁ không bӏ giӟi hҥn bên trong màn hình MDI. Chúng ta hoàn toàn có thӇÿһt thuӝc tính, thêm các ÿLӅu khiӇn cNJng nhѭ các lӋnh, liên kӃt vӟi cӱa sә con mӝt cách bình thѭӡng. ĈL͙u c̿n ph̻i nhͳ là ÿ͏t thuͱc tính MDIChild cho màn hình giao ti͗p lo̹i MDI Child là True. Ĉһc ÿLӇm cӫa hai màn hình : 7ҥi thӡi ÿLӇm chҥy chѭѫng trình, màn hình MDI và các màn hình MDI child có nhӳng ÿһc ÿLӇm nhѭ sau: · Tҩt cҧ các màn hình MDI Child sӁ luôn hiӇn thӏ bên trong màn hình MDI. · Ngѭӡi dùng chӍ có thӇ di chuyӇn, thay ÿәi kích thѭӟc, phóng to hay thu nhӓ các màn hình MDI Child nhѭng chӍ trong giӟi hҥn kích thѭӟc cӫa màn hình MDI mà thôi. · Khi mӝt màn hình MDI Child ÿѭӧc thu nhӓ, biӇu tѭӧng cӫa nó sӁ xuҩt hiӋn bên trong màn hình chính MDI chӭ không xuҩt hiӋn trên thanh ӭng dөng (Taskbar) Fӫa Windows. NӃu màn hình MDI ÿѭӧc thu nhӓ thì tҩt cҧ các màn hình MDI Child trong màn hình MDI này cNJng ÿѭӧc thu nhӓ theo · Khi phóng to màn hình MDI Child, tiêu ÿӅ cӫa màn hình con này sӁ tӵÿӝng nӕi Yӟi tiêu ÿӅ cӫa màn hình MDI và hiӇn thӏ trong thanh tiêu ÿӅ cӫa màn hình MDI. Hình vӁ dѭӟi ÿây minh hӑa cho ÿLӅu này. · Khi ÿóng màn hình MDI, các màn hình MDI Child sӁ tӵÿӝng ÿóng theo. NӃu mӝt màn hình con nào ÿó không ÿóng ÿѭӧc, màn hình MDI sӁ không ÿóng lҥi. II.3, Các bѭӟc ÿѭa ӭng dөng giao diӋn MDI vào chѭѫng trình · Ĉѭa MDI Form vào chѭѫng trình hoһc · ThiӃt lұp thuӝc tính MDI Child cho các form Biên soҥn : GV Bùi TiӃn Trѭӡng - 50 -
- Giáo Trình Visual Basic Trung Tâm VNIT · ThiӃt kӃ menu (hӋ thӕng thӵc ÿѫn) cho MDI Form · Ta thiӃt lұp cho MDI trӣ thành Form khӣi ÿӝng ÿҫu tiên trong ӭng dөng bҵng cách : Vào menu Project / Chӑn mөc Project Properties« Biên soҥn : GV Bùi TiӃn Trѭӡng - 51 -
- Giáo Trình Visual Basic Trung Tâm VNIT · ViӃt lӋnh cho hӋ thӕng menu gӑi thӵc hiӋn các chӭc năng : Private Sub mnuhanghoa_Click() Form1.Show End Sub Private Sub mnuinfo_Click() Dim info As String info = "Hoc Vien: Thu " & vbCrLf & "Stt: 006" & vbCrLf & "Thu Muc Bai Lam:" _ & App.Path & vbCrLf & "Ten File Project: " & App.Title & ".vbp" MsgBox info, vbInformation, "Thong Tin Bai Lam" End Sub Private Sub mnuthoat_Click() If MsgBox("Co Thoat Khong?", vbYesNo + vbInformation, "Thoat") = vbYes Then Unload Me End If End Sub · ThiӃt lұp các thuӝc tính cӫa MDI Form : WindowState = 2 ± Maximized o 0 ± Normal : HiӇn thӏ khung cӱa sә bình thѭӡng theo thiӃt kӃ o 1 ± Minimnized : Thu nhӓ cӱa sә xuӕng thanh TaskBar o 2 ± Maximized : Phóng to cӱa sә ra toàn bӝ màn hình · NӃu các MDI Child bӏ thay ÿәi kích cӥ so vӟi khi thiӃt kӃ lúc bҥn chҥy chѭѫng trình thì bҥn cҫn thiӃt lұp lҥi thuӝc tính BorderStyle cӫa Form ÿó : o BorderStyle = 1- Fixed Single II.4, Tҥo thӵc ÿѫn Window trong các ӭng dөng MDI · Tҥo thӵc ÿѫn chính Window trong cӱa sә chính MDI hay cӱa sә con MDI Child · Sӱ dөng công cө Menu Editor, chӑn thuӝc tính WindowList cho thӵc ÿѫn Window này. (Nên nhӟ chӍ có mӝt thӵc ÿѫn ÿѭӧc chӑn thuӝc tính WindowList) Biên soҥn : GV Bùi TiӃn Trѭӡng - 52 -
- Giáo Trình Visual Basic Trung Tâm VNIT Private Sub mnuHorizontal_Click() Me.Arrange vbTileHorizontal End Sub Private Sub mnuVertical_Click() Me.Arrange vbTileVertical End Sub Private Sub mnuCascade_Click() Me.Arrange vbCascade End Sub Chѭѫng VI : KӃt Nӕi Cѫ Sӣ Dӳ LiӋu Vӟi ADO I, Tәng quan vӅ lұp trình cѫ sӣ dӳ liӋu I.1, HӋ quҧn trӏ CSDL Khái niӋm vӅ hӋ quҧn trӏ CSDL +Ӌ quҧn trӏ cѫ sӣ dӳ liӋu là mӝt hӋ thӕng phҫn mӅm, cung cҩp các chӭc năng cho phép ngѭӡi dùng quҧn lý các ÿӕi tѭӧng trong mӝt CSDL. Ví dө: HӋ quҧn trӏ CSDL Microsoft Access, Microsoft SQL Server,« Khác vӟi CSDL, hӋ quҧn trӏ CSDL chӍÿóng vai trò quҧn lý, cho phép ngѭӡi dùng tҥo ra các ÿӕi tѭӧng nhѭ bҧng, query, quan hӋ« CSDL chӍ là mӝt hay nhiӅu file, chӭa các ÿӕi tѭӧng mà ngѭӡi dùng tҥo ra. Ngѭӡi dùng chӍ có thӇ làm viӋc vӟi CSDL thông qua KӋ quҧn trӏ CSDL. Các chӭc năng quҧn lý CSDL cӫa hӋ quҧn trӏ · Thông qua hӋ quҧn trӏ CSDL, ngѭӡi dùng tҥo ra các cҩu trúc bҧng, mӕi liên hӋ giӳa các bҧng, nhұp dӳ liӋu, tҥo các query,« · Vӟi mӝt sӕ hӋ quҧn trӏ CSDL chuyên nghiӋp (khác vӟi Microsoft Access là mӝt KӋ quҧn trӏ CSDL nhӓ± Desktop Relational Database Management), ngѭӡi dùng còn có thӇ tҥo ra các ÿӕi tѭӧng khác trong CSDL nhѭ View, Trigger, UDDT, phân quyӅn cho ngѭӡi dùng khác,« I.2, Các kӻ thuұt lұp trình vӟi CSDL Các kӻ thuұt lұp trình CSDL cҩp thҩp Windows API : +ӋÿLӅu hành Windows cung cҩp mӝt bӝ thѭ viӋn rҩt nhiӅu hàm riêng lҿ ÿӇ làm viӋc vӟi CSDL gӑi là MS DB-LIB. Sӱ dөng nhӳng hàm trong DB-LIB rҩt phӭc Wҥp vӟi nhiӅu kiӇu dӳ liӋu, nhiӅu tham sӕ, tên hàm khó nhӟ. Biên soҥn : GV Bùi TiӃn Trѭӡng - 53 -
- Giáo Trình Visual Basic Trung Tâm VNIT ODBC : ĈӇÿѫn giҧn bӟt viӋc sӱ dөng DB-LIB, bӝ thѭ viӋn phҫn mӅm ODBC ÿѭӧc Microsoft xây dӵng sau ÿó, cNJng dӵa trên MS DB-LIB nhѭng ÿѫn giҧn hѫn. Trong ODBC, Microsoft hӛ trӧ ngѭӡi lұp trình vӟi các Database driver ÿӇ làm viӋc vӟi nhiӅu loҥi CSDL khác nhau. Tұn dөng Database driver, ngѭӡi lұp trình có thӇ làm viӋc vӟi các loҥi CSDL khác nhau mà ODBC hӛ trӧ theo cùng mӝt cách. 7ӟi nay, ODBC vүn còn ÿѭӧc áp dөng trong các phҫn mӅm chuyên nghiӋp ÿӇ tұn dөng Wӕc ÿӝ xӱ lý dù viӃt chѭѫng trình rҩt khó. ODBC hӛ trӧ tӟi gҫn 20 loҥi CSDL khác nhau. OLE DB : Là mӝt kӻ thuұt kӃt nӕi CSDL tѭѫng tӵ nhѭ ODBC nhѭng mҥnh hѫn, OLE DB không chӍ có khҧ năng làm viӋc vӟi các loҥi CSDL quan hӋ mà cҧ nhӳng loҥi dӳ liӋu khác nhѭ cҩu trúc thѭ mөc/tұp tin, mail,« Thay vì sӱ dөng Database driver, OLE DB cung cҩp cách lұp trình thӕng nhҩt cho ngѭӡi lұp trình trên các loҥi CSDL khác nhau thông qua Data provider. Ĉһc ÿLӇm chung cӫa các kӻ thuұt lұp trình CSDL cҩp thҩp là nhiӅu hàm, kiӇu dӳ liӋu và tham sӕ. Thӭ tӵ các bѭӟc lұp trình cNJng phӭc tҥp và dài dòng, tuy nhiên ӭng dөng sӁ chҥy nhanh hѫn, ngѭӡi lұp trình nӃu nҳm vӳng kӻ thuұt sӁ chӫÿӝng trong quá trình xây dӵng các chӭc năng. Các kӻ thuұt lұp trình CSDL cҩp cao DAO : TiӃp sau ODBC là hai kӻ thuұt kӃt nӕi CSDL JET và DAO. JET chӍ kӃt nӕi vӟi các CSDL Access ÿӇ nhҳm tӟi mөc tiêu tӕc ÿӝ xӱ lý nhanh và lұp trình ÿѫn giҧn. DAO cNJng ÿѭӧc xây dӵng dӵa trên ODBC ÿӇÿѫn giҧn hoá viӋc lұp trình. &ҧ JET và DAO ÿӅu cung cҩp cho ngѭӡi lұp trình các ÿӕi tѭӧng ÿӇ làm viӋc vӟi CSDL. ĈLӇm này giúp ngѭӡi lұp trình có ÿѭӧc mӝt cách làm viӋc ÿѫn giҧn khi xӱ lý dӳ liӋu. Ít nhҩt, các hàm cNJng ÿѭӧc gom thành tӯng nhóm có ý nghƭa riêng trong các ÿӕi tѭӧng và khi gӑi, không còn cҫn thiӃt phҧi truyӅn nhiӅu tham sӕ vì bҧn thân các ÿӕi tѭӧng xӱ lý dӳ liӋu chӍ cҫn gán các giá trӏ tham sӕ vào thuӝc tính mӝt lҫn duy nhҩt. ADO : 7ѭѫng tӵ nhѭ DAO nhѭng là thӃ hӋÿi sau, ADO ÿѭӧc xây dӵng dӵa trên OLE DB. ADO cNJng sӱ dөng các ÿӕi tѭӧng làm công cөÿӇ thao tác vӟi CSDL. ĈLӇm quan trӑng là các ÿӕi tѭӧng cӫa ADO là nhӳng ÿӕi tѭӧng ÿӝc lұp, có thӇÿѭӧc khai báo và Vӱ dөng riêng rӁ, khác vӟi các ÿӕi tѭӧng trong DAO là mӝt hӋ thӕng ÿӕi tѭӧng phân Fҩp, muӕn tҥo ra ÿӕi tѭӧng này có thӇ phҧi cҫn ÿӃn mӝt ÿӕi tѭӧng khác. Ĉһc ÿLӇm cӫa các kӻ thuұt lұp trình CSDL cҩp cao là cung cҩp phѭѫng pháp lұp trình CSDL ÿѫn giҧn, che ÿi nhӳng thӫ tөc phӭc tҥp mà ngѭӡi lұp trình thӵc sӵ không cҫn quan tâm trong khi lұp trình. Ĉәi lҥi, chѭѫng trình sӁ chҥy chұm hѫn II, Giӟi thiӋu vӅ Microsoft Active Data Object (ADO) Các phiên bҧn Biên soҥn : GV Bùi TiӃn Trѭӡng - 54 -
- Giáo Trình Visual Basic Trung Tâm VNIT · ADO ra ÿӡi phiên bҧn chính thӭc ÿҫu tiên là 1.5. Bҧn thân ADO chӍ là mӝt phҫn trong bӝ công cө lұp trình CSDL cӫa Microsoft có tên là MSDAC (Microsoft Data Access Component) gӗm 3 thành phҫn: MS DB-LIB, OLE DB và ADO. · Ban ÿҫu, ADO là bӝ công cө lұp trình CSDL rӡi rҥc nhѭng sau ÿó ÿѭӧc Microsoft tích hӧp vào hӋÿLӅu hành Windows và mӝt sӕ phҫn mӅm cӫa mình nhѭ Microsoft Visual Studio, Microsoft Office,« · Phiên bҧn ADO 2.0 ÿi kèm vӟi Windows 98. Windows 2000 có phiên bҧn 2.5 và Windows XP có phiên bҧn ADO 2.7 7ѭѫng quan giӳa các ÿӕi tѭӧng cӫa ADODB và các thành phҫn trong CSDL · +Ӌ thӕng các ÿӕi tѭӧng cӫa ADODB không nhiӅu, chӍ có khoҧng 10 ÿӕi tѭӧng ÿѭӧc tә chӭc phân cҩp nhѭng có thӇÿѭӧc tҥo ra mӝt cách ÿӝc lұp ÿӇ sӱ dөng. 3 ÿӕi tѭӧng chính cӫa ADODB là: o Connection: dùng ÿӇ tҥo kӃt nӕi tӟi CSDL, mӝt cách ÿѫn giҧn, có thӇ coi Connection là ÿҥi diӋn cho CSDL ÿang làm viӋc o RecordSet: dùng ÿӇ chӭa dӳ liӋu trong các bҧng hay truy vҩn, view,« Mӝt cách ÿѫn giҧn, có thӇ coi RecordSet ÿҥi diӋn cho mӝt bҧng hay mӝt query, view trong CSDL o Command: dùng ÿӇ thӵc hiӋn các câu lӋnh SQL hay các query ÿѭӧc tҥo sҹn trong CSDL. · Ngoài nhӳng ÿӕi tѭӧng chính, ADODB có mӝt sӕ ÿӕi tѭӧng ӣ cҩp thҩp hѫn, cung cҩp nhӳng thông tin chi tiӃt. Ví dө: o Ĉӕi tѭӧng Fields là mӝt tұp hӧp các Field có trong RecordSet mô tҧ các cӝt trong các bҧng hay câu query mà RecordSet ÿó ÿҥi diӋn o Ĉӕi tѭӧng Parameters là tұp hӧp các Parameter dùng trong trѭӡng hӧp cҫn thӵc hiӋn các câu query có chӭa tham sӕ. III, Ĉӕi tѭӧng ADODC Bài toán : cho CSDL quanlysinhvien.mdb chӭa bҧng SinhVien có cҩu trúc nhѭ sau MaSV Text HoSV Text TenSV Text Makhoa Text Ngaysinh Date/Time Yêu cҫu : sӱ dөng Adodc ÿӇ truy cұp và làm viӋc trên CSDL ÿó. III.1, Ĉѭa Adodc vào chѭѫng trình và thiӃt kӃ giao diӋn · Vào menu Project/Components (Ctrl + T) · Chӑn mөc : Microsoft ADO Data Control 6.0 (OLEDB) Biên soҥn : GV Bùi TiӃn Trѭӡng - 55 -
- Giáo Trình Visual Basic Trung Tâm VNIT · Sau ÿó thiӃt kӃ giao diӋn nhѭ sau : III.2, KӃt nӕi cѫ sӣ dӳ liӋu Access thông qua Adodc · Click phҧi chuӝt vào ÿӕi tѭӧng, chӑn mөc ADODC Properties Biên soҥn : GV Bùi TiӃn Trѭӡng - 56 -
- Giáo Trình Visual Basic Trung Tâm VNIT · Trong Tab General cӫa hӝp thoҥi Property pages · Click nút Build« (ӣ Option chӑn thӭ 3), Trong cӱa sә Data Link Properties, Tab Provider Biên soҥn : GV Bùi TiӃn Trѭӡng - 57 -
- Giáo Trình Visual Basic Trung Tâm VNIT o chӑn mөc : Microsoft.Jet 4.0 OLE DB Provider o ҩn Next, hoһc ҩn chuyӇn sang Tab Connection · Click nút [«] ÿӇ chӑn CSDL Access mong muӕn · ChuyӇn sang Tab RecordSource o Command Type : cho phép bҥn lӵa chӑn phѭѫng thӭc sӁ lҩy dӳ liӋu là tӯ Eҧng (2-adCmdTable) hay tӯ câu lӋnh truy vҩn SQL (1-adCmdText) o Table or Stored Procedure Name : lӵa chӑn tên bҧng (Table) hoһc tên truy Yҩn (Query) o Command Text (SQL) : Bҥn tӵ nhұp 1 câu truy vҩn SQL bҩt kǤÿӇ lҩy dӳ liӋu. Biên soҥn : GV Bùi TiӃn Trѭӡng - 58 -
- Giáo Trình Visual Basic Trung Tâm VNIT III.3, Xuҩt thông tin thông qua Adodc · Bҥn chӑn ô TextBox muӕn ÿѭa thông tin ra. Sau ÿó thiӃt lұp 2 thuӝc tính : DataSource (Adodc) và DataFiled (Tên trѭӡng) · TiӃn hành viӋc này vӟi tҩt cҧ các Textbox còn lҥi Khi chҥy chѭѫng trình ta có kӃt quҧ nhѭ sau : III.4, Cú pháp các câu lӋnh di chuyӇn trên các bҧn ghi · Di chuyӇn vӅ bҧn ghi ÿҫu tiên Private Sub cmdDau_Click() Adodc1.Recordset.MoveFirst End Sub · Di chuyӇn vӅ bҧn ghi phía trѭӟc bҧn ghi hiӋn hành Private Sub cmdTruoc_Click() If Adodc1.Recordset.AbsolutePosition > 1 Then Biên soҥn : GV Bùi TiӃn Trѭӡng - 59 -
- Giáo Trình Visual Basic Trung Tâm VNIT Adodc1.Recordset.MovePrevious End If End Sub · Di chuyӇn vӅ bҧn ghi phía sau bҧn ghi hiӋn hành Private Sub cmdSau_Click() If Adodc1.Recordset.AbsolutePosition < Adodc1.Recordset.RecordCount Then Adodc1.Recordset.MoveNext End If End Sub · Di chuyӇn vӅ bҧn ghi cuӕi cùng Private Sub cmdDau_Click() Adodc1.Recordset.MoveLast End Sub · ViӃt lӋnh xem bҧn ghi hiӋn hành và tәng sӕ bҧn ghi (ví dө : 2 / 28 ) Private Sub cmdXem_Click() MsgBox Adodc1.Recordset.AbsolutePosition & _ " / " & Adodc1.Recordset.RecordCount End Sub III.5, Cú pháp các câu lӋnh cұp nhұt dӳ liӋu Private Sub cmdThem_Click() Adodc1.Recordset.AddNew End Sub Private Sub cmdSua_Click() Adodc1.Recordset.Update End Sub Private Sub cmdXoa_Click() Adodc1.Recordset.Delete End Sub IV, ADODB Thѭ viӋn ADODB cung cҩp cho ngѭӡi dùng các ÿӕi tѭӧng ÿӝc lұp vӟi nhau ÿӇ kӃt nӕi vào xӱ lý dӳ liӋu. Các ÿӕi tѭӧng chính cӫa ADODB bao gӗm: Connection, Command và RecordSet. Bài này muӕn giӟi thiӋu cho sinh viên nhӳng chӭc năng cӫa mӛi ÿӕi Wѭӧng trong thѭ viӋn ADODB, qua ÿó sinh viên có thӇ nҳm bҳt ÿѭӧc mӝt cách tәng quát thӭ tӵ các bѭӟc lұp trình vӟi CSDL sӱ dөng ADODB IV.1, Ĉӕi tѭӧng Connection .Ӄt nӕi vӟi CSDL Biên soҥn : GV Bùi TiӃn Trѭӡng - 60 -
- Giáo Trình Visual Basic Trung Tâm VNIT · ĈӇ truy cұp và xӱ lý dӳ liӋu trong CSDL, ӭng dөng cҫn phҧi kӃt nӕi vӟi CSDL ÿó. ADODB cung cҩp ÿӕi tѭӧng Connection ÿӇ kӃt nӕi vӟi CSDL. Vӟi Connection, ngѭӡi dùng có thӇ kӃt nӕi vӟi nhiӅu loҥi CSDL khác nhau nhѭ Access, SQL Server, Oracle hay Excel, Mail, Thѭ mөc,« · Các thông tin vӅ CSDL muӕn kӃt nӕi tӟi cҫn phҧi cung cҩp cho ÿӕi tѭӧng Connection thông qua thuӝc tính ConnectionString. ConnectionString bao gӗm 2 thông tin chính là Provider và Nguӗn dӳ liӋu, các thông tin khác có thӇ cҫn cung Fҩp thêm là Username và Password ÿӇ có thӇ truy cұp CSDL có bҧo mұt. · Sau khi ÿã gán giá trӏ cho ConnectionString, sӱ dөng hành ÿӝng OpenÿӇ mӣ NӃt nӕi. · Thuӝc tính State giúp kiӇm tra trҥng thái cӫa kӃt nӕi. o adStateOpen [1] : kӃt nӕi ÿang mӣ o adStateClosed [0] : kӃt nӕi ÿang ÿóng · Thuӝc tính CursorLocation giúp chӍÿӏnh cách Data Provider cung cҩp các chӭc Qăng thao tác vӟi CSDL vӟi hai giá trӏ adUseServer và adUseClient. Ví dө: Public cnn As New ADODB.Connection Sub ketnoi() If cnn.State = 1 Then cnn.Close cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " _ & App.Path & "\CSDL.mdb" cnn.CursorLocation = adUseClient cnn.Open If cnn.State = 1 Then MsgBox ³Ban da ket noi thanh cong´ End If End Sub Thӵc hiӋn các câu truy vҩn SQL Sau khi ÿã kӃt nӕi vӟi CSDL, ngѭӡi dùng có thӇ làm viӋc ngay vӟi dӳ liӋu thông qua các câu truy vҩn. Hành ÿӝng Execcute cӫa ÿӕi tѭӧng Connection giúp thӵc hiӋn mӝt câu lӋnh SQL Ví dө : Sub AddNewUser() strSQL = "INSERT INTO users(keyname,pass,fullname) " & _ " VALUES( " & _ " ¶" & Trim(txtUserName.Text) & " '," & _ " ' " & Trim(txtPassW1.Text) & " '," & _ " ' " & Trim(txtFullName.Text) & " ' )" cnn.Execute (strSQL) End Sub Biên soҥn : GV Bùi TiӃn Trѭӡng - 61 -
- Giáo Trình Visual Basic Trung Tâm VNIT Sub UpdateUser() strSQL = "UPDATE Users SET " & _ " keyname=' " & Trim(txtUserName) & " '," & _ " pass=' " & Trim(txtPassW1) & " '," & _ " fullname=' " & Trim(txtFullName) & " ' " & _ " WHERE keyname = ' " & strKN_Old & " ' " cnn.Execute strSQL End Sub Sub DeleteUser() strSQL = "DELETE FROM Users WHERE keyname ='" & strUN & "'" cnn.Execute strSQL End Sub IV.2, Ĉӕi tѭӧng RecordSet 7ҥo nguӗn dӳ liӋu cho ӭng dөng · Làm viӋc trӵc tiӃp vӟi dӳ liӋu thông qua các câu SQL có thӇ coi là mӝt hình thӭc thao tác dӳ liӋu ӣ cҩp thҩy. ADODB cung cҩp cho ngѭӡi dùng ÿӕi tѭӧng RecordSetÿӇ thao tác vӟi dӳ liӋu ÿѭӧc dӉ dàng. · RecordSet ÿáp ӭng các yêu cҫu cӫa ngѭӡi lұp trình nhѭ hiӇn thӏ dӳ liӋu, thêm, xoá, sӱa dӳ liӋu, làm viӋc trên tӯng dòng dӳ liӋu thay vì mӝt tұp hӧp nhiӅu mҭu tin,« Có thӇ coi RecordSet nhѭ ÿҥi diӋn cӫa mӝt bҧng hay mӝt view trong CSDL. · Ngѭӡi dùng có thӇ mӣ RecordSet ÿӇ lҩy dӳ liӋu tӯ mӝt bҧng hay nhiӅu bҧng trong CSDL bҵng mӝt câu truy vҩn SQL hay ÿѫn giҧn bҵng cách chӍ ra tên bҧng. · ViӋc mӣ RecordSet ÿѭӧc thӵc hiӋn qua hành ÿӝng Open. RecordSet cNJng cung Fҩp các thuӝc tính CursorType, LockTypeÿӇ ngѭӡi dùng có thӇ truy cұp dӳ liӋu theo cách phù hӧp vӟi ngӳ cҧnh lұp trình. Giá trӏ cӫa các thuӝc tính này có thӇ ÿѭӧc cung cҩp trӵc tiӃp qua hành ÿӝng Open. Cú Pháp : .Open [Source], [ActiveConnection], [CursorType], [LockType] Mô Tҧ : · Source : Nӝi dung cҫn truy xuҩt · ActiveConnection : Nӝi dung khai báo ConnectionString hoһc tên Connection ÿang ÿѭӧc mӣ · CursorType : Phân loҥi recordset. Có các giá trӏ sau : Biên soҥn : GV Bùi TiӃn Trѭӡng - 62 -
- Giáo Trình Visual Basic Trung Tâm VNIT o adOpenStatic [3] : mҭu tin tҥo tҥi máy con. Không tӵÿӝng cұp nhұt o adOpenDynamic [2] : mҭu tin tҥo trên máy chӫ. Tӵÿӝng cұp nhұt. o adOpenKeySet [1] : không tӵÿӝng cұp nhұt các mҭu tin o adOpenForewardOnle [0] : ChӍ di chuyӇn bҵng MoveNext · CursorType : Xác ÿӏnh cách khoá dӳ liӋu khi cұp nhұt. Có các giá trӏ sau : o adLockReadOnly : [1] chӍ cho phép ÿӑc (luôn luôn khoá) o adLockOptimistic : [2] chӍ khoá khi cұp nhұt mҭu tin o adLockBatchOptimistic : [3] giӕng [2] nhѭng cho phép cұp nhұt ÿӗng thӡi nhiӅu mҭu tin. o adLockPessimistic : [4] mҭu tin sӁ khoá ngay khi thӵc hiӋn Update hay AddNew. chӍ dùng khi CursorLocation là adUseServer Ví Dө : Dim rsSinhVien As New ADODB.Recordset Sub Lay_Nguon_SinhVien() sql = "SINHVIEN" If rsSinhVien.State = 1 Then rsSinhVien.Close rsSinhVien.Open sql, cnn, 3, 3 End Sub HiӇn thӏ dӳ liӋu · RecordSet ÿѭӧc dùng làm nguӗn dӳ liӋu (data source) cung cҩp dӳ liӋu cho các control khác ÿӇ hiӇn thӏ thông tin trong chѭѫng trình. Hҫu hӃt các control cѫ sӣ nhѭ TextBox, Label, CheckBox, Image,« ÿӅu có thӇ liên kӃt (binding) vӟi RecordSet ÿӇ tӵÿӝng hiӇn thӏ thông tin có trong mҭu tin hiӋn hành · Các control liên kӃt dӳ liӋu vӟi RecordSet thông qua hai thuӝc tính DataSource và DataField. Ví dө : Sub Hien_Thi_DuLieu() Call Lay_Nguon_SinhVien Set txtMaSVn.DataSource = rsSinhVien txtMaSV.DataField = "MaSV" Set txtHoTen.DataSource = rsSinhVien txtHoTen.DataField = " HoTen" Set txtNgaySinh.DataSource = rsSinhVien txtNgaySinh.DataField = " NgaySinh" End Sub Biên soҥn : GV Bùi TiӃn Trѭӡng - 63 -
- Giáo Trình Visual Basic Trung Tâm VNIT Làm viӋc vӟi tӯng mҭu tin · Vӟi câu truy vҩn SQL, ngѭӡi dùng chӍ không thӇ thao tác vӟi tӯng dòng dӳ liӋu trong các dòng dӳ liӋu kӃt quҧ. Ngѭӧc lҥi, vӟi RecordSet ngѭӡi dùng luôn làm viӋc vӟi mӝt mҭu tin duy nhҩt trong bӝ mҭu tin là mҭu tin hiӋn hành. Ví dө : vӏ trí bҧn ghi hiӋn hành = rsSinhVien.AbsolutePosition tәng sӕ bҧn ghi trong CSDL = rsSinhVien.RecordCount · ĈӇ chӑn làm viӋc vӟi mҭu tin khác trong RecordSet, ngѭӡi dùng có thӇ sӱ dөng các hành ÿӝng : MoveFirst, MoveNext, MoveLast, MovePrevious, Move Ví dө : Dim rsSinhVien As New ADODB.Recordset Private Sub cmdDau_Click() rsSinhVien.MoveFirst End Sub Private Sub cmdTruoc_Click() If rsSinhVien.AbsolutePosition > 1 Then rsSinhVien.MovePrevious End If End Sub Private Sub cmdSau_Click() If rsSinhVien.AbsolutePosition < rsSinhVien.RecordCount Then rsSinhVien.MoveNext End If End Sub Private Sub cmdCuoi_Click() rsSinhVien.MoveLast End Sub &ұp nhұt dӳ liӋu · Ngoài viӋc dùng RecordSet nhѭ nguӗn dӳ liӋu ÿӇ hiӇn thӏ, ngѭӡi dùng có thӇ Fұp nhұt dӳ liӋu gián tiӃp vào CSDL thông qua RecordSet bҵng cách sӱ dөng các hành ÿӝng AddNew, Delete, Update và CancelUpdate. · AddNew : dùng ÿӇ thêm mӟi 1 bҧn ghi · Update / UpdateBatch : chҩp nhұn cұp nhұt sӵ thay ÿәi · CancelUpdate / CancelBatch : bӓ qua sӵ thay ÿәi · Delete : Xoá bӓ bҧn ghi Biên soҥn : GV Bùi TiӃn Trѭӡng - 64 -
- Giáo Trình Visual Basic Trung Tâm VNIT · ViӋc cұp nhұt dӳ liӋu vào RecordSet và tӯ RecordSet xuӕng CSDL diӉn ra không ÿӗng thӡi, dӳ liӋu chӍ cұp nhұt xuӕng CSDL khi ngѭӡi dùng thӵc hiӋn hành ÿӝng ³Update´. Cѫ chӃ này cho phép ngѭӡi dùng có cѫ hӝi kiӇm tra lҥi dӳ liӋu có hӧp lӋ hay không trѭӟc khi lѭu thӵc sӵ xuӕng CSDL. RecordSet cung Fҩp hai cѫ chӃ cұp nhұt là Update và UpdateBatch ÿѭӧc chӍÿӏnh vào lúc mӣ RecordSet. Ví dө : Dim rsSinhVien As New ADODB.Recordset Private Sub cmdThemMoi_Click() rsSinhVien.AddNew End Sub Private Sub cmdSuaDoi_Click() rsSinhVien.Update End Sub Private Sub cmdXoaBo_Click() rsSinhVien.Delete End Sub Chѭѫng VII : DataGrid ± DataList ± DataCombo I, Sӱ dөng công cө DataGrid I.1, Ĉѭa DataGrid vào chѭѫng trình : DataGrid là mӝt ÿLӅu khiӇn ActiveX, nên muӕn sӱ dөng chúng ta phҧi ÿѭa vào ӭng Gөng thông qua chӭc năng Project ± Components ± Microsoft DataGrid Control 6.0 ĈLӅu khiӇn này chӭa trong tұp tin MSDATGRD.OCX Biên soҥn : GV Bùi TiӃn Trѭӡng - 65 -
- Giáo Trình Visual Basic Trung Tâm VNIT I.2, ThiӃt kӃ DataGrid : DataGrid khi ÿѭa vào form mһc ÿӏnh chӍ có hai cӝt, muӕn tăng giҧm cӝt ta có thӇ làm nhѭ sau : nhҩn chuӝt phҧi trên DataGrid và chӑn Edit trên shortcut menu (hình dѭӟi bên trái). Sau ÿó, nhҩn chuӝt phҧi lҫn thӭ hai trên DataGrid, lúc này shortcut menu có Qӝi dung hình bên phҧi. 6ӱ dөng các mөc : Delete : ÿӇ xoá cӝt ÿang ÿѭӧc chӑn trên DataGrid Insert : ÿӇ chèn thêm mӝt cӝt vào trѭӟc cӝt ÿang ÿѭӧc chӑn trên DataGrid Append : thêm mӝt cӝt vào vӏ trí sau cùng trên DataGrid I.3, Liên kӃt Recordset vӟi DataGrid Ta liên kӃt DataGrid vӟi Recordset qua thuӝc tính Datsource Set .DataSource = Ví dө : Dim rsSV As New ADODB.Recordset Sub LayNguonDG() sql = "select * from sinhvien" If rsSV.State = 1 Then rsSV.Close rsSV.Open sql, cnn, 3, 3 Set DataGrid1.DataSource = rsSV End Sub I.4, Truy xuҩt trӏ cӫa mӝt ô trên DataGrid Cách 1 : Trѭӟc khi lҩy nӝi dung cӫa mӝt ô bҩt kǤ trên DataGrid, ta dùng thuӝc tính Col và Row ÿӇ chuyӇn ô hiӋn hành trên DataGrid ÿӃn ô muӕn lҩy nӝi dung và dùng thuӝc tính Text ÿӇ lҩy nӝi dung. Biên soҥn : GV Bùi TiӃn Trѭӡng - 66 -
- Giáo Trình Visual Basic Trung Tâm VNIT Ví dө : Muӕn lҩy trӏ cӫa ô ӣ cӝt thӭ 3, dòng thӭ 4 (lѭu ý cӝt, dòng ÿánh sӕ tӯ 0) DataGrid1.Col = 2 DataGrid1.Row = 3 MsgBox DataGrid1.Text Cách 2 : 6ӱ dөng thuӝc tính Text,Value cӫa ÿӕi tѭӧng Columns( ) trên DataGrid ÿӇ lҩy nӝi dung trên dòng hiӋn hành Ví dө : Muӕn lҩy trӏ cӝt thӭ 3 cӫa dòng hiӋn hành : MsgBox DataGrid1.Columns(2).Text (giá trͣ hi͛n thͣ) MsgBox DataGrid1.Columns(2).Value (giá trͣ ĺu tr·) II, Data List ± Data Combo DataList và DataCombo là hai control ÿһc biӋt có khҧ năng kӃ t nӕi vӟi nguӗn dӳ liӋu. Hai control này có thӇ sӱ dөng 2 nguӗn dӳ liӋu, mӝt ÿӇ hiӇn thӏ, mӝt ÿӇ cұp nhұt dӳ liӋu. · Các thuӝc tính dùng khi muӕn cұp nhұt dӳ liӋu : DataSource : chӭa recordset nguӗn DataField : chӭa Field ( trѭӡng dӳ liӋu) · Các thuӝc tính hiӇn thӏ dӳ liӋu RowSource : chӭa nӝi dung các mҭu tin ListField : chӑn trѭӡng hiӇn thӏ nӝi dung BoundColumn : cӝt nӝi dung lѭu trӳ ( không hiӇn thӏ) BoundText : nӝi dung lѭu trӳ ( không hiӇn thӏ) Ví dө : ThiӃt kӃ giao diӋn nhѭ dѭӟi, bao gӗm 1 DataCombo và 1 DataGrid. Yêu cҫu khi chӑn 1 khoa bҩt kǤ tӯ DataCombo thì sӁ liӋt kê toàn bӝ danh sách sinh viên Fӫa khoa ÿó lên DataList bên cҥnh. Mã nguӗn : Dim rsKhoa As New ADODB.Recordset Biên soҥn : GV Bùi TiӃn Trѭӡng - 67 -
- Giáo Trình Visual Basic Trung Tâm VNIT Public cn As New ADODB.Connection Dim rsSV As New ADODB.Recordset Public Sub ketnoicsdl() Dim strProvider As String, strSource As String strProvider = "provider=MICROSOFT.JET.OLEDB.4.0" strSource = "Data Source =" & App.Path & "\qlsinhvien.mdb" If cn.State = adStateOpen Then cn.Close cn.ConnectionString = strProvider & "; " & strSource cn.CursorLocation = adUseClient cn.Open End Sub Private Sub Form_Load() Call ketnoicsdl rsKhoa.Open "Khoa", cn, adOpenStatic, adLockReadOnly, adCmdTable Set cboKhoa.RowSource = rsKhoa cboKhoa.ListField = "TenKhoa" cboKhoa.BoundColumn = "MaKhoa" End Sub Private Sub cboKhoa_Change() sql = "select * from sinhvien where makhoa='" & cboKhoa.BoundText & "'" If rsSV.State <> adStateClosed Then rsSV.Close rsSV.Open sql, cn, adOpenStatic, adLockOptimistic, adCmdText Set lstSV.RowSource = rsSV lstSV.ListField = "HoTen" End Sub III, Hѭӟng Dүn Bài Tұp : III.1, Bài tұp 1 : quҧn lý sinh viên (sӱ dөng kӃt hӧp DataCombo vӟi TextBox) %ѭӟc 1 : ViӃt chѭѫng trình kӃt nӕi CSDL (trong Module) Biên soҥn : GV Bùi TiӃn Trѭӡng - 68 -
- Giáo Trình Visual Basic Trung Tâm VNIT Public cnn As New ADODB.Connection Public duong_dan As String, strProvider As String Sub Mo_CSDL() duong_dan = App.Path & "\CSDL.MDB" strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" & duong_dan If cnn.State = 1 Then cnn.Close cnn.CursorLocation = adUseClient cnn.Open strProvider End Sub %ѭӟc 2 : mã nguӗn trong Form Dim rsSinhVien As New ADODB.Recordset Dim rsKhoa As New ADODB.Recordset Sub LayNguonKhoa() If rsKhoa.State = 1 Then rsKhoa.Close sql = "KHOA" rsKhoa.Open sql, cnn, 3, 3 Set dcboKhoa.RowSource = rsKhoa dcboKhoa.ListField = "TenKhoa" dcboKhoa.BoundColumn = "MaKhoa" End Sub Sub LayNguonSinhVien() If rsSinhVien.State = 1 Then rsSinhVien.Close sql = "SINHVIEN" rsSinhVien.Open sql, cnn, 3, 3 Set txtMasv.DataSource = rsSinhVien txtMasv.DataField = "MaSV" Set txtHoten.DataSource = rsSinhVien txtHoten.DataField = "HoTenSV" Set txtNgaysinh.DataSource = rsSinhVien txtNgaysinh.DataField = "Ngaysinh" Set txtDiachi.DataSource = rsSinhVien txtDiachi.DataField = "Diachi" Set dcboKhoa.DataSource = rsSinhVien dcboKhoa.DataField = "MaKhoa" End Sub Private Sub Form_Load() Call Mo_CSDL Call LayNguonKhoa Biên soҥn : GV Bùi TiӃn Trѭӡng - 69 -
- Giáo Trình Visual Basic Trung Tâm VNIT Call LayNguonSinhVien End Sub Private Sub cmdDau_Click() rsSinhVien.MoveFirst End Sub Private Sub cmdTruoc_Click() If rsSinhVien.AbsolutePosition > 1 Then rsSinhVien.MovePrevious End If End Sub Private Sub cmdSau_Click() If rsSinhVien.AbsolutePosition < rsSinhVien.RecordCount Then rsSinhVien.MoveNext End If End Sub Private Sub cmdCuoi_Click() rsSinhVien.MoveLast End Sub Private Sub txtMasv_Change() On Error Resume Next lblVT = rsSinhVien.AbsolutePosition & "/" & rsSinhVien.RecordCount End Sub III.2, Bài tұp 2 : Sӱ dөng kӃt hӧp DataCombo vӟi DataGrid DataCombo sӁ liӋt kê toàn bӝ danh mөc các khoa. Khi ta chӑn 1 khoa nào ÿó thì toàn Eӝ thông tin cӫa các sinh viên khoa ÿó sӁÿѭӧc liӋt kê hiӇn thӏ ra bên DataGrid ӣ bên Gѭӟi. Biên soҥn : GV Bùi TiӃn Trѭӡng - 70 -
- Giáo Trình Visual Basic Trung Tâm VNIT %ѭӟc 1 : ViӃt chѭѫng trình kӃt nӕi CSDL (trong Module) Public cnn As New ADODB.Connection Public duong_dan As String, strProvider As String Sub Mo_CSDL() duong_dan = App.Path & "\CSDL.MDB" strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" & duong_dan If cnn.State = 1 Then cnn.Close cnn.CursorLocation = adUseClient cnn.Open strProvider End Sub %ѭӟc 2 : mã nguӗn trong Form Dim rsSinhVien As New ADODB.Recordset Dim rsKhoa As New ADODB.Recordset Sub LayNguonKhoa() If rsKhoa.State = 1 Then rsKhoa.Close sql = "KHOA" rsKhoa.Open sql, cnn, 3, 3 Set dcboKhoa.RowSource = rsKhoa dcboKhoa.ListField = "TenKhoa" dcboKhoa.BoundColumn = "MaKhoa" End Sub Private Sub Form_Load() Call Mo_CSDL Call LayNguonKhoa End Sub Sub LayNguonSinhVien() Dim strMaKhoa As String strMaKhoa = dcboKhoa.BoundText If rsSINHVIEN.State = 1 Then rsSINHVIEN.Close sql = "SELECT * FROM SinhVien Where Makhoa ='" & strMaKhoa & "'" rsSINHVIEN.Open sql, cnn, 3, 3 Set dgSinhVien.DataSource = rsSINHVIEN End Sub Private Sub dcboKhoa_Click(Area As Integer) If Area = 2 Then Call LayNguonSinhVien End If End Sub Biên soҥn : GV Bùi TiӃn Trѭӡng - 71 -