Thủ thuật Visual Basic
Trang 2MUƠC LUƠC
Lađm cho Form luön luön hiïơn ra möơt chöî vađ cuđng möơt cúô 2
Duđng Event nađo ăïí update Form? 3
Lađm sao ta biïịt möơt Form ăaô ặúơc Loaded? 3
Lađm möơt Form giöịng möơt Form coâ sùĩn 4
Lađm cho Controls biïịn míịt 5
Choơn nhiïìu Controls nhû möơt nhoâm 5
Choơn nhiïìu hađng trong ListBox 5
'Sort' caâc hađng trong möơt Listbox 6
Sùưp ngay cöơt nhûông chûô trong caâc hađng khaâc nhau cuêa Listbox 6
Drag möơt hađng tûđ Listbox níìy boê vađo Listbox khaâc 6
Lađm sao biïịt Drag Source lađ control nađo 7
In nhûông hađng ặúơc choơn cuêa möơt ListBox 8
Bùưt buöơc user phaêi click ComboBox ăïí choơn möơt hađng 8
Lađm möơt Control hiïơn ra trïn moơi trang cuêa Tab Control 8
Sùưp xïịp thûâ tûơ caâc TextBox cho Data Entry 9
Lađm sao cho data vađo trong ListBox hay ComboBox 9
Sao khöng thíịy hònh trong CommandButton? 10
Lađm sao ăùơt icon lïn Toolbar lađm shortcut cho möơt menu command cuêa VBIDE? 10
Caâc daơng cuêa Ngađy vađ Thò giúđ 10
Lađm sao ăoơc tûđ möơt Text file 14
Lađm sao chûâa vađo möơt Text file 14
Caâch thûâc Log möơt dûô kiïơn vađo möơt Text file ? 15
Caâch thûâc ăoơc/viïịt value cuêa möơt Variable tûđ möơt "ini" file ? 17
Ăöíi Enter key ra Tab key 18
Ăöíi daơng MousePointer ra ăöìng höì caât 19
Kiïịm Help cho caâc Functions 19
Duđng Docket Dot Matrix Printer 20
Cho Application möơt Icon 21
VB shorcut Keys 21
Trang 3Lađm hiïơn ra möơt Form khaâc
Giaê sûê baơn ăang úê trong Form1 vađ muöịn lađm cho Form2 hiïơn ra, haôy sûê duơng:
Form2.Show Khi muöịn díịu Form2, duđng:
Form2.Hide
Khi möơt Form ặúơc 'Show' líìn ăíìu tiïn, noâ ặúơc 'Load' (cho thađnh hònh) vađ 'Show' ngay sau ăoâ Khi möơt Form ăaô coâ röìi, tûâc lađ ăaô ặúơc 'Load' röìi, luâc baơn 'Hide' noâ cq•ng giöịng nhû keâo möơt tíịm mađn che noâ laơi Kïị ăoâ, khi baơn 'Show' noâ cq•ng giöịng nhû múê mađn ra, khöng coâ gò aênh hûúêng Form
Baơn coâ thïí cho Form biïịn míịt bùìng caâch 'Unload' noâ, nhû:
Unload Form2
Líìn túâi khi baơn 'Show' noâ, Form seô ặúơc 'Load' trúê laơi Möîi khi Form ặúơc 'Load', noâ 'execute' sub Form_Load Form_Load lađ núi baơn viïịt caâc 'statements' ăïí 'initialise' Form, tûâc lađ nhûông gò cíìn phaêi ặúơc sùưp xïịp cho sùĩn sađng trûúâc khi Form thađnh hònh
Do ăoâ baơn phaêi quýịt ắnh khi nađo duđng Unload hay Hide ăï? Lađm cho Form biïịn míịt Nhúâ rùìng möîi khi Form ặúơc 'Load' thò noâ 'initialise' vađ míịt möơt ñt thò giúđ
Nïịu baơn muöịn lađm cho möơt Form hiïơn ra vađ khiïịn noâ dađnh nhíơn tíịt caê
'keystrokes' vađ 'mouse clicks' thò duđng:
Form2.Show vbModal
Ngay sau khi Form2 ặúơc 'Show' dûúâi daơng vbModal, noâ dađnh ngay CPU process, ăïịn ăöíi statement nùìm ngay dûúâi ăoâ trong Form1 cq•ng ăúơi cho ăïịn khi Form2 biïịn míịt bùìng Unload hay Hide múâi chaơy tiïịp ặúơc
Nïịu baơn muöịn Form2 hiïơn ra trong Modeless (khöng phaêi Modal) nhûng luön luön nùìm trïn Form1, ngay caê khi Form1 trúê thađnh active, duđng:
Form2.Show ,Me ' Me lađ Form1
Lađm cho Form luön luön hiïơn ra möơt chöî vađ cuđng möơt cúô
trong Sub Form_Load, duđng
Trang 4Move fLeft, fTop, fWidth, fHeight
Ăïí nhúâ thûâ tûơ caâc parameters trong Sub Move haôy nhúâ toơa ăöơ coâ X,Y trong Sub Move ta noâi ăïịn võ trñ X,Y ( fLeft, fTop) röìi cúê X,Y (fWidth, fHeight) Move lađ möơt method coâ thïí ặúơc duđng cho Form hay Control vađ ríịt hiïơu quaê Nïịu muöịn Frame1 luön luön nùìm úê ẳnh traâi, duđng:
Frame1.move 0,0
Nïịu muöịn chöî vađ cúê cuêa Form 'configurable' (user coâ thïí thay ăöíi) thò chûâa caâc dûđ kiïơn ăoâ trong Registry röìi ăoơc fLeft, fTop, fWidth, fHeight tûđ Registry trong Sub Form_Load ( xem Function GetSetting )
Ăïí cho Form2 hiïơn ra bïn phaêi vađ ngang hađng vúâi Form1, trom Sub
Form_Load cuêa Form2 duđng:
Sub Form_Load()
Move Form1.Width, Form1.Top
End Sub
Duđng Event nađo ăïí update Form?
Möîi khi trúê laơi möơt Form sau khi lađm viïơc úê möơt Form khaâc, ta muöịn 'update' möơt söị dûô kiïơn ăang ặúơc 'display' ăïí phaên aênh nhûđng thay ăöíi vûđa múâi xaôy
ra
Ăïí code trong Sub Form_Activate
Lađm sao ta biïịt möơt Form ăaô ặúơc Loaded?
Duđng Function sau ăíy cuêa Microsoft:
Function FormIsLoaded(MyFormName As String) As Boolean
' Determines if a form is loaded
Trang 5Khöng cho User Unload Form bùìng caâch click díịu X
Nhiïìu khi baơn muöịn thu xïịp moơi chuýơn ăađng hoađng trûúâc khi Unload möơt Form nïn baơn lađm möơt Exit hay Close button cho user duđng Ăïí lađm míịt díịu X phña ẳnh phaêi, 'set' Property ControlBox cuêa Form ra False Nïịu lađm thïị níìy coâ ăiïím bíịt lúơi lađ khi 'minimize' Form, ta khöng thíịy icon cuêa Form Coâ möơt caâch víîn ăïí nguýn díịu X, nhûng khi user click noâ thò ta check 'unloadMode' trong Sub Form_QueryUnload ăïí biïịt lyâ do taơi sao Form phaêi unload Trong Sub Form_Unload coâ thïí 'assign' Cancel ra True ăïí 'abort' Unload
Nïịu baơn muöịn khöng cho user minimise Form thò set Property MinButton ra False
Lađm möơt Form giöịng möơt Form coâ sùĩn
Nhiïìu khi baơn muöịn lađm möơt Form giöịng giöịng möơt Form ăaô coâ sùĩn trong Project Thñ duơ baơn muöịn 'duplicate' Form2 ăïí lađm nïn möơt Form3 ăïí sau ăoâ sûôa chûôa noâ chuât ẳnh Baơn lađm nhû sau:
1 Múê Form2 ra
2 Duđng Properties ăïí ăöíi tïn Form2 ra Form3
3 Duđng File | Save As menu command ăïí chûâa Form níìy dûúâi tïn
Form3.frm
Bíy giúđ baơn coâ thïm Form3 trong Project, trong khi Form2.frm víîn cođn ăoâ nhûng khöng cođn thuöơc vïì Project nûôa Nïịu baơn muöịn cho noâ vađo Project trúê laơi thò duđng Project | Ad File menu command ăïí choơn Form2.frm boê vađo Project
Trang 6Lađm cho Controls biïịn míịt
Baơn lađm cho möơt Control nhû Label, Textbox, ListBox v v biïịn míịt bùìng caâch cho Property 'visible' trúê nïn False, nhû:
Invisible Control ríịt tiïơn duơng khi ta duđng noâ ăïí chûâa dûô kiïơn Möơt TextBox tađn hònh coâ thïí Databound ăïí lùơng leô chûâa data líịy tûđ möơt recordField cuêa current Record cho baơn duđng Baơn cq•ng coâ thïí 'assign' (cho noâ bùìng) möơt value vađo möơt Control tađn hònh Nïịu Control íịy Databound, value seô ặúơc viïịt vađo database khi ăuâng luâc
Choơn nhiïìu Controls nhû möơt nhoâm
Choơn nhiïìu Controls ríịt tiïơn cho viïơc assign möơt property cho caê nhoâm qua Properties Window Ăïí choơn nhiïìu Controls nhû möơt nhoâm baơn coâ thïí 'rubber band' (quíịn díy thun) caê nhoâm bùìng caâch 'drag' con troê thađnh möơt hònh chûđ nhíơt bao caê nhoâm laơi Nïịu caâc Controls íịy nùìm trong möơt container nhû
Frame hay Picture box, trûúâc hïịt baơn phaêi 'click' Form röìi kïị ăoâ ăeđ nuât 'Ctrl' xuöịng trong khi 'rubber band' nhû noâi trïn Möơt khi caâc Controls trong möơt nhoâm ăaô ặúơc choơn röìi ta coâ thïí duđng menu Format command ăïí Align (ngang hađng) chuâng hay lađm cho chuâng cuđng cúê
Choơn nhiïìu hađng trong ListBox
Muöịn cho user choơn nhiïìu hađng trong Listbox ta phaêi set Property Multiselct cuêa Listbox ra Extended Sau ăoâ user coâ thïí choơn nhiïìu hađng bùìng caâch bíịm nuât Shift hay Ctrl trong khi Click nhûông hađng Nhúâ lađ nïịu bíịm nuât Shift thò choơn nhûông hađng liïn tuơc giûôa hai caâi click, cođn bíịm nuât Ctrl thò choơn hay khöng choơn thïm tûđng hađng möơt
Möîi hađng trong Listbox List1 ặúơc cho thûâ tûơ tûđ 0 ăïịn List1.ListCount-1 Khi hađng i ặúơc selected thò List1.Selected(i) = True
Muöịn 'deselect' (khöng choơn) hađng ăoâ thò duđng List1.Selected(i) = False
Trang 7'Sort' caâc hađng trong möơt Listbox
Nïịu ta muöịn nhûông hađng trong möơt Listbox ặúơc sorted theo míîu tûơ
(alphabetical order) thò khi thiïịt kïị (at design time) set Property Sorted cuêa Listbox ra True Trong khi xûê lyâ ta khöng thay ăöíi value cuêa Property Sorted ặúơc Nïịu möơt Listbox ăaô lúô coâ Property Sorted = False mađ ta muöịn Sort noâ trong khi xûê lyâ thò lađm sao? Baơn ăùơt thïm lïn Form möơt Listbox khaâc Listbox níìy coâ Property Sorted = True Khi nađo muöịn Sort caâc hađng trong Listbox thûâ nhíịt ta lađm nhû sao:
1 Cheâp tíịt caê moơi hađng tûđ Listbox thûâ nhíịt qua Listbox thûâ nhò, caâc hađng seô ặúơc sorted tûơ ăöng trong Listbox thûâ nhò
2 Clear Listbox thûâ nhíịt
3 Cheâp moơi hađng tûđ Listbox thûâ nhò qua Listbox thûâ nhíịt
Nhúâ ặđng cho user thíịy Listbox thûâ nhò bùìng caâch set Property Visible cuêa noâ ra False (tađn hònh)
Lûu yâ Clear möơt Listbox trûúâc khi cho möơt söị hađng múâi vađo vađ khöng muöịn giûô nhûông hađng cq• bùìng caâch duđng method Clear nhû List1.Clear
Sùưp ngay cöơt nhûông chûô trong caâc hađng khaâc nhau cuêa Listbox
Nïịu muöịn tíịt caê caâc chûô cöơt thûâ 8 cuêa caâc hađng trong möơt Listbox ặâng thùỉng hađng chiïìu cao (vertically) baơn coâ thïí set Font cuêa Listbox ra Courier, möơt loơai Fixed Font Tíịt caê caâc chûô cuêa Fixed Font nhû Courier ăïìu coâ cq•ng chiïìu röơng (character width) Ngûúơc laơi trong möơt Proportional spacing Font nhû "MS Sans Serif" chiïìu röơng cuêa chûđ 'ñ nhoê hún cuêa chûđ 'm' Nïịu baơn muöịn duđng Tab trong Listbox thò phaêi goơi möơt API Function ăïí lađm cho Listbox chõu nhíơn Tab (support Tab feature)
Sùưp ngay cöơt nhûông chûô trong caâc hađng khaâc nhau
cuêa Listbox
Nïịu muöịn tíịt caê caâc chûô cöơt thûâ 8 cuêa caâc hađng trong möơt Listbox ặâng thùỉng hađng chiïìu cao (vertically) baơn coâ thïí set Font cuêa Listbox ra Courier, möơt loơai Fixed Font Tíịt caê caâc chûô cuêa Fixed Font nhû Courier ăïìu coâ cq•ng chiïìu röơng (character width) Ngûúơc laơi trong möơt Proportional spacing Font nhû "MS Sans Serif" chiïìu röơng cuêa chûđ 'ñ nhoê hún cuêa chûđ 'm' Nïịu baơn muöịn duđng Tab trong Listbox thò phaêi goơi möơt API Function ăïí lađm cho Listbox chõu nhíơn Tab (support Tab feature)
Drag möơt hađng tûđ Listbox níìy boê vađo Listbox khaâc
Giaê sûê baơn muöịn Drag möơt hađng tûđ List1 boê vađo List2 vađ display noâ úê cuöịi List2
Trang 8Ta seô duđng Mousedown Event cuêa List1 mađ Drag Khi bùưt ăíìu Drag ta muöịn MousePointer ăöíi ra hònh möơt trang giíịy Do ăoâ ta phaêi Browse directory ăïí cho vađo Property DragIcon cuêa List1 tïn möơt Icon File Baơn coâ thïí vađo Folder C:Program File\Microsoft Visual Studio\Common\Graphics\IconsDragDrop lïí choơn möơt Icon File
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.Drag ' Bùưt ăíìu drag
End Sub
Private Sub List2_DragDrop(Source As Control, X As Single, Y As Single) ' Source úê ăíy lađ List1
List2.AddItem Source.Text ' Boê hađng tûđ List1 vö cuöịi List2
Source.RemoveItem Source.ListIndex ' Líịy hađng ra khoêi List1
List2.Listindex = List2.Listcount-1 ' Hilight hađng cuöịi vađ lađm cho noâ ặúơc display
End Sub
Lađm sao biïịt Drag Source lađ control nađo
Ta coâ thïí duđng Function Typename nhû:
TypeName(Source) ăïí xem noâ lađ "ListBox" hay "TextBox" etc hay duđng
TypeOf nhû:
If TypeOf Source Is ListBox Then
Msgbox " Drag source is a ListBox"
End If
Ta cq•ng coâ thïí duđng Name cuêa Source nhû:
If Source.Name = "List1" thenMsgBox "Drag source is List1"
Trang 9MsgBox "Tag of Drag Source is: " & Source.Tag
End If
In nhûông hađng ặúơc choơn cuêa möơt ListBox
Ta duđng Printer Object Raâp tíịt caê nhûông hađng ặúơc choơn laơi thađnh möơt text string dađi, thïm vađo cuöịi möîi hađng lađ Carriage Return / LineFeed ( vbCrLf )
Dim i
strOut = "" ' Initialise Output string khöng coâ gò caê
For i=0 to List1.Listcount-1
Nïịu baơn muöịn in tûđng hađng thò duđng:
Printer.Print List1.List(i) ' Khöng cíìn phaêi duđng vbVrLf
Muöịn in chûô ăíơm thò múê BOLD lïn bùìng:
Printer.FontBold = True
vađ khi nađo muöịn tùưt chûô ăíơm thò duđng:
Printer.FontBold = False
Bùưt buöơc user phaêi click ComboBox ăïí choơn möơt hađng
Khi Form múâi hiïơn ra, nïịu ăaô coâ sùĩn möơt hađng chûô nùìm trong ComboBox, mađ ăoâ ăuâng lađ hađng user muöịn duđng, ta khöng coâ dõp ăïí duđng Event Click cuêa ComboBox ăïí lađm chuýơn gò tuđy thuöơc vađo hađng mađ user ăaô choơn
Möơt maânh lúâi lađ trûúâc khi cho caâc hađng vađo ComboBox ta ăïí möơt hađng tröịng, thñ duơ nhû:
Combo1.AddItem " "
ComboBox seô nhû tröịng khöng khi Form múâi hiïơn ra, bùưt buöơc user phaêi choơn möơt hađng chúâ khöng duđng hađng ăíìu 'by default' (tûơ ăöơng coâ nïịu khöng lađm gò)
Lađm möơt Control hiïơn ra trïn moơi trang cuêa Tab Control
Möîi trang cuêa Tab Control chûâa riïng nhûông Control cuêa noâ Nïịu baơn muöịn möơt Textbox, Listbox hay CommandButton hiïơn ra trïn moơi trang cuêa Tab, baơn taơo control ăoâ bïn ngoađi Tab vađ keâo noâ vađo ăùơt lïn trïn Tab Nïịy Control
Trang 10nùìm phña dûúâi Tab, duđng VBIDE menu Comand "Format | Order | Bring to Front" ăïí mang Control ra phña trûúâc
Sùưp xïịp thûâ tûơ caâc TextBox cho Data Entry
Khi user ăiïìn caâc dûô kiïơn vađo möơt Form (Data Entry), user rúđi möîi TextBox bùìng caâch bíịm nuât Tab Kïị ăoâ MouseCursor nhaêy ăïịn TextBox coâ Property TabIndex value theo thûâ tûơ sau TabIndex value cuêa TextBox vûđa rúđi khoêi Thûúđng thûúđng ta cho TabIndex value theo thûâ tûơ tûđng cùơp LblName, txtName röìi lblAddress, txtAddress, v.v coâ TabIndex values thñ duơ nhû 1,2,3,4 Khi txtName (TabIndex=2) míịt Focus, mouseCursor dúđi ăïịn lblAddress
(TabIndex=3) , nhûng vò lblAddress lađ möơt Label nïn khöng chûâa
mouseCursor ặúơc, do ăoâ mouseCursor nhaêy ăïịn txtAddress (TabIndex=4) Nïịu Caption cuêa lblAddress coâ möơt character underlined, nhû
lblAddress.Caption = "Add&ess" ' character "e" underlined
khi user bíịm Alt+e bíịt cûâ luâc nađo mousePointer seô nhaêy ăïịn lblAddress nhûng röịt cuöơc rúât vađo TextBox kïị ăoâ, tûâc lađ txtAddress trong trûúđng húơp níìy
Nïịu baơn khöng muöịn mousePointer ăaâp vađo möơt TextBox nađo set Property TabStop cuêa noâ ra False Baơn cq•ng coâ thïí khöng cho user thay ăöíi dûô kiïơn úê möơt TextBox bùìng caâch set Property Enabled ra False hay Locked ra True
Lađm sao cho data vađo trong ListBox hay ComboBox
Khi Design ta coâ thïí duđng Property List cuêa ListBox hay ComboBox ăïí ăaânh vađo caâc dođng data Möîi khi xuöịng hađng phaêi nhúâ duđng Ctrl+Enter chúâ khöng phaêi Enter, nïịu khöng VBIDE tûúêng lađ baơn ăaô chíịm dûât data entry
Möơt caâch khaâc ăïí cho data vađo ListBox hay ComboBox lađ duđng Method
AddItem trong Sub Form_Load, nhû:
Trang 11Sao khöng thíịy hònh trong CommandButton?
Baơn duđng Properties Window ăïí ăùơt möơt Picture vađo möơt CommandButton bùìng caâch Browse vađ choơn möơt Image File Nhûng baơn khöng thíịy Picture ăíu caê Baơn cođn cíìn phaêi set Propety Style cuêa CommandButton ra "Graphical", thay vò "Standard"
Lađm sao ăùơt icon lïn Toolbar lađm shortcut cho möơt menu command
cuêa VBIDE?
Duđng Menu command View | Toolbars | Customize ăïí display Dialog
Customize Kïị ăoâ choơn Tag Commands, bïn traâi seô lađ möơt Listbox chûâa danh saâch caâc Categories vađ bïn phaêi lađ nhûông Commands thuöơc vïì Category ăang ặúơc highlighted Thûê select tûđng Category ăïí tòm trong Listbox bïn phaêi caâi Command coâ icon mađ baơn muöịn Drag icon ăoâ lïn Toolbar Nhín dõp níìy baơn coâ thïí boê möơt icon coâ sùĩn trïn Toolbar bùìng caâch Drag noâ ra chöî khaâc
Caâc daơng cuêa Ngađy vađ Thò giúđ
Duđng Function Format ăïí líịy ngađy giúđ theo daơng baơn muöịn Thñ duơ:
strToday = Format (Now(), "ddd dd-mmm-yyyy hh:nn:ss")
• Now() cho ta hiïơn giúđ (realtime líịy tûđ ăöìng höì cuêa CPU)
• ddd cho Mon, Tue vv
• mmm cho Jul, Feb vv
Nhúâ duđng "nn" cho phuât
Hai caâch duđng Timer
1 Timer coâ Interval tñnh bùìng milliseconds Khi Timer1 ặúơc Enabled (tûâc lađ Timer1.Enabled=True) noâ seô chaơy Sub Timer1_Timer möîi Interval msecs