
H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 18: Làm vi c v i máyươ ệ ớ
in
Ch ng ươ 18:
Làm vi c v i máy inệ ớ
--------oOo--------
N i dung th o lu n:ộ ả ậ
- In đ h a trong ch ng trình VBồ ọ ươ
- In văn b n trong ch ng trình VBả ươ
- In tài li u nhi u trang trong ch ng trình VBệ ề ươ
- S d ng h p tho i Print, Page Setup, Print Previewử ụ ộ ạ
Trong ch ng này chúng ta s h c cách tích h p ch c năng in n vào trong form cũngươ ẽ ọ ợ ứ ấ
nh cách x lý in n đ h a, in văn b n và tài li u nhi u trang.ư ử ấ ồ ọ ả ệ ề
Chú ý:
- L p đ i t ng PrintDocument cung c p nhi u ch c năng in n h nớ ố ượ ấ ề ứ ấ ơ
- Chúng ta s d ng các đi u khi n h p tho i PrintDialog, PrintPreViewDialog vàử ụ ề ể ộ ạ
PageSetupDialog đ th c thi tác v in n.ể ự ụ ấ
- Đ in tài li u nhi u trang, chúng ta ph i t o ra th t c s lý s ki n PrintPageể ệ ề ả ạ ủ ụ ử ự ệ
x lý thao tác in m i l n t ng trang tài li u. Tuy nhiên h u nh các ch c năngử ỗ ầ ừ ệ ầ ư ứ
in n chúng ta đ u đ c h tr trong th vi n System.Drawing.Printing.ấ ề ượ ỗ ợ ư ệ
1. S d ng l p Printdocumentử ụ ớ
Printdocument là l p b n th ng xuyên s d ng khi in n. ớ ạ ườ ử ụ ấ Vi c s d ng l p này b ngệ ử ụ ớ ằ
cách ch n nó trên toolbox và thêm nó vào d án nh các đi u khi n khác. L p này n mọ ự ư ề ể ớ ằ
trong th vi n System.Drawing.Printing. B n c n imports nó ra đ u ch ng trình khiư ệ ạ ầ ở ầ ươ
mu n s d ng. Bài t p MyPrintsGraphics sau đây s h ng d n cách s d ng đ iố ử ụ ậ ẽ ướ ẫ ử ụ ố
t ng này.ượ
1.1. S d ng đi u khi n PrintDocumentử ụ ề ể
Tìm hi u ch ng trình:ể ươ
Ch ng trìnhươ s bao g m m t textbox cho phép nh p đ ng d n c a file graphic c n inẽ ồ ộ ậ ườ ẫ ủ ầ
và m t nút nh n cho phép in ra. Vì ta không n i máy in nên ta s l u ra m t file đ nhộ ấ ố ẽ ư ộ ị
d ng *.mdi.ạ
Thi t k giao di n:ế ế ệ
B n t o m i m t Solution và thêm vào m t d án cùng tên là MyPrintsGraphics và thi tạ ạ ớ ộ ộ ự ế
k giao di n nh hình d i đây. Trong đó các đ i t ng có thu c tính nh sau:ế ệ ư ướ ố ượ ộ ư
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 1 - Add: cnt-44-dh, VIMARU

H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 18: Làm vi c v i máyươ ệ ớ
in
- TextBox1: thu c tính text là đ ng d n đ n file graphics c a b n. đây là fileộ ườ ẫ ế ủ ạ Ở
NFS2SER.ICO tôi đã chép vào th m c ch a d án.ư ụ ứ ự
- Label1 và nút nh n có text nh hình.ấ ư
B n cũng thêm vào đi u khi n PrintDocument1 t ToolBox.ạ ề ể ừ
Vi t mã:ế
Tr c h t ta t o m i m t module có tên ướ ế ạ ớ ộ ModulePrinting.vb ch a hàm PrintGraphic làứ
hàm ph c v in n s đ c tri u g i trong th t c Button1_Click. N i dung c a moduleụ ụ ấ ẽ ượ ệ ọ ủ ụ ộ ủ
nh sau:ư
Imports System.Drawing.Printing
Module ModulePrinting
Public Sub PrintGraphic(ByVal sender As Object, _
ByVal ev As PrintPageEventArgs)
'V nh đ h a b ng DrawImageẽ ả ồ ọ ằ
ev.Graphics.DrawImage _
(Image.FromFile(Form1.TextBox1.Text), _
ev.Graphics.VisibleClipBounds)
'Xác đ nh không còn trang khácị
ev.HasMorePages = False
End Sub
End Module
Th t c này là h t nhân c a tác v in n t ng trang khi s ki n PrintPage c a đi uủ ụ ạ ủ ụ ấ ừ ự ệ ủ ề
khi n PrintDocument1ể x y ra sau l i g i PrintDocument1.Print(). Trong đó, ả ờ ọ ev dùng để
tham chi u đ n các thông s mà PrintDocument truy n vào. Ta dùng ế ế ố ề ev đ l y v đ iể ấ ề ố
t ng Graphics dùng v ra máy in đ ng th i s d ng ph ng th c DrawImage đ vượ ẽ ồ ờ ử ụ ươ ứ ể ẽ
nh. Thu c tính HasMorePage đ t là false đ ch in trong m t trang.ả ộ ặ ể ỉ ộ
Tr l i c a s thi t k form1. B n vào ch đ Code Editor và đ t khai báo sau đ uở ạ ử ổ ế ế ạ ế ộ ặ ở ầ
Form1:
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 2 - Add: cnt-44-dh, VIMARU

H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 18: Làm vi c v i máyươ ệ ớ
in
Imports System.Drawing.Printing
Ti p theo ta t o th t c Button1_Click nh sau:ế ạ ủ ụ ư
Private Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Try
AddHandler PrintDocument1.PrintPage, _
AddressOf ModulePrinting.PrintGraphic
PrintDocument1.Print()
Catch ex As Exception
MessageBox.Show _
("Sorry-there is problem printing", ex.ToString)
End Try
End Sub
Phát bi u AddHandler yêu c u th t c x lý PrintGraphic trong Module s đ c tri uể ầ ủ ụ ử ẽ ượ ệ
g i khi s ki n PrintPage c a đi u khi n PrintDocument x y ra.ọ ự ệ ủ ề ể ả Hàm AddressOf dùng
đ ch đ nh đ a ch c a th t c PrintGraphic trong ModulePrint.vb. Đây là k thu tể ỉ ị ị ỉ ủ ủ ụ ỹ ậ
chuy n giao (delegate) trong các ngôn ng c a n n .NET. B n chuy n đ a ch c a hàmể ữ ủ ề ạ ể ị ỉ ủ
cho đ i t ng và đ i t ng s tri u g i hàm.ố ượ ố ượ ẽ ệ ọ
Ch y ch ng trình:ạ ươ
n F5 đ ch y ch ng trình. B n có th nh p m i m t đ ng d n đ n đ i t ng inẤ ể ạ ươ ạ ể ậ ớ ộ ườ ẫ ế ố ượ
hay click vào nút nh n đ in luôn. K t qu :ấ ể ế ả
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 3 - Add: cnt-44-dh, VIMARU

H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 18: Làm vi c v i máyươ ệ ớ
in
B n ch n n i l u file *.mdi. và n nút save đ l u. B n cũng có th d ng tác v inạ ọ ơ ư ấ ể ư ạ ể ừ ụ
b ng cách n nút Cacel.ằ ấ
1.2. In văn b n t đ i t ng TextBoxả ừ ố ượ
Bài t p sau chúng ta s in đo n văn b n trong m t ô textbox. ậ ẽ ạ ả ộ Ta s không dùng tr c ti pẽ ự ế
đ i t ng PrintDocument n a mà t o nó b ng mã ch ng trình. Ta cũng dùng ph ngố ượ ữ ạ ằ ươ ươ
th c Graphics.DrawString thay cho ph ng th c DrawImage tr c đây.ứ ươ ứ ướ
Bài t p MyTextPrinting:ậ
Tìm hi u ch ng trình:ể ươ
Ch ng trình g m m t ô textbox và m t nút nh n. Ô textbox cho phép nh p đo n vănươ ồ ộ ộ ấ ậ ạ
b n và nút nh n s ti n hành in đo n văn b n có trong textbox đó ra.ả ấ ẽ ế ạ ả
Thi t k giao di n:ế ế ệ
B n t o m i m t Solution và thêm vào m t d án cùng tên là MyTextPrinting, thi t kạ ạ ớ ộ ộ ự ế ế
giao di n nh hình:ệ ư
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 4 - Add: cnt-44-dh, VIMARU

H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 18: Làm vi c v i máyươ ệ ớ
in
Trong đó các thu c tính c a các đi u khi n nh sau: đ i t ng TextBox1: ScrollBars –ộ ủ ề ể ư ố ượ
Both, MultiLine – True. Các đ i t ng và thu c tính c a nó nh hình.ố ượ ộ ủ ư
Vi t mã:ế
Tr c h t mu n s d ng in n ta c n đ t khai báo sau đ u ch ng trình:ướ ế ố ử ụ ấ ầ ặ ở ầ ươ
Imports System.Drawing.Printing
Khai báo m t hàm ph c v in đo n văn b n trong ô textbox. B n t o ngay trong c a sộ ụ ụ ạ ả ạ ạ ử ổ
code editor c a form1.vb d i dòng khai báo form1 nh sau:ủ ướ ư
Private Sub PrinText(ByVal sender As Object, _
ByVal ev As PrintPageEventArgs)
's d ng DrawString đ v chu i c n inử ụ ể ẽ ỗ ầ
ev.Graphics.DrawString(TextBox1.Text, _
New Font("Arial", 11, FontStyle.Regular), _
Brushes.Black, 120, 120)
'Cho bi t không còn trang ti p theoế ế
ev.HasMorePages = False
End Sub
T o th t c Button1_Click nh sau:ạ ủ ụ ư
Try
'Khai báo bi n PrintDoc có ki u PrintDocumentế ể
Dim PrintDoc As New PrintDocument()
AddHandler PrintDoc.PrintPage, AddressOf Me.PrinText
'B t đ u inắ ầ
PrintDoc.Print()
Catch ex As Exception
MessageBox.Show("Sorry-There is a problem printing", _
ex.ToString())
End Try
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 5 - Add: cnt-44-dh, VIMARU

