You are on page 1of 22

MUÅ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
Laâ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 quyïë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


Move 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.

Dim i As Integer

FormIsLoaded = False
For i = 0 To Forms.Count - 1
If Forms(i).FormName = MyFormName Then
FormIsLoaded = True
Exit Function ' Quit function once form has been found.
End If
Next i

End Function

Ài qua hïët collection cuãa Forms àïí xem coá Form naâo truâng tïn.

Caách duâng:

If FormIsLoaded("Form2") then

MsgBox "Form2 is already loaded"

End If

Khö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 chuyïå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 àïí
nguyï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.
Laâ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û:

TxtName.visible = False

Duâng

TxtName.visible = True

àïí laâm Textbox txtName hiïån ra trúã laåi. Khi muöën cho möåt nhoám Controls
biïën mêët hay hiïån ra cuâng möåt luác, chûáa têët caã caác Controls êëy trong möåt
container nhû Frame hay PctureBox, röìi chó cêìn laâm cho container êëy visible
hay khöng.

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.
'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.
Ta 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"

End If

Ngoaâi ra ta cq•ng coá thïí duâng Property Tag cuãa Source Control àïí chûáa möåt
biïåt danh vaâ duâng giöëng nhû tïn cuãa Drag Source nhû:

If Source.Tag = "MYLIST1" then


MsgBox "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
If List1.Selected(i) then
strOut = strOut & List1.List(i) & vbCrLf
End if
Next
Printer.Print strOut ' Gúãi text String ra Printer
Printer.EndDoc ' Bùæt àêìu in ra
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 chuyïå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
nùç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û:

Sub Form_Load()

Dim i

For i=1 to 10

List1.AddItem "Line " & CStr(i)

Next

lstState.AddItem "NSW"
lstState.AddItem "VIC"

lstState.AddItem "QLD"

lstState.AddItem "SA"

lstState.AddItem "WA"

lstState.AddItem "TAS"

End Sub

Sao 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.
Thñ duå ta muöën Label1 chúáp tùæt (blink):

Timer1.Interval = 500 ' Nûäa giêy

Timer1.Enabled = True ' Bùæt àêìu chaåy Timer1 cho hïët interval

Sub Timer1_Timer()

Label1.Visible = NOT Label1.Visible

End Sub

Cûá möîi nûäa giêy hïí Label1 àang hiïån ra thò cho noá taân hònh vaâ ngûúåc laåi.

Khi naâo muöën ngûng chúáp tùæt thò duâng:

Timer1.Enabled = False

Label1.Visible = True

2. Àïílaâm möåt viïåc trong tûúng lai, ta cq•ng duâng Timer nhûng ngay trong

Sub Timer1_Timer ta àïí cêu Timer1.Enabled = False

àïí tùæt Timer1 sau khi laâm xong cöng chuyïån. Thñ duå:

Sub Timer1_Timer()

Timer1.Enabled = False ' Ngûng Timer1

' Àïí code laâm cöng chuyïån taåi àêy

End Sub

Àúåi möåt chuát

Coá khi ngay úã giûâa code baån muöën àúåi (wait) möåt chuát. Baån coá thïí laâm theo baâi
mêîu cuãa Microsoft nhû sau:

Dim PauseTime, Start, Finish, TotalTime


' Code àang laâm viïåc nûäa chûâng
PauseTime = 5 ' Set duration in seconds.
Start = Timer 'Set start time as now
Finish = Start + PauseTime ' set finish time
Do While timer < Finish
DoEvents ' Yield to other processes.
Loop
' Code tiïëp tuåc cöng viïåc

Timer duâng úã àêy laâ möåt Function coá sùén (in-built) cuãa VB chúá khöng phaãi
Control Timer. Timer cho ta söë giêy kïí tûâ nûâa àïm.

Ta duâng DoEvents àïí khoãi daânh hïët CPU time trong möåt closed Do While
Loop. Noá nhûúâng cho caác process khaác chaåy trong khi chúâ àúåi Finish.

Khi baån chaåy möåt Closed Loop giöëng nhû trïn vaâ assign cho Label1 möåt
Caption vúái value biïën àöíi àïí Feedback cho user biïët tònh hònh diïîn tiïën àïën
àêu, nïëu baån khöng duâng DoEvents giöëng nhû noái trïn, Label1 seä khöng coá dõp
'refresh' àïí 'display' value múái cuãa Label1.Caption.

Khöng biïët baån coá àïí yá thêëy caách chúâ àúåi nhû trïn coá thïí gùåp trúã ngaåi nïëu luác
bêëy giúâ laâ gêìn àïën nûâa àïm ñt hún 5 giêy. Khi àoá Finish seä lúán hún 3600*24
giêy vaâ Timer seä khöng bao giúâ àaåt àïën con söë êëy àïí nhaãy ra khoãi Loop. Giöëng
nhû mònh lêåp gia àònh vêåy, seä laâm moåi suöët àúâi, khöng coá löëi thoaát.

Möåt caách khaác àïí giaãi quyïët laâ ta nhúâ möåt Timer1 chaåy àöåc lêåp àïí cho biïët khi
naâo thúâi gian àaä traãi qua (elapsed) bùçng caách set möåt 'variable' tïn blnElapsed
ra True. blnElapsed phaãi àûúåc àïí trong phêìn General Declaration àïí caã code
chñnh vaâ Sub Timer1_Timer àïìu thêëy noá.

Dim blnElapsed as Boolean ' Declare in General section

Sub Timer1_Timer()

Timer1.Enabled = False

blnElapse = True

End Sub

' Code àang laâm viïåc nûäa chûâng

blnElapsed = False
Timer1.Interval = 5000 ' Set duration in msecs.
Timer1.Enabled = True 'Start Timer1
Do
DoEvents ' Yield to other processes.
Loop Until blnElapsed
' Code tiïëp tuåc cöng viïåc

Caách nêìy cq•ng àûúåc nhûng noá vêîn bùæt cheåt (hold up) CPU vaâ laâm caãn trúã caác
processes khaác(àêy laâ giúái haån cuãa VB).

Caách hoaân haão nhêët laâ ta àúåi bùçng caách duâng Timer1, nhûng àùåt phêìn code coân
laåi àïí tiïëp tuåc cöng viïåc ngay trong Sub Timer1_Timer.

' Code àang laâm viïåc nûäa chûâng

Timer1.Interval = 5000 ' Set duration in milliseconds.


Timer1.Enabled = True 'Start Timer1

Sub Timer1_Timer()

Timer1.Enabled = False

' Code tiïëp tuåc cöng viïåc

End Sub
Laâm thuâng raác chaáy lûãa nûäa giêy

Trong khi xûã lyá, ta coá thïí biïën hònh cuãa möåt Image bùçng caách cho noá möåt
Picture múái nhû:
Image1.Picture = LoadPicture("PictureName.bmp")
röìi bùæt àêìu möåt Timer vúái Interval bùçng 500 milliseconds.
Àêìu tiïn àùåt möåt Timer tïn Timer1 lïn Form. Vò luác àêìu Timer1.Interval bùçng
0 nïn Timer1 chûa chaåy àûúåc (giöëng nhû Enabled = False)
' Cho hònh thuâng raác chaáy lûãa
Image1.Picture = LoadPicture("TrashBinOnFire.bmp")
Timer1.Interval = 500
Timer1.Enabled = True ' Nûäa giêy sau seä chaåy Timer1_Timer

Sub Timer1_Timer()
Timer1.Enabled =False ' Ngûng Timer1
' Cho hònh thuâng raác thûúâng
Image1.Picture = LoadPicture("TrashBin.bmp")

End Sub
Laâm sao àoåc tûâ möåt Text file

Sau àêy laâ möåt thñ duå àoåc data tûâ möåt Textfile tïn "Friends.txt" nùçm trong
cuâng folder vúái chûúng trònh àang xûã lyá.

Sub Form_Load()

Dim strALine as string

Dim strLocalFolder as string

Dim strFullPathFileName as string

strLocalFolder = App.path

If Right(strLocalFolder,1) <> "\" then

strLocalFolder = strLocalFolder & "\"

End If

strFullPathFileName = strLocalFolder & "Friends.txt"

Open strFullPathFileName for input as #1

lstFriend.Clear ' Clear ListBox lstFriend

Do While Not EOF(1) ' Read till End-Of-File

Line Input #1, strALine ' Read a line

lstFriend.AddItem strALine 'Add that line to ListBox

Loop

Close #1 ' Close the file

End Sub

Laâm sao chûáa vaâo möåt Text file

Sau àêy laâ möåt thñ duå àoåc data tûâ möåt Textfile tïn "Friends.txt" nùçm trong
cuâng folder vúái chûúng trònh àang xûã lyá.

Sub Form_Load()
Dim i

Dim strLocalFolder as string

Dim strFullPathFileName as string

strLocalFolder = App.path

If Right(strLocalFolder,1) <> "\" then

strLocalFolder = strLocalFolder & "\"

End If

strFullPathFileName = strLocalFolder & "Friends.txt"

Open strFullPathFileName for output as #2

For i=0 to lstFriend.Listcount-1

Print #2, lstFriend.List(i)

Next

Close #2 ' Close the file

End Sub

Caách thûác Log möåt dûä kiïån vaâo möåt Text file ?

Nhiïìu luác ta cêìn Log vaâo trong möåt LogFile caác biïën cöë xaäy ra trong khi nhu
liïåu àang chaåy àïí sau nêìy kiïím laåi tònh hònh.

Sub LogEvent(ByVal GivenFileName, ByVal msg As String, HasFolder As


Boolean, IncludeTimeDate As Integer)

' Append event message Msg to a text Logfile GivenFileName

' If GivenFileName is fullPathName then HasFolder is true

' IncludeTimeDate = 0 : No Time or Date

' = 1 : Prefix with Time

' = 2 : Prefix with Time and Date


Dim FileNo, LogFileName, theFolder

If HasFolder Then

LogFileName = GivenFileName

Else

If Right(App.Path, 1) <> "\" Then

theFolder = App.Path & "\"

Else

theFolder = App.Path

End If

LogFileName = theFolder & GivenFileName

End If

FileNo = FreeFile

If Dir(LogFileName) <> "" Then

Open LogFileName For Append As FileNo

Else

Open LogFileName For Output As FileNo

End If

Select Case IncludeTimeDate

Case 0 ' No Time or Date

Print #FileNo, Msg

Case 1 ' Time only

Print #FileNo, Format(Now, "hh:nn:ss ") & Msg

Case 2 ' Date & Time


Print #FileNo, Format(Now, "dd/mm/yyyy hh:nn:ss ") & Msg

End Select

Close FileNo

End Sub

Coi chûâng trûúâng húåp LogEvent àûúåc goåi búãi hai Sub khaác nhau cuâng möåt luác.
Khi Sub thûá nhò muöën múã LogFileName thò bõ error vò LogFileName àaä bõ Sub
thûá nhêët múã röìi. Trong trûúâng húåp àoá ta coá thïí sûäa LogEvent laåi cho noá
AddItem Msg vaâo möåt Listbox röìi giao nhiïåm vuå viïët xuöëng File cho möåt
Process chuyïn viïn thûá ba.

Caách thûác àoåc/viïët value cuãa möåt Variable tûâ möåt "ini" file ?

Coá khi ta muöën àoåc value cuãa möåt variable chûáa trong möåt file coá extension laâ
"ini" (coân goåi laâ configuration file) nùçm trong folder C:Windows hay c:WinNT.
Trong file nêìy nhûäng cùåp variable=value nùçm trong caác sections, möîi Section
header coá daång nhû [System Var]. Thñ duå "protocol.ini" chûáa nhûäng doâng sau:

[ndishlp$] <= section header

DriverName=ndishlp$ <= cùåp variable=value

[protman$] <= section header

DriverName=protman$ <= cùåp variable=value

priority=ndishlp$ <= cùåp variable=value

[data] <= section header

version=v4.10.1998 <= cùåp variable=value

Duâng Function ReadPrivateProfileString sau àêy àïí àoåc value cuãa VarName$
dûúái section header SectionHeader$ tûâ file Filename$:

Function ReadPrivateProfileString( SectionHeader$, VarName$, Filename$)


As String

' Read data from an Ini file in default Windows directory

' Filename$ : The Ini file name eg: myProg.ini

' SectionHeader$ : The Section name in Ini file eg: [System Var]
' VarName$ : Variable name whose data value we want to get

Dim RetStr As String

RetStr = String(255, Chr(0)) ' Prepare a string of 255 zeros (number).

'Get Requested Information

ReadPrivateProfileString = Left(RetStr,
GetPrivateProfileString(SectionHeader$, ByVal

VarName$, "", RetStr, Len(RetStr), Filename$))

End Function

Tûúng túå nhû vêåy, ta coá thïí viïët value múái cuãa möåt variable vaâo trong möåt "ini"
file nhû sau:

Dim ErrCode

ErrCode = WritePrivateProfileString(SectionHeader$, VarName$,newValue,


Filename$)

Nhúá àïí hai cêu tuyïn böë cho caác API Function ta cêìn vaâo möåt Basic Module:

Public Declare Function GetPrivateProfileString Lib "kernel32" Alias


"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal
lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As
String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Public Declare Function WritePrivateProfileString& Lib "kernel32" Alias


"WritePrivateProfileStringA" (ByVal AppName$, ByVal KeyName$, ByVal
keydefault$, ByVal Filename$)

Àöíi Enter key ra Tab key

Khi user àiïìn caác dûä kiïån vaâo möåt Form (Data Entry), thûúâng thûúâng user rúâi
möîi TextBox bùçng caách bêëm nuát Tab. Coá khi user 'prefer' (chuöång hún) duâng
Enter key thay vò Tab key. Baån coá thïí duâng Event Keypress cuãa TextBox àïí
àöíi Enter ra Tab. Thñ duå:

Private Sub TxtName_KeyPress(KeyAscii As Integer)

If KeyAscii = vbCr then

KeyAscii = 0 ' Nuöët troån Enter key àïí khöng bõ side effect
' Emulate (laâm giöëng nhû) bêëm nuát Tab bùçng caách duâng
SendKeys

Sendkeys "{TAB}"

End if

End Sub

Event Keypress cuãa TextBox àûúåc duâng nhû trïn rêët töët. Nhûng nïëu Form
coá rêët nhiïìu TextBox ta coá thïí traánh lêåp laåi viïåc duâng KeyPress Event cuãa
tûâng TextBox bùçng caách duâng Sub Form_Keypress, nhû:

Private Sub Form_KeyPress(KeyAscii As Integer)

If KeyAscii = vbCr then

KeyAscii = 0 ' Nuöët troån Enter key àïí khöng bõ side effect

Sendkeys "{TAB}"

End if

End Sub

Àïí nhùæc Form chuåp lêëy Keystroke trûúác TextBoxes, ta phaãi set Form Property
'KeyPreview' ra True, nïëu khöng Sub Form_Keypress khöng bao giúâ àûúåc goåi.

Àöíi daång MousePointer ra àöìng höì caát

Khi program sùæp laâm chuyïån gò húi lêu, baån muöën cho user biïët laâ program
àang laâm viïåc chúá khöng phaãi chïët àûáng (hang) nhû khi mònh gùåp ngûúâi àeåp
lêìn àêìu, duâng:

Screen.MousePointer = vbHourglass ' Biïën MousePointer ra hònh àöìng höì caát

' Boã Codes vö àêy . . .

Screen.MousePointer = vbDefault ' Biïën MousePointer trúã laåi daång bònh


thûúâng

Kiïëm Help cho caác Functions

Trong khi àang viïët program, thñ duå baån muöën àoåc vïì caách duâng 'Select'. Àaánh
chûä 'Select' àoaån 'highlight' noá röìi bêëm nuát F1. Nhúá laâ baån coá thïí 'highlight'
möåt chûä bùçng caách àïí con troã (mousepointer) lïn trïn chûä àoá àoaån
'doubleClick'.

Nïëu baån khöng biïët chùæc möåt tïn Function àaánh vêìn nhû thïë naâo, thñ duå baån
khöng nhúá rùçng Function 'Sendkeys' coá chûä 's' úã cuöëi khöng. Thûã àaánh 'Sendk'
röìi bêëm 'Ctrl+Space' (nhêën nuát 'Ctrl' trong khi bêëm Space bar), VBIDE (Visual
Basic Integrated Development Environment) seä àaánh nhûâng chûâ coân laåi cuãa
chûâ 'SendKeys'. Nïëu baån chûa àaánh gò hïët maâ bêëm 'Ctrl+Space', VBIDE seä
'pop-up' danh saách cuãa têët caã Functions coá thïí duâng àûúåc luác nêìy, cuãa VB vaâ
cuãa chñnh baån àang viïët. Do àoá baån coá thïí àùåt tïn Constant hay Function, Sub
cuãa mònh bùæt àêìu bùçng nhûâng 'characters' dïî nhúá, vaâ duâng tïn daâi cho dïî àoåc.
Thñ duå baån duâng 'my' laâm hai characters bùæt àêìu:

Const myTableSize = 20

Sub mySortRoutineForHTML

Sau àoá chó cêìn àaánh 'mySo' Ctrl+Space seä ra troån chûä
mySortRoutineForHTML.

Duâng Docket Dot Matrix Printer


Nïëu baån duâng Docket Dot Matrix Printer thò khöng thïí xaâi möåt Windows
Printer Driver bònh thûúâng àûúåc, vò noá in hònh aãnh cuãa caã möåt trang trong khi
ta muöën in tûâ doâng.
Ta phaãi vö Start | Settings | Printers àïí Add möåt Generic / Text Only printer
driver.

Kïë àoá nïëu cêìn baån cho vaâo nhûäng Control Command Strings àïí in BOLD,
ITALIC, v.v. lêëy tûâ Cêím nang cuãa printer.

Thñ duå söë 28 àïí múã BOLD, 29 àïí tùæt BOLD. Nïëu Docket Printer coá thïí in maâu
àoã vaâ baån khöng cêìn duâng ITALIC, baån coá thïí cho Control Command Strings
cuãa múã tùæt maâu àoã vaâo chöî múã tùæt ITALIC. Sau àoá khi trong code baån múã
ITALIC thò thêåt ra driver gúãi Control Command String cho múã maâu àoã.

Thñ du:

Printer.FontItalic = True ' múã maâu àoã


Printer.Print " ** SUPER DISCOUNT STORE **"
Printer.FontItalic = False ' tùæt maâu àoã
Printer.Print "1 T Shirt $24.50"
Printer.FontIBold = True ' múã chûä àêåm
Printer.Print " Total: $24.50"
Printer.FontIBold = True ' tùæt chûä àêåm
Printer.Print "Thank you"
Printer.EndDoc

Nïëu Docket Printer khöng xuöëng haâng àaâng hoaâng, baån gúãi troån 40 characters
ra cho möîi haâng, (40 characters laâ chiïìu röång cuãa Docket) Muöën gúãi troån 40
characters baån phaãi gheáp thïm blank spaces cho möîi doâng daâi àuã 40
characters. Thñ duå:
strLine = Space(40) ' Initialise 40 blank spaces
Mid(strLine,15,9) = "Thank you" ' Nheát hai chûä Thank you vaâo, bùæt àêìu tûâ cöåt
15
Printer.Print strLine

Cho Application möåt Icon


Baån coá thïí cho möîi Form möåt icon bùçng caách duâng Property Icon trong
Properties Window cuãa Form àïí choån möåt icon file. Möîi khi möåt Form àûúåc
Minimised ta seä thêëy Icon cuãa noá trïn Desktop. Bêy giúâ muöën duâng icon cuãa
möåt Form laâm icon cuãa Application (nhu liïåu), baån duâng menu command
Project | Project? Properties. Khi Dialog hiïån ra choån Tab 'Make' vaâ click Icon
combo box àïí choån Form baån muöën chó àõnh.

VB shorcut Keys
Find Ctrl+F
Replace Ctrl+H
Find Next F3
Copy Ctrl+C
Cut Ctrl+X
Paste Ctrl+V
Undo Ctrl+Z
Delete Current Line Ctrl+Y
Delete to End of Word Ctrl+Delete
View Code Window F7
View Definition of Sub/Function Shift+F2
Go to last position Ctrl+Shift+F2
Debug Step Into F8
Debug Step Over Sub/Function Shift+F8
View Object Browser F2
View Prperties Window F4

Comment (biïën cêu code thaânh cêu chuá thñch) / Indent (cho xñt vö) möåt söë doâng
code
Nïëu khöng thêëy Edit Toolbar thò duâng menu command View | Toolbars | Edit
àïí laâm Edit Toolbar hiïån ra. Choån möåt söë doâng code baån muöën laâm viïåc àoaån
duâng Comment/Uncomment, Indent/Unindent buttons àïí xûã lyá.

You might also like