ÿþ<HTML><HEAD> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta http-equiv="Content-Language" content="vi"> <META NAME="keywords" content="Visual Basic, VB Programming in Vietnamese, Vovisoft, VB6, VB Tutorials, Learn Visual Basic, Internet, Unicode, Vietnamese VB tutorials, Database, Asp, Java, Javascript, VBscript, FrontPage 2000, XML, Ms Office 2000"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <TITLE>My First VB Program</TITLE> <link rel="stylesheet" type="text/css" href="http://www.vovisoft.com/_borders/topbottom.css"> </head> <body marginwidth="0" marginheight="0" leftmargin="0" topmargin="65"> <Blockquote><Blockquote><a href="http://www.vovisoft.com"> <img border="0" src="http://www.vovisoft.com/vovisoft/images/vs-logo4_10.gif" alt="Logo of Vovisoft" width="102" height="77" > </a></Blockquote></Blockquote> <center> <h1><font face="Tahoma" color="#000000">Khóa Hàm Th&#7909; Visual Basic 6.0</font></h1> <h2><font face="Tahoma" color="#800000">Ch&#432;&#417;ng Hai- Vi&#7871;t ch&#432;&#417;ng trình &#273;&#7847;u tiên</font></h2> </center> <Blockquote><Blockquote> <font face="Tahoma"> <Font size=6 color=green >B</Font>&#7841;n &#273;ang làm quen v&#7899;i môi tr&#432;&#7901;ng tri&#7875;n khai l&#7853;p trình (Integrated Development Environment - IDE) c&#7911;a MS VB6 và r&#7845;t nóng ru&#7897;t mu&#7889;n vi&#7871;t nh&#7919;ng dòng mã &#273;&#7847;u tiên &#273;&#7875; chào m&#7915;ng th&#7871; gi&#7899;i.<br> Ta th&#7917; ôn l&#7841;i m&#7897;t s&#7889; v&#7845;n &#273;&#7873; mà có l&#7869; b&#7841;n &#273;ã bi&#7871;t r&#7891;i. M&#7897;t ch&#432;&#417;ng trình Visual Basic g&#7891;m có ph&#7847;n mã l&#7853;p trình và các hình &#7843;nh (visual components). B&#7841;n có th&#7875; thi&#7871;t k&#7871; ph&#7847;n hình &#7843;nh b&#7857;ng cách dùng nh&#7919;ng &#273;&#7891; ngh&#7873; (Controls hay Objects) t&#7915; Túi &#273;&#7891; ngh&#7873; (Toolbox) n&#7857;m bên trái. N&#7871;u b&#7841;n không th&#7845;y cái Túi &#273;&#7891; ngh&#7873; thì dùng m&#7879;nh l&#7879;nh <b> Menu View|Toolbox</b> &#273;&#7875; b&#7855;t nó hi&#7879;n ra.<br> Khi b&#7841;n b&#7855;t &#273;&#7847;u thi&#7871;t k&#7871; m&#7897;t ch&#432;&#417;ng trình b&#7857;ng cách ch&#7885;n Standard EXE, môi tr&#432;&#7901;ng tri&#7875;n khai l&#7853;p trình (IDE) cho b&#7841;n s&#7861;n m&#7897;t Form tên là Form1. B&#7841;n có th&#7875; &#273;&#7893;i tên (Name) nó trong cái c&#7917;a s&#7893; Propeties n&#7857;m phía d&#432;&#7899;i bên ph&#7843;i (trong hình d&#432;&#7899;i &#273;ây ta edit Name property c&#7911;a Form1 thành ra frmMainForm). B&#7841;n c&#361;ng có th&#7875; s&#7917;a &#273;&#7873; t&#7921;a (Title) c&#7911;a form ra cái gì có ý ngh&#297;a h&#417;n b&#7857;ng cách &#273;&#7893;i Caption c&#7911;a form c&#361;ng trong c&#7917;a s&#7893; Propeties (trong hình d&#432;&#7899;i &#273;ây ta edit Caption property c&#7911;a form thành ra "Chi tiet cua ban toi").<br> <br> <img border="0" src="images/frmMain.jpg" width="674" height="354"> </font> <H3><Font color=green face="Tahoma">S&#7855;p &#273;&#7863;t các v&#7853;t d&#7909;ng lên Form </Font></H3> <font face="Tahoma"> Mu&#7889;n &#273;&#7863;t m&#7897;t Control lên Form, click hình cái Control trong Toolbox r&#7891;i Drag (b&#7845;m nút trái c&#7911;a con chu&#7897;t r&#7891;i kéo cho thành hình ch&#7919; nh&#7853;t tr&#432;&#7899;c khi buông nút trái ra) con chu&#7897;t trên Form v&#7869; thành c&#7903; c&#7911;a Control. Nh&#7919;ng Controls b&#7841;n s&#7869; dùng th&#432;&#7901;ng nh&#7845;t t&#7915; Toolbox là Label (nhãn), Textbox (h&#7897;p &#273;&#7875; &#273;ánh ch&#7919; vào) và CommandButton (nút b&#7845;m m&#7879;nh l&#7879;nh).</font> <Blockquote><Blockquote><font face="Tahoma"><IMG SRC="images/chitietform.jpg" ALT="" width="285" height="182"></font></Blockquote></Blockquote> <font face="Tahoma"> Trong hình trên ta có ba Label và ba Textbox. Mu&#7889;n s&#7917;a ch&#7919; Label1 ra "Ten" thì edit Property Caption. Còn Textbox không dùng Property Caption mà dùng Property Text. Ta c&#361;ng có th&#7875; thay &#273;&#7893;i các Property Caption và Text trong khi ch&#7841;y ch&#432;&#417;ng trình (at run-time). Trong lúc thi&#7871;t k&#7871; (design time) b&#7841;n có th&#7875; s&#7917;a &#273;&#7893;i ki&#7875;u ch&#7919; c&#7911;a nh&#7919;ng Controls b&#7857;ng cách edit Property Font c&#7911;a chúng trong c&#7917;a s&#7893; Properties (click bên ph&#7843;i c&#7911;a Property Font trong Properties Window, IDE s&#7869; pop-up cái Font dialog &#273;&#7875; b&#7841;n l&#7921;a ch&#7885;n nh&#7919;ng &#273;&#7863;c tính c&#7911;a Font nh&#432; trong hình d&#432;&#7899;i &#273;ây).&nbsp;</font> <p><img border="0" src="images/fonts.jpg" width="702" height="348"> <font face="Tahoma"> <br><br> N&#7871;u b&#7841;n th&#7845;y b&#7921;c mình t&#7841;i sao cái c&#7903; ch&#7919; t&#7921; có (default size) c&#7911;a các Control h&#417;i nh&#7887;, b&#7841;n có th&#7875; gi&#7843;i quy&#7871;t b&#7857;ng cách s&#7917;a c&#7903; ch&#7919; c&#7911;a chính Form cho nó l&#7899;n h&#417;n. Vì khi m&#7897;t Control &#273;&#432;&#7907;c &#273;&#7863;t lên m&#7897;t Form, nó th&#7915;a k&#7871; c&#7903; ch&#7917; c&#7911;a Form.<br>&#272;&#7875; s&#7855;p x&#7871;p cho m&#7897;t s&#7889; Control th&#7859;ng hàng v&#7899;i nhau b&#7841;n ch&#7885;n c&#7843; nhóm r&#7891;i dùng m&#7879;nh l&#7879;nh Menu<b> Format|Align|Lefts</b> .v.v..N&#7871;u b&#7841;n ch&#432;a bi&#7871;t cách ch&#7885;n m&#7897;t nhóm Control thì có hai cách. Cách th&#7913; nh&#7845;t b&#7841;n &#273;è nút Shift trong khi click các Control b&#7841;n mu&#7889;n ch&#7885;n. Cái Control mà b&#7841;n ch&#7885;n sau cùng s&#7869; là cái chu&#7849;n &#273;&#7875; các Control khác s&#7869; làm gi&#7889;ng theo. Cách th&#7913; hai là Drag cho s&#7907;i dây thun (rubber band) b&#7885;c chung quanh các Control. Trong tr&#432;&#7901;ng h&#7907;p các Control n&#7847;y n&#7857;m trong m&#7897;t container, thí d&#7909; nh&#432; m&#7897;t khung (Frame) hay PictureBox, thì b&#7841;n ph&#7843;i click Form tr&#432;&#7899;c, r&#7891;i &#273;è nút Ctrl trong khi Drag rubber band bao các Control.</font> </p> <H3><Font color=green face="Tahoma">Ch&#7913;a m&#7885;i th&#7913; c&#7911;a m&#7897;t d&#7921; án VB </Font></H3> <font face="Tahoma"> T&#7899;i &#273;ây b&#7841;n &#273;&#7875; ý th&#7845;y trong c&#7917;a s&#7893; bên ph&#7843;i, phía trên, g&#7885;i là Project Explorer, có hình gi&#7889;ng nh&#432; m&#7897;t cái cây (tree) cho th&#7845;y ta có m&#7897;t Form trong m&#7897;t Project (d&#7921; án). Project là m&#7897;t cách ti&#7879;n d&#7909;ng &#273;&#7875; ta s&#7855;p x&#7871;p nh&#7919;ng gì c&#7847;n thi&#7871;t cho m&#7897;t d&#7921; án. Th&#432;&#7901;ng thì m&#7897;t d&#7921; án có nhi&#7873;u Form và có th&#7875; c&#7847;n nh&#7919;ng th&#7913; khác.<br> M&#7895;i Form s&#7869; &#273;&#432;&#7907;c ch&#7913;a vào &#273;&#297;a d&#432;&#7899;i d&#7841;ng &quot;frmMainForm.<b>frm</b>&quot;. B&#7841;n save m&#7897;t form b&#7857;ng menu command <b> File | Save formfilename.frm</b>. N&#7871;u trong Form1 có ch&#7913;a hình &#7843;nh (thí d&#7909; b&#7841;n dùng&nbsp; Properties Window &#273;&#7875; ch&#7885;n m&#7897;t icon hình g&#432;&#417;ng m&#7863;t c&#432;&#7901;i làm icon cho frmMainForm) thì các hình &#7843;nh c&#7911;a frmMainForm s&#7869; &#273;u&#7907;c t&#7921; &#273;&#7897;ng ch&#7913;a trong h&#7891; s&#417; &quot;frmMainForm.<b>frx</b>&quot;. L&#432;u ý là không nh&#7845;t thi&#7871;t tên c&#7911;a h&#7891; s&#417; (file) mà b&#7841;n ph&#7843;i cho bi&#7871;t khi ch&#7913;a (save) ph&#7843;i gi&#7889;ng nh&#432; tên c&#7911;a Form mà b&#7841;n dùng trong ch&#432;&#417;ng trình. Tuy nhiên b&#7841;n nên dùng cùng m&#7897;t tên cho c&#7843; hai &#273;&#7875; sau n&#7847;y d&#7877; tìm h&#7891; s&#417; n&#7871;u có th&#7845;t l&#7841;c. Theo qui &#432;&#7899;c thông th&#432;&#7901;ng, các Form &#273;&#432;&#7907;c &#273;&#7863;t tên b&#7855;t &#273;&#7847;u b&#7857;ng &quot;<b>frm</b>&quot;, thí d&#7909; nh&#432; "frmMainForm".<br> Khi b&#7841;n <b>save</b> m&#7897;t Project thì có ngh&#297;a là save t&#7845;t c&#7843; h&#7891; s&#417; dùng cho d&#7921; án, k&#7875; c&#7843; các Form và m&#7897;t h&#7891; s&#417; cho chính Project, thí d&#7909; nh&#432; "MyFirstProg.vbp" ("vbp" là vi&#7871;t t&#7855;t ch&#7919; Visual Basic Project). B&#7841;n save Vb6 project b&#7857;ng menu command <b> File | Save Project</b>.&nbsp; À, mu&#7889;n &#273;&#7893;i tên Project, b&#7841;n click lên hàng trên cùng bên ph&#7843;i trong c&#7917;a s&#7893; Project Explorer (Project1 (Project1.vbp)), r&#7891;i edit tên c&#7911;a Project trong c&#7917;a s&#7893; Properties phía d&#432;&#7899;i. B&#7841;n nên ch&#7913;a t&#7845;t c&#7843; nh&#7919;ng h&#7891; s&#417; dùng cho cùng m&#7897;t Project trong cùng m&#7897;t t&#7853;p (Folder/Directory).<br> B&#7841;n có th&#7875; dùng Notepad &#273;&#7875; m&#7903; ra xem ch&#417;i, coi trong &quot;frmMainForm.frm&quot; có gì. B&#7841;n s&#7869; th&#7845;y trong &#7845;y g&#7891;m có hai ph&#7847;n: ph&#7847;n &#273;&#7847;u là di&#7877;n t&#7843; các Control n&#7857;m trong Form, ph&#7847;n còn l&#7841;i là mã l&#7853;p trình mà b&#7841;n vi&#7871;t. B&#7841;n c&#361;ng s&#7869; chú ý là các properties mà b&#7841;n &#273;ã s&#7917;a cho các Control &#273;&#7873;u &#273;&#432;&#7907;c ghi l&#7841;i trong ph&#7847;n &#273;&#7847;u nói trên. VB d&#7921;a vào ph&#7847;n di&#7877;n t&#7843; các Control &#273;&#7875; thi&#7871;t l&#7853;p l&#7841;i (reconstruct) hình &#7843;nh c&#7911;a Form.</font> <p><img border="0" src="images/visualpart.jpg" width="209" height="561" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img border="0" src="images/codepart.jpg" width="272" height="548" ><font face="Tahoma"><br> Sau n&#7847;y, khi &#273;ã lão luy&#7879;n VB, b&#7841;n có th&#7875; dùng m&#7897;t ch&#432;&#417;ng trình t&#7921; &#273;&#7897;ng ch&#7871; (generate) ra nh&#7919;ng hàng di&#7877;n t&#7843; các Control cho m&#7897;t Form.<br>&#272;ó là k&#7929; thu&#7853;t dùng trong các Wizards c&#7911;a VB &#273;&#7875; ch&#7871; m&#7897;t s&#7889; ch&#432;&#417;ng trình kh&#7903;i &#273;&#7847;u cho chúng ta t&#7915; các b&#7843;ng k&#7867;m (Template).</font></p> <H3><Font color=green face="Tahoma">Thêm mã l&#7853;p trình &#273;&#7875; x&#7917; lý m&#7897;t s&#7921; c&#7889; </Font></H3> <font face="Tahoma"> H&#7847;u h&#7871;t l&#7853;p trình trong Visual Basic là vi&#7871;t mã &#273;&#7875; x&#7917; lý các s&#7921; c&#7889; (Event). Thí d&#7909; mu&#7889;n ch&#7845;m d&#7913;t ch&#432;&#417;ng trình, ng&#432;&#7901;i s&#7917; d&#7909;ng s&#7869; click nút "Xuat". &#272;&#7875; th&#7921;c hi&#7879;n &#273;i&#7873;u n&#7847;y trong khi tri&#7875;n khai ch&#432;&#417;ng trình b&#7841;n doubleClick (click liên ti&#7871;p 2 l&#7847;n) nút "Xuat". VB IDE s&#7869; vi&#7871;t s&#7861;n cho b&#7841;n cái v&#7887; c&#7911;a m&#7897;t Subroutine:</font> <Blockquote><code> <font face="Tahoma"> <Font color=blue>Private Sub cmdXuat_Click()</Font><br> &nbsp;&nbsp;&nbsp;End &nbsp;&nbsp;&nbsp; <Font color=green>' B&#7841;n ch&#7881; vi&#7871;t thêm dòng n&#7847;y &#273;&#7875; k&#7871;t thúc ch&#432;&#417;ng trình</Font><br> <font color="blue">End Sub</font><br> </font> </code></Blockquote> <font face="Tahoma"> &#272;&#7875; ý là tên (Name) c&#7911;a nút Xuat là "cmdXuat" ("cmd" là vi&#7871;t t&#7855;t ch&#7919; CommandButton), VB g&#7855;n thêm d&#7845;u g&#7841;ch d&#432;&#7899;i và Event Click &#273;&#7875; làm thành tên <b>cmdXuat_Click</b> c&#7911;a Sub, ch&#432;&#417;ng trình nh&#7887; s&#7869; &#273;&#432;&#7907;c x&#7917; lý khi ng&#432;&#7901;i s&#7917; d&#7909;ng click nút Xuat. Ch&#432;&#417;ng trình nh&#7887; hay Subroutine n&#7847;y còn &#273;&#432;&#7907;c g&#7885;i là Event Handler cho Event Click. Hàng ch&#7919; xanh lá cây là dùng &#273;&#7875; gi&#7843;i thích cho l&#7853;p trình viên (g&#7885;i là Comment), VB s&#7869; hoàn toàn không chú ý &#273;&#7871;n nó khi x&#7917; lý Sub cmdXuat_Click.<br> Comment có ngh&#297;a là chú thích. Trong VB chú thích b&#7855;t &#273;&#7847;u b&#7857;ng d&#7845;u single quote <Font color=green><b>'</b></Font>. Khi VB th&#7845;y d&#7845;u n&#7847;y là nó b&#7887; qua nh&#7919;ng gì còn l&#7841;i trên dòng mã.<br> Là L&#7853;p trình viên chuyên nghi&#7879;p b&#7841;n nên t&#7853;p thói quen dùng Comment m&#7885;i n&#417;i &#273;&#7875; giúp ng&#432;&#7901;i khác và chính b&#7841;n hi&#7875;u ch&#432;&#417;ng trình c&#7911;a mình. Nên nh&#7899; là ti&#7873;n phí t&#7893;n &#273;&#7875; b&#7843;o trì m&#7897;t ch&#432;&#417;ng trình thì ít nh&#7845;t là t&#432;&#417;ng &#273;&#432;&#417;ng v&#7899;i s&#7889; ti&#7873;n b&#7887; ra l&#7847;n &#273;&#7847;u &#273;&#7875; tri&#7875;n khai. B&#7843;o trì có ngh&#297;a là th&#259;m vi&#7871;ng l&#7841;i ch&#432;&#417;ng trình &#273;&#7875; s&#7917;a l&#7895;i (fix bug) và thêm các &#273;&#7863;c &#273;i&#7875;m cho hay h&#417;n (enhancement).<br> Nói chung h&#7875; b&#7841;n làm &#273;i&#7873;u gì bí hi&#7875;m hay c&#7855;c c&#7899; thì làm &#417;n gi&#7843;i thích rõ ràng.<br> N&#7871;u mu&#7889;n c&#7855;t m&#7897;t dòng mã VB ra làm hai dòng thì ch&#7845;m d&#7913;t dòng th&#7913; nh&#7845;t b&#7857;ng d&#7845;u g&#7841;ch d&#432;&#7899;i <b>_</b>.<br> Ti&#7871;p theo, b&#7841;n doubleClick nút "Viet vao dia" và vi&#7871;t nh&#7919;ng hàng mã sau:<br> </font> <Blockquote><code> <font face="Tahoma"> <Font color=blue>Private Sub cmdViet_Click()</Font><br> &nbsp;&nbsp;&nbsp;Open "myFriends.txt" For Output As #2 <Font color=green>' M&#7903; m&#7897;t h&#7891; s&#417; &#273;&#7875; vi&#7871;t ra và g&#7885;i là c&#7893;ng s&#7889; 2</Font><br> &nbsp;&nbsp;&nbsp;<Font color=green>' Vi&#7871;t vào c&#7893;ng s&#7889; 2: Tên, &#272;&#7883;a ch&#7881; và Tu&#7893;i, ng&#259;n&nbsp;&nbsp; cách nhau b&#7857;ng d&#7845;u ch&#7845;m ph&#7849;y</Font><br> &nbsp;&nbsp;&nbsp;Print #2, txtTen & ";" & txtDiachi & ";" & txtTuoi<br> &nbsp;&nbsp;&nbsp;Close #2 <Font color=green>' &#272;óng c&#7893;ng s&#7889; 2</Font><br> <Font color=blue>End Sub</Font></font> </code></Blockquote> <font face="Tahoma"> Trong Sub cmdViet_Click, tr&#432;&#7899;c h&#7871;t ta m&#7903; m&#7897;t h&#7891; s&#417; tên là &quot;<b>myFriends.txt</b>&quot; và g&#7885;i nó là c&#7893;ng s&#7889; 2. Sau khi m&#7903; h&#7891; s&#417; &#273;&#7875; vi&#7871;t ra ta ráp Tên, &#272;&#7883;a ch&#7881; và Tu&#7893;i l&#7841;i, ng&#259;n cách b&#7857;ng d&#7845;u ch&#7845;m ph&#7849;y (<b>;</b>) &#273;&#7875; &#273;ánh d&#7845;u nh&#7905; sau n&#7847;y ta mu&#7889;n g&#7903; riêng ba th&#7913; ra tr&#7903; l&#7841;i. D&#7845;u "<b>&amp;</b>&quot; là operator &#273;&#7875; ráp (concatenate) hai dòng ch&#7919; (text string) l&#7841;i v&#7899;i nhau.<br> Print #2 có ngh&#297;a là vi&#7871;t ra c&#7893;ng s&#7889; 2, t&#7913;c là h&#7891; s&#417; "myFriends.txt".<br> Th&#7913; chúng ta vi&#7871;t ra c&#7893;ng 2 là Tên, &#272;&#7883;a ch&#7881; và Tu&#7893;i (txtTen &amp; ";" &amp; txtDiachi &amp; ";" &amp; txtTuoi).&nbsp;&nbsp;<br> </font> <H3><Font color=green face="Tahoma">Nh&#7919;ng r&#7855;c r&#7889;i c&#7911;a vi&#7879;c m&#7903; m&#7897;t h&#7891; s&#417; </Font></H3> <font face="Tahoma"> Cái c&#7893;ng s&#7889; 2 &#7903; trên là ta t&#7921; ch&#7885;n (arbitrary). Th&#7853;t ra mu&#7889;n g&#7885;i c&#7893;ng s&#7889; m&#7845;y c&#361;ng &#273;&#432;&#7907;c, mi&#7877;n là ch&#432;a có ph&#7847;n nào khác trong cùng ch&#432;&#417;ng trình n&#7847;y &#273;ang dùng c&#7893;ng s&#7889; &#7845;y. &#272;ây là m&#7897;t cách VB làm vi&#7879;c cho ti&#7879;n thay vì g&#7885;i nguyên m&#7897;t cái tên h&#7891; s&#417; dài.<br> N&#7871;u mu&#7889;n ch&#7855;c ch&#7855;n không trùng s&#7889; c&#7893;ng v&#7899;i ch&#7895; nào khác, ta có th&#7875; làm nh&#432; sau:<br> </font> <Blockquote><code> <font face="Tahoma"> &nbsp;&nbsp;&nbsp;fileNo = freefile</font> </code></Blockquote> <font face="Tahoma"> R&#7891;i thay th&#7871; s&#7889; 2 b&#7857;ng ch&#7919; fileNo trong Sub cmdViet_Click. <b> freeFile</b> là m&#7897;t Function (ch&#432;&#417;ng trình nh&#7887; dùng &#273;&#7875; tính ra m&#7897;t th&#7913; gì) nh&#7901; VB c&#7845;p phát cho m&#7897;t con s&#7889; &#273;&#7841;i di&#7879;n h&#7891; s&#417; ch&#432;a ai dùng.<br> Ch&#7919; <b> Output</b> trong câu ( </font> <code> <font face="Tahoma"> Open "myFriends.txt" For Output As #2 </font></code><font face="Tahoma">) dùng &#7903; &#273;ây &#273;&#7875; nói t&#7915; CPU (Central Processing Unit) ta mu&#7889;n "vi&#7871;t ra" m&#7897;t h&#7891; s&#417;. Khi m&#7903; m&#7897;t h&#7891; s&#417; &#273;&#7875; vi&#7871;t ra ki&#7875;u n&#7847;y thì n&#7871;u h&#7891; s&#417; ch&#432;a có nó s&#7869; &#273;&#432;&#7907;c d&#7921;ng nên (created). N&#7871;u h&#7891; s&#417; &#273;ã có r&#7891;i thì nó s&#7869; b&#7883; xoá b&#7887; (delete) và &#273;&#7891;ng th&#7901;i m&#7897;t h&#7891; s&#417; tr&#7889;ng và m&#7899;i s&#7869; &#273;&#432;&#7907;c d&#7921;ng nên. &#272;&#7897;ng t&#7915; chuyên môn là "vi&#7871;t ch&#7891;ng lên" (<b>overwrite</b>).<br>N&#7871;u ta m&#7903; m&#7897;t h&#7891; s&#417; &#273;&#7875; "&#273;&#7885;c vào" thì dùng ch&#7919; &quot;<b>Input</b>&quot; thay vì &quot;<b>Output</b>&quot;. Còn n&#7871;u "vi&#7871;t thêm" vào m&#7897;t h&#7891; s&#417; có s&#7861;n (ch&#7899; không overwrite h&#7891; s&#417; &#7845;y) thì dùng ch&#7919; &quot;<b>Append</b>&quot; thay vì "Output". Trong tr&#432;&#7901;ng h&#7907;p &#7845;y b&#7841;n ph&#7843;i ki&#7875;m xem h&#7891; s&#417; "myFriends.txt" &#273;ã có s&#7861;n ch&#432;a. B&#7841;n có th&#7875; vi&#7871;t nh&#432; sau:<br> </font> <code> <font face="Tahoma"> <br> &nbsp;&nbsp;&nbsp;If Dir("myFriends.txt") <> "" then <Font color=green>' N&#7871;u h&#7891; s&#417; "myFriends.txt" hi&#7879;n h&#7919;u</Font><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open "myFriends.txt" For Append As #2 <Font color=green>' M&#7903; m&#7897;t h&#7891; s&#417; &#273;&#7875; vi&#7871;t thêm và g&#7885;i là c&#7893;ng s&#7889; 2</Font><br> &nbsp;&nbsp;&nbsp;Else<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open "myFriends.txt" For Output As #2 <Font color=green>' M&#7903; m&#7897;t h&#7891; s&#417; &#273;&#7875; vi&#7871;t ra và g&#7885;i là c&#7893;ng s&#7889; 2</Font><br> &nbsp;&nbsp;&nbsp;End If</font> </code> <p><font face="Tahoma"> Function Dir("myFriends.txt") dùng &#7903; trên s&#7869; cho ta tên c&#7911;a h&#7891; s&#417; n&#7871;u h&#7891; s&#417; hi&#7879;n h&#7919;u, ng&#432;&#7907;c l&#7841;i nó s&#7869; cho m&#7897;t dòng ch&#7919; tr&#7889;ng (empty string), bi&#7875;u hi&#7879;u là "". T&#7841;i &#273;ây, n&#7871;u lanh ý b&#7841;n s&#7869; h&#7887;i h&#7891; s&#417; "myFriends.txt" n&#7857;m &#7903; folder nào. Câu tr&#7843; l&#7901;i là không bi&#7871;t ch&#7855;c. N&#7871;u b&#7841;n ch&#432;a ch&#7913;a (save) ch&#432;&#417;ng trình vào d&#297;a (vì m&#7899;i vi&#7871;t) thì nó n&#7857;m &#7903; folder c&#7911;a VB6.EXE. Còn nh&#432; &#273;ã ch&#7913;a ch&#432;&#417;ng trình r&#7891;i thì có l&#7869; nó n&#7857;m &#7903; folder c&#7911;a ch&#432;&#417;ng trình b&#7841;n. Mu&#7889;n h&#7891; s&#417; "myFriends.txt" luôn luôn &#273;i cùng v&#7899;i ch&#432;&#417;ng trình, b&#7841;n có th&#7875; làm nh&#432; sau:<br> </font> <Blockquote><code> <font face="Tahoma"> &nbsp;&nbsp;&nbsp;MyLocalFolder = App.path <Font color=green>' L&#7845;y folder c&#7911;a ch&#432;&#417;ng trình x&#7917; lý c&#7911;a b&#7841;n</Font><br> &nbsp;&nbsp;&nbsp;If Right(MyLocalFolder,1) <> "\" then <Font color=green>' N&#7871;u ch&#7919; cu&#7889;i cùng không ph&#7843;i là backslash</Font><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyLocalFolder = MyLocalFolder & "\" <Font color=green>' thì g&#7855;n thêm m&#7897;t backslash &#7903; cu&#7889;i</Font><br> &nbsp;&nbsp;&nbsp;End If<br> &nbsp;&nbsp;&nbsp;<Font color=green>' M&#7903; m&#7897;t h&#7891; s&#417; v&#7899;i tên có folder (full pathname) &#273;&#7875; vi&#7871;t ra và g&#7885;i là c&#7893;ng s&#7889; 2</Font><br> &nbsp;&nbsp;&nbsp;Open MyLocalFolder & "myFriends.txt" For Output As #2 <br> </font> </code></Blockquote> <font face="Tahoma">Cu&#7889;i cùng ta &#273;óng h&#7891; s&#417; l&#7841;i b&#7857;ng câu Close #2.. T&#7915; rày VB có th&#7875; c&#7845;p s&#7889; 2 &#273;&#7875; làm c&#7893;ng cho ch&#7895; khác trong ch&#432;&#417;ng trình.<br> </font> <H3><Font color=green face="Tahoma">Default Property c&#7911;a m&#7897;t Control </Font></H3> <font face="Tahoma"> "txtTen" &#273;&#432;&#7907;c dùng &#7903; &#273;ây là vi&#7871;t t&#7855;t cho "txtTen.text", vì Default Property c&#7911;a m&#7897;t TextBox là text c&#7911;a nó. Default Property c&#7911;a m&#7897;t Control là Property &#273;&#432;&#7907;c VB dùng khi b&#7841;n ch&#7881; cho tên c&#7911;a Control mà thôi.<br>Trong khi &#273;ó Default Property c&#7911;a Label là Caption.<br>Vì txtTen &#273;&#432;&#7907;c dùng nh&#432; txtTen.txt &#273;&#7875; nói &#273;&#7871;n m&#7897;t dòng ch&#7919;, nên trong ch&#432;&#417;ng trình ta nh&#7855;c &#273;&#7871;n nó y nh&#432; m&#7897;t variable (mã s&#7889;) dùng cho m&#7897;t string. Do &#273;ó v&#7899;i qui &#432;&#7899;c dùng ba ch&#7919; &#273;&#7847;u "txt" cho tên c&#7911;a m&#7897;t Textbox giúp ta nh&#7853;n di&#7879;n ngay nó không ph&#7843;i là m&#7897;t string variable bình th&#432;&#7901;ng. Hãy l&#432;u ý s&#7921; khác bi&#7879;t khi g&#7885;i m&#7897;t Sub trong hai tr&#432;&#7901;ng h&#7907;p sau:</font> <p><code> <font face="Tahoma"> &nbsp;&nbsp;&nbsp;Call CheckmyTextbox&nbsp; (txtDiachi) <Font color=green>' txtDiachi &#273;&#432;&#7907;c xem là Textbox tr&#7885;n v&#7865;n</Font><br> &nbsp;&nbsp;&nbsp;CheckmyTextbox&nbsp; txtDiachi <Font color=green>' txtDiachi &#273;&#432;&#7907;c xem là txtDiachi.text, m&#7897;t&nbsp; dòng ch&#7919;</Font></font> </code> <H3><Font color=green face="Tahoma">Th&#7913; t&#7921; các Control trên m&#7897;t Form </Font></H3> <font face="Tahoma"> Trong ch&#432;&#417;ng trình n&#7847;y ta mu&#7889;n ng&#432;&#7901;i x&#7917; d&#7909;ng cho vào d&#7919; ki&#7879;n theo th&#7913; t&#7921; "Tên, &#272;&#7883;a ch&#7881;, Tu&#7893;i". Khi m&#7899;i vào, ta mu&#7889;n cái d&#7845;u ch&#7899;p t&#7855;t (cursor ) n&#7857;m trong txtTen ngay &#273;&#7875; ng&#432;&#7901;i x&#7917; d&#7909;ng kh&#7887;i m&#7845;t công click vào Textbox &#7845;y khi mu&#7889;n mang cursor tr&#7903; l&#7841;i &#273;ó. Ta nói là txtTen có cái Focus.<br> Sau khi ng&#432;&#7901;i x&#7917; d&#7909;ng &#273;ã cho tên vào r&#7891;i, cô s&#7869; &#273;ánh nút Tab &#273;&#7875; di chuy&#7875;n cursor qua Control ti&#7871;p theo, mà ta mu&#7889;n là txtDiachi. &#272;&#7875; s&#7855;p th&#7913; t&#7921; các Control cho s&#7921; di chuy&#7875;n c&#7911;a cursor khi ng&#432;&#7901;i x&#7917; d&#7909;ng &#273;ánh nút Tab ta edit Property TabIndex c&#7911;a các Control. TabIndex b&#7855;t &#273;&#7847;u b&#7857;ng s&#7889; 0. Nhi&#7873;u khi ng&#432;&#7901;i x&#7917; d&#7909;ng thích dùng nút Enter thay vì Tab &#273;&#7875; di chuy&#7875;n Cursor qua Control ti&#7871;p theo, b&#7841;n có th&#7875; làm nh&#432; sau cho Textbox txtTen:<br> </font> <Blockquote><code> <font face="Tahoma"> <Font color=blue>Private Sub txtTen_KeyPress(KeyAscii As Integer)</Font><br> &nbsp;&nbsp;&nbsp;If KeyAscii = 13 Then <Font color=green> ' N&#7871;u nút b&#7845;m là Enter</Font><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendKeys "{TAB}"<Font color=green> ' gi&#7843; m&#7841;o g&#7903;i nút Tab</Font><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyAscii = 0<Font color=green> ' Nu&#7889;t tr&#7885;ng nút Enter &#273;&#7875; Windows không còn lo cho nó</Font><br> &nbsp;&nbsp;&nbsp;End If<br> <Font color=blue>End Sub</Font></font> </code></Blockquote> <font face="Tahoma"> Cho các Textbox khác nh&#432; txtDiachi, txtTuoi b&#7841;n c&#361;ng làm t&#432;&#417;ng t&#7907; nh&#432; v&#7853;y. Khi b&#7841;n doubleClick txtTen l&#7847;n &#273;&#7847;u &#273;&#7875; vi&#7871;t mã, VB cho b&#7841;n <b> Private Sub txtTen_Change()</b>. B&#7841;n ph&#7843;i click cái Combobox bên ph&#7843;i, phía trên c&#7911;a Code Window, cho nó m&#7903; ra và ch&#7885;n Event KeyPress. </font> <p><img border="0" src="images/keypressEvent.jpg" width="640" height="197" > <font face="Tahoma"> <br> <br> N&#7871;u b&#7841;n mu&#7889;n ch&#432;&#417;ng trình mình còn chuyên nghi&#7879;p h&#417;n, b&#7841;n cho phép ng&#432;&#7901;i x&#7917; d&#7909;ng b&#7845;m nút <b> Alt+o</b> (b&#7845;m nút <b> Alt</b> xu&#7889;ng trong khi b&#7845;m nút <b>o</b>) &#273;&#7875; mang Cursor v&#7873; txtTuoi hay <b> Alt+d</b> &#273;&#7875; mang Cursor v&#7873; txtDiachi. Mu&#7889;n th&#7871; b&#7841;n ph&#7843;i thêm vào d&#7845;u "<b>&amp;</b>&quot; &#7903; phía tr&#432;&#7899;c các ch&#7919; <b>T</b>, <b> D</b> và <b> o</b> trong Caption c&#7911;a các label lblTen, lblDiachi và lblTuoi.<br> K&#7871; &#273;ó b&#7841;n ph&#7843;i cho giá tr&#7883; <b> TabIndex</b> c&#7911;a lblTen, txtTen, lblDiachi, txtDiachi, lblTuoi, txtTuoi liên ti&#7871;p là 0,1,2,3,4,5. Khi ng&#432;&#7901;i x&#7917; d&#7909;ng &#273;ánh Alt+o, VB s&#7869; mang Cursor v&#7873; nhãn lblTuoi, nh&#432;ng vì không có ch&#7895; cho nó &#273;áp trong label nên nó ph&#7843;i &#273;áp vào Control k&#7871; &#273;ó, t&#7913;c là txtTuoi.<br>Khi ta &#273;ã cho TabIndex c&#7911;a các Control nh&#7919;ng giá tr&#7883; k&#7875; trên thì khi Form hi&#7879;n ra Cursor s&#7869; n&#7857;m trong TextBox txtTen vì m&#7863;c d&#7847;u lblTen có TabIndex nh&#7887; nh&#7845;t(0), nó không ph&#7843;i là ch&#7895; Cursor &#273;áp lên &#273;&#432;&#7907;c, nên Cursor ph&#7843;i &#273;áp lên textbox có TabIndex value k&#7871; &#273;ó, t&#7913;c là 1. <br>N&#7871;u b&#7841;n không mu&#7889;n Cursor ng&#7915;ng l&#7841;i &#7903; m&#7897;t TextBox nào thì edit Property <b> TabStop</b> c&#7911;a TextBox &#273;ó cho b&#7857;ng False. Trong tr&#432;&#7901;ng h&#7907;p &#7845;y ng&#432;&#7901;i s&#7917; d&#7909;ng v&#7851;n có th&#7875; click vào TextBox và s&#7917;a dòng ch&#7919; &#7903; &#273;ó &#273;&#432;&#7907;c nh&#432; th&#432;&#7901;ng. N&#7871;u b&#7841;n th&#7853;t s&#7921; không mu&#7889;n cho phép ng&#432;&#7901;i s&#7917; d&#7909;ng s&#7917;a gì &#7903; TextBox thì edit Property <b> Enabled</b> b&#7857;ng False hay Property <b> Locked</b> b&#7857;ng True. Khi Enabled c&#7911;a m&#7897;t TextBox b&#7857;ng False thì TextBox tr&#7903; nên m&#7901; &#273;i.<br> Nhân ti&#7879;n ta edit thêm d&#7845;u "&" &#7903; phía tr&#432;&#7899;c các ch&#7919; X và V trong Caption các CommandButton "Xuat" và "Viet vao dia". Sau n&#7847;y ng&#432;&#7901;i s&#7917; d&#7909;ng có th&#7875; b&#7845;m Alt-X coi nh&#432; t&#432;&#417;ng &#273;&#432;&#417;ng v&#7899;i click nút "Xuat".<br> N&#7871;u nh&#7905; trong Form b&#7841;n có nhi&#7873;u Textbox quá, &#273;&#7893;i nút Enter ra nút Tab cho t&#7915;ng Textbox m&#7897;t thì m&#7845;t công quá. B&#7841;n có th&#7875; làm m&#7897;t cái chung cho c&#7843; Form. T&#7913;c là nói r&#7857;ng b&#7841;n không c&#7847;n bi&#7871;t nút Enter v&#7915;a m&#7899;i &#273;&#432;&#7907;c &#273;ánh &#7903; TextBox nào, b&#7841;n c&#7913; nh&#7855;m m&#7855;t &#273;&#7893;i nó ra nút Tab.<br> Tr&#432;&#7899;c h&#7871;t b&#7841;n ph&#7843;i ch&#7885;n (select) Form r&#7891;i edit Property <b> KeyPreview</b> c&#7911;a nó thành True. B&#7841;n làm vi&#7879;c n&#7847;y &#273;&#7875; d&#7863;n Form gi&#7921;t cái nút ng&#432;&#7901;i s&#7917; d&#7909;ng &#273;ánh (keystroke) tr&#432;&#7899;c khi TextBox th&#7845;y. Form s&#7869; tráo nút Enter thành Tab r&#7891;i l&#7861;ng l&#7863;ng trao cho TextBox. B&#7841;n có th&#7875; thay th&#7871; t&#7845;t c&#7843; các KeyPress event handler c&#7911;a các TextBox b&#7857;ng &#273;o&#7841;n mã nh&#432; sau:<br> </font> </p> <Blockquote><code> <font face="Tahoma"> <Font color=blue>Private Sub Form_KeyPress(KeyAscii As Integer)</Font><br> &nbsp;&nbsp;&nbsp;If KeyAscii = 13 Then <Font color=green> ' N&#7871;u nút b&#7845;m là Enter</Font><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendKeys "{TAB}"<Font color=green> ' gi&#7843; m&#7841;o g&#7903;i nút Tab</Font><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyAscii = 0<Font color=green> ' Nu&#7889;t tr&#7885;ng nút Enter &#273;&#7875; Windows không còn lo cho nó</Font><br> &nbsp;&nbsp;&nbsp;End If<br> <Font color=blue>End Sub</Font></font> </code></Blockquote> <font face="Tahoma"> Khi b&#7841;n doubleClick lên b&#7845;t c&#7913; ch&#7895; nào trên Form không có Control n&#7857;m, l&#7847;n &#273;&#7847;u &#273;&#7875; vi&#7871;t mã, VB cho b&#7841;n Private Sub Form_Load(). B&#7841;n ph&#7843;i click cái Combobox bên ph&#7843;i, phía trên c&#7911;a Code Window, cho nó m&#7903; ra và ch&#7885;n Event KeyPress.<br> </font> <H3><Font color=green face="Tahoma">&#272;em ra trình làng </Font></H3> <font face="Tahoma"> &#272;&#7875; làm thành m&#7897;t h&#7891; s&#417; áp d&#7909;ng EXE, b&#7841;n dùng m&#7879;nh l&#7879;nh Menu <b> File|Make</b> MyFirstProg.exe. Cho thêm chút h&#432;&#417;ng v&#7883; c&#7911;a cu&#7897;c &#273;&#7901;i tôi click Form r&#7891;i edit Property Icon, ch&#7885;n cho nó t&#7915; folder:<br> <CENTER> D:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc<br></CENTER> m&#7897;t icon hình g&#432;&#417;ng m&#7863;t c&#432;&#7901;i. R&#7891;i b&#7845;m m&#7879;nh l&#7879;nh Menu <b> File|Save Project</b>.<br> Khi dùng Explorer &#273;&#7875; xem các h&#7891; s&#417; c&#7911;a MyFirstProg.vbp b&#7841;n s&#7869; th&#7845;y nh&#432; d&#432;&#7899;i &#273;ây:<br><br> <Center><IMG SRC="images/projectfiles.jpg" ALT="" width="640" height="194"></Center><br> &#272;áng l&#7869; tôi dùng m&#7897;t folder khác thay vì VB98 &#273;&#7875; ch&#7913;a d&#7921; án MyFirstProg.vbp. H&#7891; s&#417; MyFirstProg.vbw là Workspace (ch&#7895; làm vi&#7879;c) dành cho VB, ta không nên &#273;&#7897;ng t&#7899;i.<br>B&#7841;n có th&#7875; làm m&#7897;t Shortcut cho MyFirstProg.exe v&#7899;i cái icon hình g&#432;&#417;ng m&#7863;t c&#432;&#7901;i &#273;&#7863;t lên Desktop &#273;&#7875; ch&#7841;y bên ngoài IDE c&#7911;a VB.<br> Có l&#7869; b&#7841;n mu&#7889;n Download h&#7891; s&#417;:<A HREF="MyFirstProg.zip">MyFirstProg.zip</A>, nén chung t&#7845;t c&#7843; các h&#7891; s&#417; nói trên trong d&#7921; án MyFirstProg.vbp.<br> Bây gi&#7901; ngay trong VB IDE b&#7841;n có th&#7875; ch&#7841;y ch&#432;&#417;ng trình b&#7857;ng cách dùng m&#7879;nh l&#7879;nh Menu <b> Run|Start</b> hay b&#7845;m <b>F5</b>.&nbsp;</font> <p><img border="0" src="images/start1.jpg" width="291" height="83" ></p> <p> <font face="Tahoma"> B&#7841;n c&#361;ng có th&#7875; Click lên d&#7845;u tam giác ch&#7881; v&#7873; bên ph&#7843;i (nút Play c&#7911;a cassette) n&#7857;m trong toolbar ngay phía d&#432;&#7899;i VB menu.<br> <p><img border="0" src="images/start2.jpg" width="203" height="49" ></p> <p>&nbsp;</p> <H3><font color="green">Cách nén các files trong m&#7897;t folder thành m&#7897;t zip file duy nh&#7845;t</font></H3> &#272;&#7875; g&#7903;i nhi&#7873;u files b&#7857;ng cách &#273;ính kèm (attach) m&#7897;t Email trên Internet ta c&#7847;n ph&#7843;i nén các files &#7845;y thành m&#7897;t file duy nh&#7845;t, g&#7885;i là Zip file. Tr&#432;&#7899;c h&#7871;t, trong Window Explorer b&#7841;n ch&#7885;n nh&#7919;ng files b&#7841;n mu&#7889;n Zip chung l&#7841;i. B&#7841;n ch&#7885;n nhi&#7873;u files b&#7857;ng cách &#273;è nút <b> Ctrl</b> trong khi click lên tên t&#7915;ng file m&#7897;t. N&#7871;u b&#7841;n &#273;è lên nút <b>Shift</b>, thay vì nút Ctrl, thì c&#7913; m&#7895;i lúc b&#7841;n click, Window Explorer s&#7869; select c&#7843; m&#7897;t d&#7885;c tên các files n&#7857;m gi&#7919;a tên hai files b&#7841;n click m&#7899;i nh&#7845;t. Ngoài ra b&#7841;n c&#361;ng có th&#7875; dùng Menu Command <b> Edit | Select All</b>, hay <b> Ctrl+A</b> &#273;&#7875; select t&#7845;t c&#7843; các files trong m&#7897;t folder. &#272;ây là tr&#432;&#7901;ng h&#7907;p b&#7841;n s&#7869; dùng khi Zip t&#7845;t c&#7843;c các files trong m&#7897;t VB6 project &#273;&#7875; g&#7903;i qua Th&#7847;y/Cô. <p>Sau khi &#273;ã select các file r&#7891;i, b&#7841;n right click lên các file &#7845;y &#273;&#7875; context menu pop-up. Ch&#7885;n <b> Add to Zip</b>.&nbsp;<br> N&#7871;u b&#7841;n không th&#7845;y pop-up command Add to Zip thì là b&#7841;n ch&#432;a install ch&#432;&#417;ng trình Winzip. Trong tr&#432;&#7901;ng h&#7907;p &#7845;y, download Winzip t&#7915; Internet và install.</p> <p><img border="0" src="images/addtozip.jpg" width="442" height="344" ></p> <p>&nbsp;</p> <p><i><b>Bây gi&#7901; b&#7841;n th&#7917; kh&#7903;i &#273;&#7897;ng VB6, &#273;i d&#7841;o quanh nó &#273;&#7875; th&#7917; bi&#7871;t các ph&#7847;n c&#7911;a VB6 IDE, và th&#7917; làm theo nh&#432; bài n&#7847;y. N&#7871;u có th&#7855;c m&#7855;c gì thì h&#7887;i Tutor c&#7911;a b&#7841;n.</b></i></p> <p>&nbsp;</p> </font> </Blockquote> <A HREF="http://www.vovisoft.com" ><IMG SRC="images/homejump.gif" WIDTH=40 HEIGHT=40><A>&nbsp;&nbsp;<A href="default.htm"><Font face="Tahoma">HÍc Microsoft Visual Basic 6.0</Font></A><br><br> </blockquote> &nbsp; <TABLE border=0 cellPadding=0 cellSpacing=0 class=clsNavLinks id=tblFooterLinks width="100%"> <TR> <TD bgColor=#6699cc class=clsRaised colspan="5" width="785"> <p align="center"><FONT color=#ffffff size="1" face="Tahoma">Vovisoft © 2000. All rights reserved.</FONT></p> </TD></TR> <TR> <TD width="256"> <p align="center"><font size="1" face="Tahoma">&nbsp;&nbsp; Last Updated: <!--webbot bot="Timestamp" S-Type="REGENERATED" S-Format="%d %b %Y" startspan -->15 Jun 2007<!--webbot bot="Timestamp" endspan i-checksum="15079" --> </font> </p> </TD> <TD width="181"><font size="1" face="Tahoma">&nbsp;</font></TD> <TD width="258"> <p align="center"><a href="mailto:dixon@vovisoft.com"><font size="1" face="Tahoma">Webmaster</font></a></p> </TD> </TR> </TABLE> </Body> </HTML>