Trang 1
MÔN : L P TRÌNH H NG Đ I T NG Ậ ƯỚ Ố ƯỢ
Bài t p l n ậ ớ : Xây d ng trình qu n lý h th ng file mini ệ ố ự ả
I. M c tiêu : ụ
ể ể ế ầ ế t h u h t các tính ch t và kh năng l p trình ấ ả ậ
Giúp SV th c hành đ hi u bi ự
ng đ i t ng c a VC# đ xây d ng ng d ng th c t h ướ ố ượ ự ứ . ự ế ủ ụ ể
II. N i dung : ộ
t k tr c quan các c a s ng d ng FileManager theo đ c t chi ti t d ế ế ự ử ổ ứ ặ ả ụ ế ướ i
Thi
đây.
Vi t code cho các hàm x lý s ki n th c hi n các ch c năng qu n lý h ế ự ệ ử ự ứ ệ ả ệ
th ng file c a ch ng trình ủ ố ươ
III. Chu n đ u ra : ẩ ầ
ậ ể thi ữ ạ ắ ỹ ế ế ự t k tr c
Sinh viên n m v ng và dùng thành th o qui trình k thu t đ
quan các c a s giao di n c a ch ng trình, thi t l p giá tr các thu c tính cho ệ ủ ử ổ ươ ế ậ ộ ị
t ng ph n t ừ ầ ử ủ giao di n, khai báo hàm x lý s ki n cho s ki n quan tâm c a ự ệ ự ệ ử ệ
ng giao di n. đ i t ố ượ ệ
Sinh viên n m v ng và s d ng thành th o các tính ch t l p trình h ấ ậ ử ụ ữ ạ ắ ướ ố ng đ i
t ượ ng nh tính th a k , bao đóng, đa x đ xây d ng các đo n code t ng quát ạ ể ừ ế ư ự ạ ổ
hóa.
IV. Đ c t ch ng trình FileManager : ặ ả ươ
Ch c 5 ch c năng qu n lý h th ng file sau đây : ươ ng trình ph i cung c p đ ả ấ ượ ệ ố ứ ả
1. duy t tìm và xóa các file th a mãn pattern qui đ nh t ệ ỏ ị ừ 1 th m c b t đ u do ư ụ ắ ầ
ng i dùng qui đ nh. ườ ị
2. duy t tìm và xóa các file *.exe do virus exe.exe t o ra t ệ ạ ừ ư ụ ắ ầ 1 th m c b t đ u
do ng i dùng qui đ nh. ườ ị
3. duy t tìm ph n t có đ sâu sâu nh t trong 1 th m c do ng i dùng qui ầ ử ệ ư ụ ấ ộ ườ
đ nh. ị
Trang 2
4. duy t tìm và tính s l ng các file và các th m c th a mãn pattern qui ố ượ ệ ư ụ ỏ
1 th m c b t đ u do ng i dùng qui đ nh. đ nh t ị ừ ư ụ ắ ầ ườ ị
5. duy t tìm và tính t ng kích th c các file th a mãn pattern qui đ nh t 1 th ệ ổ ướ ỏ ị ừ ư
m c b t đ u do ng i dùng qui đ nh. ụ ắ ầ ườ ị
V. Phân tích :
Đ giúp ng i dùng th c hi n 5 ch c năng trên, ch ng trình nên có menubar ể ườ ự ứ ệ ươ
: nh sauư
Đ giúp ng ể ườ ơ i dùng th c hi n 5 ch c năng trên d dàng và nhanh chóng h n, ự ứ ệ ễ
ch ng trình nên có toolbar nh sau ươ ư ệ (m i icon trong toolbar s giúp th c hi n ự ẽ ỗ
nhanh 1 ch c năng t ng ng c a ch ng trình) : ứ ươ ứ ủ ươ
ệ ủ ứ ự ầ ươ ự ng trình, ta th y qui trình th c ấ
Phân tích 5 ch c năng c n th c hi n c a ch
hi n các ch c năng này đ u có nh ng công vi c gi ng nhau nh sau : ữ ứ ư ệ ề ệ ố
c n 1 form giao di n đ ng ệ ể ườ ầ ỗ i dùng xác đ nh th m c b t đ u x lý, chu i ư ụ ắ ầ ử ị
pattern nh n d ng các ph n t c n x lý, hi n th các thông tin x lý theo ậ ạ ầ ử ầ ử ử ể ị
th i gian... Thí d form có d ng sau : ụ ạ ờ
Trang 3
c n 1 đo n code th c hi n thu t gi i duy t cây phân c p t th m c xác ự ệ ậ ạ ầ ả ấ ừ ư ụ ệ
i dùng đ tìm t t c ph n t th a mãn pattern qui đ nh đ x đ nh b i ng ở ị ườ ể ấ ả ầ ử ỏ ể ử ị
lý. L u ý m i ch c năng qui đ nh vi c x lý ph n t tìm đ c hoàn toàn ệ ử ầ ử ư ứ ỗ ị ượ
khác nhau : ch c năng xóa file thì s xóa file, ch c năng đ m s l ng thì ố ượ ứ ứ ẽ ế
s tăng count đ m, … ẽ ế
ng trình và n m v ng ki n th c v ứ ủ ươ ứ ề ữ ế ắ
Sau khi phân tích các ch c năng c a ch
thi ng đ i t i quy t t ế ế t k ph n m m h ầ ề ướ ố ượ ng, ta th y đ gi ấ ể ả ế ố ứ t nh t các ch c ấ
ng trình là dùng m u thi t k ph d ng có tên là “Template năng c a ch ủ ươ ẫ ế ế ổ ụ
c đ class nh sau : method” v i ớ l ượ ồ ư
Trang 4
Form
Client
Show()
CRecursiveBrowseDlg
ệ ộ
//các thu c tính giao di n //các template method Duyetcay() btnBrowse_Click() btnStart_Click() //các primitive method InitForm() Prolog() Action() Epilog()
CFilesDeleteDlg
CDeepLengthDlg
//override các primitive method InitForm() Prolog() Action() Epilog() //override các primitive method InitForm() Prolog() Action() Epilog()
....
ế ế ự t k tr c quan 1 l n đ t o giao di n cho form giao di n t ng quát đ ệ ệ ổ ể ạ ầ ể
thi
ng i dùng xác đ nh th m c b t đ u x lý, chu i pattern nh n d ng các ườ ư ụ ắ ầ ử ậ ạ ỗ ị
ph n t ầ ử ầ ử c n x lý, hi n th các thông tin x lý theo th i gian... Đ t tên class ử ể ặ ờ ị
cho form này là CRecursiveBrowseDlg, các thu c tính dùng chung, hàm x ộ ử
lý button Browse, button Start đ c vi t 1 l n class ượ ế ầ ở
CRecursiveBrowseDlg, ta g i các hàm này là các template function, thí d ọ ụ
hàm DuyetCay() s miêu t i duy t cây phân c p đ c dùng ẽ ả thu t gi ậ ả ấ ượ ệ
chung cho m i ch c năng x lý h th ng file. ệ ố ứ ử ọ
Đ th c hi n t ng ch c năng, ta đ nh nghĩa 1 class con c a ủ ể ự ệ ừ ứ ị
CrecursiveBrowseDlg r i ch c n override các hàm primitive nh InitForm, ỉ ầ ư ồ
Prolog, Action, Epilog.
Trang 5
VI. Qui trình xây d ng ch ng trình ự ươ
ứ VI.1 Qui trình đi n hình đ t o các icon đ h a trong toolbar th hi n các ch c ể ệ ồ ọ ể ạ ể
năng :
ứ Toolbar là 1 c a s ch a nhi u button (icon), m i button cho phép th c hi n 1 ch c ử ổ ứ ự ề ệ ỗ
năng c a ng d ng. Các button có kích th c đ u nhau, nên k t h p 1 nh bitmap ủ ứ ụ ướ ề ế ợ ả
v i t ng button, n i dung nh làm sao g i ý cho ng ớ ừ ả ộ ợ ườ i dùng v ch c năng t ề ứ ươ ứ ng ng
(thí d nh d ng cái kéo g i ý ch c năng Cut,...). ụ ả ứ ạ ợ
1. Công vi c đ u tiên c n th c hi n là dùng 1 trình so n th o đ h a (Paint, ệ ầ ồ ọ ự ệ ạ ả ầ
CorelDraw,...) đ thi ể ế ế ẽ ừ ả ủ ừ t k (v ) t ng nh bitmap g i ý cho ch c năng c a t ng ợ ứ
button trong Toolbar. B n có th v m i hình bitmap hay dùng trình "Screen ể ẽ ớ ạ
Capture" c t các icon có s n c a ng d ng nào đo đang ch y và dán vào vùng ụ ẵ ủ ứ ạ ắ
ấ ả so n th o nh c a trình so n th o đ h a. Sau khi so n xong 1 nh, ta c t nh ồ ọ ả ả ủ ả ạ ả ạ ạ
lên file d ng *.bmp. L u ý r ng các nh ph i có cùng kích th ư ả ả ạ ằ ướ ọ c (thí d ta ch n ụ
20*20) :
- file FilesDelete.bmp ch a nh c a button (xóa file) ứ ả ủ
- file FilesCount.bmp ch a nh c a button (đ m s l ng) ứ ả ủ ố ượ ế
- file FilesSize.bmp ch a nh c a button c) ứ ả ủ (tính t ng kích th ổ ướ
- file DeepLen.bmp ch a nh c a button ứ ả ủ (tính đ sâu max) ộ
- file ExeVirusDel.bmp ch a nh c a button (tìm và di t virus exe.exe) ứ ả ủ ệ
- (tr giúp c a ch ng trình) file Help.bmp ch a nh c a button ứ ả ủ ủ ợ ươ
- file About.bmp ch a nh c a button (gi i thi u thông tin v ch ng trình) ứ ả ủ ớ ề ươ ệ
VI.2 Qui trình đi n hình đ xây d ng MenuBar cho c a s ch ng trình : ử ổ ươ ự ể ể
2. Ch y VS .Net, ch n menu File.New.Project đ hi n th c a s New Project. ị ử ổ ể ể ạ ọ
3. M r ng m c Visual C# trong TreeView "Project Types", ch n m c Window, ở ộ ụ ụ ọ
ch n icon "Windows Application" trong listbox "Templates" bên ph i, thi t l p th ả ọ ế ậ ư
m c ch a Project trong listbox "Location", nh p tên Project vào textbox "Name:" ụ ứ ậ
(td. FileManager), click button OK đ t o Project theo các thông s đã khai báo. ể ạ ố
Trang 6
t k , vi c thi t k form 4. Form đ u tiên c a ng d ng đã hi n th trong c a s thi ụ ử ổ ủ ứ ể ầ ị ế ế ệ ế ế
là quá trình l p 4 thao tác t o m i/xóa/hi u ch nh thu c tính/t o hàm x lý s ử ệ ạ ạ ặ ớ ộ ỉ ự
ng c n dùng trong form. ki n cho t ng đ i t ừ ố ượ ệ ầ
5. N u c a s ToolBox ch a hi n th chi ti t, ch n menu View.Toolbox đ hi n th ế ử ổ ư ể ị ế ể ể ọ ị
nó (th ng n m bên trái màn hình). Click chu t vào button ườ ằ ở ộ (Auto Hide) n mằ
ng tr c. ở góc trên ph i c a s ToolBox đ chuy n nó v ch đ hi n th th ể ề ế ộ ể ả ử ổ ị ườ ể ự
6. Duy t tìm ph n t MenuStrip (trong nhóm Menu & Toolbars), ch n nó, drag nó v ầ ử ệ ọ ề
v trí b t kỳ trong form đ t o menubar cho c a s ch ể ạ ị ử ổ ươ ấ ậ ứ ng trình. Menubar l p t c
đ c t o ra trên c a s . Menubar m i ch có 1 menu tr ng có caption là “Type ượ ạ ở ử ổ ớ ố ỉ
Here”.
7. Click chu t vào chu i “Type Here” đ thi t l p cursor ể ộ ỗ ế ậ ở đây r i nh p vào caption ậ ồ
c a menu đ u tiên c a ch ầ ủ ủ ươ ng trình “File”. Sau khi nh p xong caption cho menu, ậ
click chu t đ ch n nó, c a s thu c tính c a menu này đ ử ổ ộ ể ọ ủ ộ ượ ử c hi n th trong c a ị ể
ng n m d s thu c tính (th ổ ộ ườ ằ ở ướ ộ i ph i màn hình). Duy t tìm và hi u ch nh n i ệ ệ ả ỉ
dung c a thu c tính (Name) = mnuFile. ủ ộ
8. Ch n l i menu File, hi n gi nó ch ch a 1 MenuItem tr ng có caption là “Type ọ ạ ệ ờ ỉ ứ ố
Here” :
Click chu t vào chu i “Type Here” trong menu pop-up “File” đ thi t l p cursor ể ộ ỗ ế ậ ở
đây r i nh p vào caption c a MenuItem đ u tiên là “Xóa file đ quy”. Sau khi ủ ệ ầ ậ ồ
nh p xong caption cho MenuItem, click chu t trên nó đ ch n nó, máy s hi n th ể ọ ẽ ể ậ ộ ị
c a s thu c tính c a nó. n ph i chu t trên MenuItem đ hi n th menu l nh, ộ ử ổ ể ể Ấ ủ ệ ả ộ ị
ọ ch n ch c năng “Set Image” đ hi n th c a s “Set Resource”, đánh d u ch n ị ử ổ ể ể ứ ấ ọ
vào checkbox “Local resource”, click button Import, duy t tìm và xác đ nh file ệ ị
bitmap đ ượ ủ c dùng làm icon cho MenuItem này. Xem c a s thu c tính c a ử ổ ộ
Trang 7
ộ MenuItem “Xóa file đ quy” v a t o, duy t tìm và hi u ch nh n i dung c a thu c ừ ạ ủ ệ ệ ệ ộ ỉ
tính (Name) = mnuFilesDelete.
9. L p l i b c 8 đ t o các MenuItem ch c năng còn l i : ặ ạ ướ ể ạ ứ ạ
“Tính s l ng file đ quy” có (Name) = mnuFile sCount - ố ượ ệ
“Tính t ng kích th c các file đ quy” có (Name) = mnuFilesSize - ổ ướ ệ
- “Tính đ sâu maximum c a 1 th m c” có (Name) = mnuFileDeepLen ư ụ ủ ộ
“Di t virus exe.exe” có (Name) = mnuFileVirusDel - ệ
“-“ có (Name) = tên m c đ nh. Ph n t này t - ặ ị ầ ừ ự ế ể ạ bi n thành làn phân cách (đ t o
nhóm ch c năng trong 1 men u pop-up). ứ
“Exit” có (Name) = mnuFileExit -
i các b 10. L p l ặ ạ ướ c 8 & 9 đ t o menu Help v i (Name) = mnuHelp g m 2 ớ ể ạ ồ
MenuItem ch c năng sau đây : ứ
“Tr giúp” có (Name) = mnuHelpHelp - ợ
“V ch ng trình…” có (Name) = mnuHelpAbout - ề ươ
Sau khi thi t k xong, m c V trên đây. ế ế c a s có d ng y nh hình v ử ổ ẽ ở ụ ư ạ
VI.3 Qui trình đi n hình đ xây d ng ToolBar : ự ể ể
11. Duy t tìm ph n t ToolStrip (trong nhóm Menu & Toolbars), ch n nó, drag nó v ầ ử ệ ọ ề
v trí b t kỳ trong form đ t o Toolbar cho c a s ch ể ạ ị ử ổ ươ ấ ậ ứ ng trình. Toolbar l p t c
đ c t o ra i : ượ ạ ở trên c a s . Toolbar m i ch có 1 Button tr ng nh hình d ỉ ử ổ ư ớ ố ướ
ọ 12. Click chu t vào mũi tên ch xu ng c a Button tr ng đ hi n th menu l nh, ch n ể ể ủ ệ ộ ố ố ỉ ị
Button m i có hình đ h a m c đ nh là . l nh Button đ t o Button m i. ể ạ ệ ớ ồ ọ ặ ớ ị
ộ Trong c a s thu c tính c a button m i, duy t tìm thu c tính Image, click chu t ử ổ ủ ệ ộ ớ ộ
vào button ấ bên ph i thu c tính đ hi n th c a s “Select Resource”, đánh d u ị ử ổ ể ể ả ộ
ch n vào checkbox “Local resource”, click chu t vào button “Import”, duy t tìm và ệ ọ ộ
Trang 8
xác đ nh file bitmap đ c dùng làm icon cho Button này ( ị ượ ộ ). Xem c a s thu c ử ổ
tính c a Button v a t o, duy t tìm và hi u ch nh thu c tính (Name) = tbFileDelete. ệ ừ ạ ủ ệ ộ ỉ
13. L p l i b i : ặ ạ ướ c 12 nhi u l n đ t o các button còn l ể ạ ề ầ ạ
- Button có (Name) = tbFilesCount
- Button có (Name) = tbFilesSize
- Button có (Name) = tbFileDeepLen
- Button có (Name) = tbFileVirusDel
- Button có (Name) = tbHelpHelp
- Button có (Name) = tbHelpAbout
Sau khi thi ế ế t k xong Toolbar, ta th y Toolbar có d ng sau : ấ ạ
VI.4 Qui trình đi n hình đ đ nh nghĩa interface s d ể ị ử ụng : ể
Trong ch ng trình, ta có 5 class miêu t 5 ch c năng mà ch ươ ả ứ ươ ấ ng trình cung c p.
Chi ti t hi n th c t ng class ch c năng c n đ ế ự ừ ứ ệ ầ ượ c che d u đ i v i ph n còn l ố ớ ấ ầ ạ i
ng trình. Đ gi i quy t v n đ này t t nh t, ta s đ nh nghĩa interface s c a ch ủ ươ ể ả ế ấ ề ố ẽ ị ấ ử
ỉ ứ d ng chung cho 5 class ch c năng, interface này có tên là Icommand và ch ch a ụ ứ
đúng 1 hàm d ch v : ụ ị
void Show(); //hi n th form ch c năng đ ng ị ề ườ ứ ể i dùng làm vi c ệ
14. Đ đ nh nghĩa interface, ta d i chu t v ph n t g c c a cây Project trong c a s ộ ề ầ ử ố ủ ử ổ ể ị ờ
“Solution Explorer”, n ph i chu t vào nó đ hi n th menu l nh, ch n ch c năng ể ể ứ ệ ấ ả ộ ọ ị
ệ Add.New Item đ hi n th c a s “Add New Item”, ch n m c “Interface”, hi u ị ử ổ ể ể ụ ọ
ch nh tên interface là ICommand.cs, ch n button Add đ máy t o 1 interface m i. ể ạ ọ ớ ỉ
15. C a s so n code cho interface ICommand đ c hi n th , ta đ nh nghĩa interface ử ổ ạ ượ ể ị ị
đ n gi n nh sau : ơ ư ả
namespace FileManager {
Trang 9
interface ICommand {
void Show(); //hi n th form ch c năng đ ng i dùng làm vi c v i nó ể ườ ứ ể ị ệ ớ
}
}
VI.5 Qui trình đi n hình đ xây d ng tr c quan 1 Dialog Box : ự ự ể ể
Gi s ta c n 1 form t ng quát ch a các đ i t ng giao di n sau đây đ ph c v ả ử ố ượ ứ ầ ổ ể ụ ụ ệ
chung cho t t c các ch c năng c a ch ng trình FileManager : ấ ả ủ ứ ươ
Qui trình đi n hình đ xây d ng tr c quan Form (Dialog Box) trên g m các b ự ự ể ể ồ ướ c
thao tác sau :
16. D i chu t v ph n t ộ ề ầ ử ố ủ ấ g c c a cây Project trong c a s “Solution Explorer”, n ử ổ ờ
ph i chu t vào nó đ hi n th menu l nh, ch n ch c năng Add.Windows Form đ ể ể ứ ệ ả ộ ọ ị ể
hi n th c a s “Add New Item”, ch n m c “Windows Form”, hi u ch nh tên ị ử ổ ụ ệ ể ọ ỉ
Form là CRecursiveBrowseDlg.cs, ch n button Add đ máy t o 1 form m i. ọ ể ạ ớ
t k , vi c thi 17. Form m i t o đã hi n th trong c a s thi ể ử ổ ớ ạ ị ế ế ệ ế ế ặ t k form là quá trình l p
ố 4 thao tác t o m i/xóa/hi u ch nh thu c tính/t o hàm x lý s ki n cho t ng đ i ự ệ ử ừ ệ ạ ạ ớ ộ ỉ
ng c n dùng trong form. t ượ ầ
Trang 10
18. Thay đ i ph ng ch ng kích th ỏ ừ ổ ướ c form cho đ l n h u ch a đ các đ i t ầ ủ ớ ố ượ ng ứ ủ
giao di n trong form nh hình v trên. ư ệ ẽ
19. N u c a s ToolBox ch a hi n th chi ti t, ch n menu View.Toolbox đ hi n th ế ử ổ ư ể ị ế ể ể ọ ị
nó (th ng n m bên trái màn hình). Click chu t vào button ườ ằ ở ộ (Auto Hide) n mằ
ng tr c. ở góc trên ph i c a s ToolBox đ chuy n nó v ch đ hi n th th ể ề ế ộ ể ả ử ổ ị ườ ể ự
20. Duy t tìm ph n t Label (trong nhóm Common Controls), ch n nó, d i chu t v ầ ử ệ ộ ề ọ ờ
c mong mu n. Vì đây là ph n t v trí trên trái trong form và v nó v i kích th ị ẽ ớ ướ ầ ử ố
t l p n i dung c th cho t ng quát đ các class con override nên ta không c n thi ổ ể ầ ế ậ ụ ể ộ
thu c tính Text c a nó, tuy nhiên đ class con truy xu t d dàng, ta c n hi u ch nh ấ ễ ủ ể ệ ầ ộ ỉ
thu c tính (Name) = lblStartDir, Modifiers = protected. ộ
21. Duy t tìm ph n t ầ ử ệ ộ TextBox (trong nhóm Common Controls), ch n nó, d i chu t ọ ờ
i Label v a v và v nó v i kích th c mong mu n. Hi u ch nh v v trí ngay d ề ị ướ ừ ẽ ẽ ớ ướ ệ ố ỉ
thu c tính (Name) = txtStartDir, Modifiers = protected. ộ
22. Duy t tìm ph n t Button (trong nhóm Common Controls), ch n nó, d i chu t v ầ ử ệ ộ ề ọ ờ
v trí ngay bên ph i TextBox v a v và v nó v i kích th ị ừ ẽ ẽ ả ớ ướ ệ c mong mu n. Hi u ố
ch nh thu c tính (Name) = btnBrowse, Modifiers = protected. ộ ỉ
23. L p l i 3 b c 20, 21, 22 đ v 1 Label có (Name) = lblPattern, Modifiers = ặ ạ ướ ể ẽ
protected, 1 TextBox có (Name) = txtPattern, Modifiers = protected, 1 button có
(Name) = btnStart, Modifiers = protected. B n cũng có th dùng ph ng pháp nhân ể ạ ươ
b n vô tính đ t o các ph n t ể ạ ả ầ ử ớ m i gi ng nh nh ng ph n t ư ầ ử ữ ố ụ ạ đã có, thí d b n
ch n 3 đ i t ng đã v (Label, TextBox, Button), copy chúng r i paste vào v trí ố ượ ọ ẽ ồ ị
m i, d i v trí và thay đ i kích th c các ph n t m i theo yêu c u. ờ ị ổ ớ ướ ầ ử ớ ầ
24. Duy t tìm ph n t Label (trong nhóm Common Controls), ch n nó, d i chu t v ầ ử ệ ộ ề ờ ọ
i TextBox txtStartDir và v nó v i kích th v trí ngay d ị ướ ẽ ớ ướ ệ c mong mu n. Hi u ố
ch nh thu c tính (Name) = lblOutput, Modifiers = protected. ộ ỉ
25. Duy t tìm ph n t ListBox (trong nhóm Common Controls), ch n nó, d i chu t v ầ ử ệ ộ ề ọ ờ
i Label v a v và v nó v i kích th c mong mu n. Hi u ch nh v trí ngay d ị ướ ừ ẽ ẽ ớ ướ ệ ố ỉ
thu c tính (Name) = lbOutput, Modifiers = protected. ộ
Sau khi thi t k form xong, Form có d ng đúng theo yêu c u trên. ế ế ầ ở ạ
VI.6 Đ nh nghĩa các hàm x lý s ki n c n thi t trên các đ i t ng giao di n : ự ệ ầ ử ị ế ố ượ ệ
Trang 11
ự ệ 26. D i chu t v button btnBrowse, n kép chu t vào nó đ t o hàm x lý s ki n ộ ề ể ạ ử ấ ờ ộ
Click chu t cho button, c a s mã ngu n s hi n th đ ta b t đ u vi t code cho ồ ẽ ể ử ổ ắ ầ ị ể ộ ế
hàm. Cách t ng quát đ t o hàm x lý s ki n là ch n đ i t ự ệ ể ạ ố ượ ử ổ ọ ử ng btnBrowse, c a
s thu c tính c a nó s hi n th , click icon ổ ẽ ể ủ ộ ị ự ệ đ hi n th danh sách các s ki n ể ể ị
ng, duy t tìm s ki n quan tâm (Click), n kép chu t vào comboBox c a đ i t ủ ố ượ ự ệ ệ ấ ộ
bên ph i s ki n Click đ máy t o t đ ng hàm x lý cho s ki n này. C a s ả ự ệ ạ ự ộ ự ệ ử ổ ử ể
mã ngu n s hi n th khung s n c a hàm v a đ c t o v i thân r ng, nhi m v ồ ẽ ể ị ườ ủ ừ ượ ạ ệ ớ ỗ ụ
i l p trình là vi t code miêu t i th c hi n đúng ch c năng c a ng ủ ườ ậ ế ả thu t gi ậ ả ự ứ ệ
mong mu n :ố
//hàm s lý s ki n Click trên button btnBrowse ự ệ ự
private void btnBrowse_Click(object sender, EventArgs e) {
//t o form duy t ch n th m c ư ụ ệ ạ ọ
FolderBrowserDialog dlg = new FolderBrowserDialog();
//hi n th form duy t ch n th m c đ ng ệ ư ụ ể ườ ể ọ ị i dùng duy t ch n th m c làm ọ ư ụ ệ
vi cệ
dlg.ShowDialog();
ng d n th m c vào textbox txtStartDir //hi n th đ ể ị ừơ ư ụ ẫ
txtStartDir.Text = dlg.SelectedPath;
}
27. L p l i b c 24 đ t o hàm x lý s ki n Click chu t trên button btnStart, khung ặ ạ ướ ự ệ ể ạ ử ộ
n c a hàm v a đ c t o v i thân r ng, vi t code cho hàm này nh sau : s ườ ủ ừ ượ ạ ớ ỗ ế ư
//hàm s lý s ki n Click trên button btnStart ự ệ ự
//hàm này là 1 template method đi n hình, ể
c tr u t ng đ gi i quy t b t kỳ ch c năng nào. //nó ch ch a 3 b ỉ ứ ướ ừ ượ ể ả ế ấ ứ
private void btnStart_Click(object sender, EventArgs e) {
//1. thi t l p các giá tr đ u đ th c hi n ch c năng ế ậ ể ự ị ầ ứ ệ
Prolog();
Trang 12
//2. duy t cây và th c hi n ch c năng trên t ng ph n t tìm đ ầ ử ự ừ ứ ệ ệ c ượ
DuyetCay(txtStartDir.Text, txtPattern.Text);
//3. th c hi n các công vi c k t thúc ch c năng ệ ế ự ứ ệ
Epilog();
}
i thi u các hàm primitive (có thân r ng) đ máy không báo l i (vì các 28. Hi n th c t ệ ự ố ể ể ỗ ỗ
hàm này s đ c dùng trong các hàm template c a class hi n hành). Ý t ng là đ ẽ ượ ủ ệ ưở ể
cho các class con override các hàm này theo yêu c u riêng : ầ
//thi t l p các chu i caption cho các đ i t ng giao di n ế ậ ố ượ ỗ ệ
virtual public void InitForm() { }
//thi t l p các giá tr đ u đ th c hi n ch c năng ế ậ ể ự ị ầ ứ ệ
virtual public void Prolog() { }
tìm đ //th c hi n ch c năng trên ph n t ứ ầ ử ự ệ c ượ
virtual public void Action(String fname, byte fop) { }
//th c hi n các công vi c k t thúc ch c năng ệ ế ự ứ ệ
virtual public void Epilog() { }
ệ 29. Hi n th c hàm template quan tr ng nh t c a class hi n hành, hàm này s duy t ấ ủ ự ẽ ệ ệ ọ
cây phân c p t th m c xác đ nh đ tìm t t c các ph n t con th a mãn tiêu ấ ừ ư ụ ể ị ấ ả ầ ử ỏ
chu n đ c xác đ nh trong chu i pattern : ẩ ượ ỗ ị
//duy t cây và th c hi n ch c năng trên t ng ph n t tìm đ c ầ ử ự ứ ừ ệ ệ ượ
public void DuyetCay(String sdir, String spattern) {
// tìm các file th a mãn pattern và x lý ỏ ử
string[] flist = Directory.GetFiles(sdir, spattern);
foreach (string fname in flist)
Action(fname,0);
//xác đ nh t t c th m c con ị ấ ả ư ụ
Trang 13
string[] sdlistw = Directory.GetDirectories(sdir);
//xác đ nh t t c th m c con th a pattern ị ấ ả ư ụ ỏ
string[] sdlist = Directory.GetDirectories(sdir,spattern);
//duy t x lý t ng th m c con ư ụ ệ ử ừ
foreach (string subdir in sdlistw)
if (thuocve(subdir,sdlist)) { //th m c th a pattern ư ụ ỏ
DuyetCay(subdir, "*");
Action(subdir,1);
}
else //th m c không th a pattern ư ụ ỏ
DuyetCay(subdir, spattern);
}
//ki m tra chu i s có n m trong danh sách các chu i sl ể ằ ỗ ỗ
private bool thuocve(String s, String[] sl) {
int max = sl.Length-1;
for (int i = 0; i <= max; i++)
if (s == sl[i]) return true;
return false; //tr v false n u s không n m trong danh sách ả ề ế ằ
}
30. Vì các đo n code trên có dùng 1 s class th vi n trong namespace System.IO, nên ư ệ ạ ố
ta ph i kh i báo namespace này b ng cách d i v đ u file mã ngu n c a class ờ ề ầ ồ ủ ằ ả ả
CRecursiveBrowseDlg r i thêm l nh sau đây vào : ồ ệ
using System.IO;
31. Ta hi u ch nh l ệ ỉ ạ ệ ệ i l nh đ nh nghĩa class CRecursiveBrowseDlg nh sau đ nó hi n ư ể ị
th c interface ICommand : ự
//class CRecursiveBrowseDlg th a k class Form và hi n th c interface ICommand ừ ế ự ệ
Trang 14
public partial class CRecursiveBrowseDlg : Form, ICommand
31b. Ta hi u ch nh l i thân c a hàm kh i t o class CRecursiveBrowseDlg nh sau : ệ ỉ ạ ở ạ ủ ư
//hàm kh i t o class CRecursiveBrowseDlg ở ạ
public CRecursiveBrowseDlg() {
InitializeComponent();
InitForm();
}
VI.7 Đ nh nghĩa class con ph c v xóa file đ quy : ụ ụ ệ ị
32. D i chu t v ph n t ộ ề ầ ử ố ủ ấ g c c a cây Project trong c a s “Solution Explorer”, n ử ổ ờ
ph i chu t vào nó đ hi n th menu l nh, ch n ch c năng Add.Class đ hi n th ể ể ể ể ứ ệ ả ộ ọ ị ị
“Add New Item”, ch n m c “Class”, hi u ch nh tên class là c a s ử ổ ụ ệ ọ ỉ
CFilesDeleteDlg.cs, ch n button Add đ máy t o 1 class m i. ể ạ ọ ớ
ủ 33. Khi c a s so n code cho class CFilesDeleteDlg hi n th , hi u ch nh n i dung c a ử ổ ạ ệ ể ộ ị ỉ
class nh sau : ư
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace FileManager {
class CFilesDeleteDlg : CRecursiveBrowseDlg {
//override hàm InitForm
public override void InitForm() {
//hi u ch nh các chu i caption cho các ph n t ỗ ầ ử ệ ỉ giao di n ệ
this.Text = "Ch c năng xóa file và th m c đ qui" ; ư ụ ệ ứ
this.lblStartDir.Text = "Th m c b t đ u xóa :" ; ư ụ ắ ầ
Trang 15
this.lblPattern.Text = "Nh p pattern :" ; ậ
; this.lblOutput.Text = "Các file & th m c b xóa :" ư ụ ị
this.btnBrowse.Text = "Browse";
this.btnStart.Text = "Start";
}
//override hàm Prolog
public override void Prolog() { }
//override hàm Action đ th c hi n xóa th m c hay file tùy tr ư ụ ể ự ệ ườ ng h p ợ
public override void Action(String fname, byte fop) {
if (fop == 1) { //th m c ư ụ
Directory.Delete(fname);
lbOutput.Items.Add("Remove " + fname);
} else { //file
File.Delete(fname);
lbOutput.Items.Add("Delete " + fname);
}
}
//override hàm Epilog
public override void Epilog() { }
} //h t class ế
} //h t namespace ế
VI.8 Đ nh nghĩa class con ph c v đ m s l ụ ụ ế ố ượ ị ng file đ quy : ệ
Trang 16
34. D i chu t v ph n t ộ ề ầ ử ố ủ ấ g c c a cây Project trong c a s “Solution Explorer”, n ử ổ ờ
ph i chu t vào nó đ hi n th menu l nh, ch n ch c năng Add.Class đ hi n th ể ể ể ể ứ ệ ả ộ ọ ị ị
“Add New Item”, ch n m c “Class”, hi u ch nh tên class là c a s ử ổ ụ ệ ọ ỉ
CFilesCountDlg.cs, ch n button Add đ máy t o 1 class m i. ể ạ ọ ớ
ủ 35. Khi c a s so n code cho class CFilesCountDlg hi n th , hi u ch nh n i dung c a ử ổ ạ ệ ể ộ ị ỉ
class nh sau : ư
using System;
using System.Collections.Generic;
using System.Text;
namespace FileManager {
class CFilesCountDlg : CRecursiveBrowseDlg {
//đ nh nghĩa các thu c tính d li u c n dùng ộ ữ ệ ầ ị
private int dcount;
private int fcount;
//override hàm InitForm
public override void InitForm() {
//hi u ch nh các chu i caption cho các ph n t ỗ ầ ử ệ ỉ giao di n ệ
this.Text = "Ch c năng đ m file & th m c đ quy" ; ư ụ ệ ứ ế
; this.lblStartDir.Text = "Th m c b t đ u đ m :" ư ụ ắ ầ ế
this.lblPattern.Text = "Nh p pattern :" ; ậ
; this.lblOutput.Text = "K t qu đ m :" ả ế ế
this.btnBrowse.Text = "Browse";
this.btnStart.Text = "Start";
}
Trang 17
//override hàm Prolog
public override void Prolog() {
fcount = dcount = 0;
}
//override hàm Action đ th c hi n đ m s th m c và s file ố ư ụ ể ự ệ ế ố
public override void Action(String fname, byte fop) {
if (fop == 1) { //th m c ư ụ
dcount++;
} else { //file
fcount++;
}
}
//override hàm Epilog
public override void Epilog() {
lbOutput.Items.Clear();
lbOutput.Items.Add("So file la : " + fcount);
lbOutput.Items.Add("So thu muc la : " + dcount);
}
} //h t class ế
} //h t namespace ế
VI.9 Đ nh nghĩa class con ph c v tính t ng kích th c các file đ quy : ụ ụ ổ ị ướ ệ
36. D i chu t v ph n t ộ ề ầ ử ố ủ ấ g c c a cây Project trong c a s “Solution Explorer”, n ử ổ ờ
ph i chu t vào nó đ hi n th menu l nh, ch n ch c năng Add.Class đ hi n th ể ể ể ể ứ ệ ả ộ ọ ị ị
Trang 18
“Add New Item”, ch n m c “Class”, hi u ch nh tên class là c a s ử ổ ụ ệ ọ ỉ
CFilesSizeDlg.cs, ch n button Add đ máy t o 1 class m i. ể ạ ọ ớ
ủ 37. Khi c a s so n code cho class CFilesSizeDlg hi n th , hi u ch nh n i dung c a ử ổ ạ ể ệ ộ ị ỉ
class nh sau : ư
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
namespace FileManager {
class CFilesSizeDlg : CrecursiveBrowseDlg {
//đ nh nghĩa các thu c tính d li u c n dùng ộ ữ ệ ầ ị
ulong ClusterSize;
ulong SumSize;
ulong SumWaste;
//khai báo hàm API Windows c n dùng ầ
[DllImport("kernel32")]
public static extern int GetDiskFreeSpace(
string lpRootPathName,
out int lpSectorsPerCluster,
out int lpBytesPerSector,
out int lpNumberOfFreeClusters,
out int lpTotalNumberOfClusters
);
Trang 19
//override hàm InitForm
public override void InitForm() {
//hi u ch nh các chu i caption cho các ph n t ỗ ầ ử ệ ỉ giao di n ệ
this.Text = "Ch c năng tính t ng kích th c các file đ quy" ; ứ ổ ướ ệ
this.lblStartDir.Text = "Th m c b t đ u tính :" ; ư ụ ắ ầ
this.lblPattern.Text = "Nh p pattern :" ; ậ
; this.lblOutput.Text = "K t qu tính :" ế ả
this.btnBrowse.Text = "Browse";
this.btnStart.Text = "Start";
}
//override hàm Prolog
public override void Prolog() {
SumSize = SumWaste = ClusterSize = 0;
}
//override hàm Action đ th c hi n t ng kích th c các file ể ự ệ ổ ướ
public override void Action(String fname, byte fop) {
if (ClusterSize == 0) { //n u ch a có kích th c cluster đĩa ư ế ướ
Int32 cs, ss, fs, ts;
string[] parts = fname.Split('\\');
GetDiskFreeSpace(parts[0] + "\\", out cs, out ss, out fs, out ts);
ClusterSize = (ulong)cs * (ulong)ss;
}
if (fop == 1) { //th m c ư ụ
DirectoryInfo fi = new DirectoryInfo(fname);
Trang 20
} else { //file
FileInfo fi = new FileInfo(fname);
SumSize += (ulong) fi.Length;
SumWaste += (ClusterSize - (ulong)fi.Length % ClusterSize);
}
}
//override hàm Epilog
public override void Epilog() {
lbOutput.Items.Clear();
lbOutput.Items.Add("Kich thuoc cluster disk : " + ClusterSize);
lbOutput.Items.Add("Tong kich thuoc cac file la : " + SumSize);
lbOutput.Items.Add("Tong kich thuoc lang phi : " + SumWaste);
lbOutput.Items.Add("Khong gian chiem tren disk : " + (SumSize + SumWaste));
}
} //h t class ế
} //h t namespace ế
VI.10 Đ nh nghĩa class con ph c v tính t ng đ sâu max c a cây th m c : ụ ụ ư ụ ủ ổ ộ ị
38. D i chu t v ph n t ộ ề ầ ử ố ủ ấ g c c a cây Project trong c a s “Solution Explorer”, n ử ổ ờ
ph i chu t vào nó đ hi n th menu l nh, ch n ch c năng Add.Class đ hi n th ể ể ể ể ứ ệ ả ộ ọ ị ị
“Add New Item”, ch n m c “Class”, hi u ch nh tên class là c a s ử ổ ụ ệ ọ ỉ
CDeepLengthDlg.cs, ch n button Add đ máy t o 1 class m i. ể ạ ọ ớ
39. Khi c a s so n code cho class CDeepLengthDlg hi n th , hi u ch nh n i dung ử ổ ể ệ ạ ộ ị ỉ
c a class nh sau : ủ ư
using System;
using System.Collections.Generic;
using System.Text;
Trang 21
namespace FileManager
{
class CDeepLengthDlg : CRecursiveBrowseDlg {
//đ nh nghĩa các thu c tính d li u c n dùng ộ ữ ệ ầ ị
int DeepLength;
String path;
//override hàm InitForm
public override void InitForm() {
//hi u ch nh các chu i caption cho các ph n t ỗ ầ ử ệ ỉ giao di n ệ
ư ụ ; this.Text = "Ch c năng tính đ sâu sâu nh t c a 1 nhánh th m c" ộ ấ ủ ứ
this.lblStartDir.Text = "Th m c b t đ u tính :" ; ư ụ ắ ầ
this.lblPattern.Text = "Nh p pattern :" ; ậ
; this.lblOutput.Text = "K t qu tính :" ế ả
this.btnBrowse.Text = "Browse";
this.btnStart.Text = "Start";
}
//override hàm Prolog
public override void Prolog() {
DeepLength = 0;
}
//override hàm Action đ th c hi n tính đ sâu max c a căy th m c ư ự ệ ể ự ủ ộ
public override void Action(String fname, byte fop) {
Trang 22
//tách đ ng d n c a ph n t ườ ẫ ủ ầ ử thành các thành ph n r i r c ầ ờ ạ
string[] parts = fname.Split('\\');
ớ if (parts.Length > DeepLength) { //n u đ sâu c a thành ph n hi n hành l n ủ ệ ế ầ ộ
nh t ấ
DeepLength = parts.Length;
path = fname;
}
}
//override hàm Epilog
public override void Epilog() {
lbOutput.Items.Clear();
lbOutput.Items.Add("Do sau max la : " + DeepLength);
lbOutput.Items.Add("Phan tu co do sau max la : ");
lbOutput.Items.Add(path);
}
} //h t class ế
} //h t namespace ế
VI.11 Đ nh nghĩa class con ph c v xóa các file b nhi m virus exe.exe : ụ ụ ễ ị ị
40. D i chu t v ph n t ộ ề ầ ử ố ủ ấ g c c a cây Project trong c a s “Solution Explorer”, n ử ổ ờ
ph i chu t vào nó đ hi n th menu l nh, ch n ch c năng Add.Class đ hi n th ể ể ể ể ứ ệ ả ộ ọ ị ị
“Add New Item”, ch n m c “Class”, hi u ch nh tên class là c a s ử ổ ụ ệ ọ ỉ
CExeVirusDelDlg.cs, ch n button Add đ máy t o 1 class m i. ể ạ ọ ớ
41. Khi c a s so n code cho class CExeVirusDelDlg hi n th , hi u ch nh n i dung ử ổ ệ ể ạ ộ ị ỉ
c a class nh sau : ủ ư
using System;
using System.Collections.Generic;
Trang 23
using System.Text;
using System.IO;
namespace FileManager {
class CExeVirusDelDlg : CrecursiveBrowseDlg {
//override hàm InitForm
public override void InitForm() {
//hi u ch nh các chu i caption cho các ph n t ỗ ầ ử ệ ỉ giao di n ệ
; this.Text = "Ch c năng xóa các file nhi m exe.exe virus" ứ ễ
this.lblStartDir.Text = "Th m c b t đ u di ư ụ ắ ầ ệ ; t :"
this.lblPattern.Text = "Nh p pattern :" ; ậ
; this.lblOutput.Text = "Các file & th m c b xóa :" ư ụ ị
this.btnBrowse.Text = "Browse";
this.btnStart.Text = "Start";
}
//override hàm Prolog
public override void Prolog() {
lbOutput.Items.Clear();
}
//override hàm Action đ th c hi n xóa file b nhi m virus exe.exe ể ự ễ ệ ị
public override void Action(String fname, byte fop) {
if (fop == 1) { //th m c ư ụ
} else { //file
Trang 24
FileInfo fi = new FileInfo(fname);
if (fi.Length == 61440) { //n u kích th c file = 61440 ế ướ
File.Delete(fname);
lbOutput.Items.Add("Delete " + fname);
}
}
}
//override hàm Epilog
public override void Epilog() { }
} //h t class ế
} //h t namespace ế
VI.12 Vi t code cho ch ng trình chính ế ươ
42. Duy t tìm m c Form1.cs trong c a s “Solution Explorer” miêu t c a s chính ử ổ ụ ệ ả ử ổ
c a ch ủ ươ ng trình, n ph i chu t vào nó đ hi n th menu l nh, ch n l nh “View ể ể ọ ệ ệ ả ấ ộ ị
Code” đ hi n th c a s so n mã ngu n c a class Form t ị ử ổ ạ ồ ủ ể ể ươ ệ ng ng. Thêm l nh ứ
đ nh nghĩa thu c tính d li u sau vào đ u class Form1 : ị ữ ệ ầ ộ
i dùng mu n dùng ICommand dlg; //tham kh o đ n form ch c năng mà ng ả ứ ế ườ ố
43. Duy t tìm m c Form1.cs trong c a s “Solution Explorer” miêu t c a s chính ử ổ ụ ệ ả ử ổ
i c a s chính c a ch c a ch ủ ươ ng trình, n kép chu t vào nó đ hi n th l ộ ể ể ị ạ ử ổ ủ ấ ươ ng
trình.
44. Click chu t vào menu File đ hi n th các MenuItem c a nó. D i chu t v ủ ể ể ộ ộ ờ ị ề
ự ệ MenuItem “Xóa file đ quy” r i n kép chu t trên nó đ t o hàm x lý s ki n ồ ấ ể ạ ử ệ ộ
Click chu t trên nó. Khi c a s code hi n th , vi ử ổ ể ộ ị ế t code đ n gi n sau đây cho ả ơ
hàm :
//hàm xóa file theo pattern
private void mnuFilesDelete_Click(object sender, EventArgs e)
{
Trang 25
//t o Form xóa file theo pattern và hi n th nó đ ng ể ườ ể ạ ị i dùng làm vi c ệ
dlg = new CFilesDeleteDlg();
dlg.Show();
}
45. L p l i các b t các hàm x lý s ki n Click ậ ạ ướ c 40 và 41 nhi u l n đ t o và vi ề ầ ể ạ ế ự ệ ử
chu t cho các MenuItem ch c năng còn l i. Code c a các hàm nh sau : ứ ộ ạ ủ ư
//hàm đ m s file theo pattern ố ế
private void mnuFilesCount_Click(object sender, EventArgs e)
{
//t o Form đ m s file theo pattern và hi n th nó đ ng ể ườ ế ể ạ ố ị i dùng làm vi c ệ
dlg = new CFilesCountDlg();
dlg.Show();
}
//hàm xóa các file b nhi m virus exe.exe ễ ị
private void mnuFileVirusDel_Click(object sender, EventArgs e)
{
//t o Form xóa virus và hi n th nó đ ng ể ườ ể ạ ị i dùng làm vi c ệ
dlg = new CExeVirusDelDlg();
dlg.Show();
}
//hàm tính đ sâu max ộ
private void mnuFileDeepLen_Click(object sender, EventArgs e)
{
//t o Form đ m s file theo pattern và hi n th nó đ ng ể ườ ế ể ạ ố ị i dùng làm vi c ệ
Trang 26
dlg = new CDeepLengthDlg();
dlg.Show();
}
//hàm tính t ng kích th c các file ổ ướ
private void mnuFilesSize_Click(object sender, EventArgs e)
{
//t o Form tính t ng kích th c các file theo pattern ạ ổ ướ
//và hi n th nó đ ng ị ể ườ ể i dùng làm vi c ệ
dlg = new CFilesSizeDlg();
dlg.Show();
}
//hàm hi n th thông tin tr giúp ị ể ợ
private void mnuHelpHelp_Click(object sender, EventArgs e)
{
MessageBox.Show("Xin l i, ch c năng này ch a đ c hi n th c!" ỗ ư ượ ứ ự ); ệ
}
//hàm hi n th thông tin v ch ng trình ề ươ ể ị
private void mnuHelpAbout_Click(object sender, EventArgs e)
{
MessageBox.Show("Xin l i, ch c năng này ch a đ c hi n th c!" ỗ ư ượ ứ ự ); ệ
}
Trang 27
46. Duy t tìm m c Form1.cs trong c a s “Solution Explorer” miêu t c a s chính ử ổ ụ ệ ả ử ổ
i c a s chính c a ch c a ch ủ ươ ng trình, n kép chu t vào nó đ hi n th l ộ ể ể ị ạ ử ổ ủ ấ ươ ng
trình.
47. D i chu t v Button “Xóa file đ quy” trong Toolbar r i n kép chu t trên nó đ ộ ề ồ ấ ệ ờ ộ ể
t o hàm x lý s ki n Click chu t trên nó. Khi c a s code hi n th , vi ạ ử ổ ự ệ ử ể ộ ị ế ơ t code đ n
gi n sau đây cho hàm : ả
//hàm xóa file theo pattern
private void tbFilesDelete_Click(object sender, EventArgs e)
{
//g i hàm x lý MenuItem có ch c năng t ng ng ử ứ ọ ươ ứ
mnuFilesDelete_Click(sender, e);
}
48. L p l i các b t các hàm x lý s ki n Click ậ ạ ướ c 40 và 41 nhi u l n đ t o và vi ề ầ ể ạ ế ự ệ ử
chu t cho các Button ch c năng còn l i trong Toolbar. Code c a các hàm nh sau : ứ ộ ạ ủ ư
//hàm đ m s file theo pattern ố ế
private void tbFilesCount_Click(object sender, EventArgs e)
{
//g i hàm x lý MenuItem có ch c năng t ng ng ử ứ ọ ươ ứ
mnuFilesCount_Click(sender, e);
}
//hàm xóa các file b nhi m virus exe.exe ễ ị
private void tbFileVirusDel_Click(object sender, EventArgs e)
{
//g i hàm x lý MenuItem có ch c năng t ng ng ử ứ ọ ươ ứ
mnuFileVirusDel_Click(sender, e);
}
Trang 28
//hàm tính đ sâu max ộ
private void tbFileDeepLen_Click(object sender, EventArgs e)
{
//g i hàm x lý MenuItem có ch c năng t ng ng ứ ử ọ ươ ứ
mnuFileDeepLen_Click(sender, e);
}
//hàm tính t ng kích th c các file ổ ướ
private void tbFilesSize_Click(object sender, EventArgs e)
{
//g i hàm x lý MenuItem có ch c năng t ng ng ứ ử ọ ươ ứ
mnuFilesSize_Click(sender, e);
}
//hàm hi n th thông tin tr giúp ị ể ợ
private void tbHelpHelp_Click(object sender, EventArgs e)
{
//g i hàm x lý MenuItem có ch c năng t ng ng ử ứ ọ ươ ứ
mnuHelpHelp_Click(sender, e);
}
//hàm hi n th thông tin v ch ng trình ề ươ ể ị
private void tbHelpAbout_Click(object sender, EventArgs e)
{
//g i hàm x lý MenuItem có ch c năng t ng ng ử ứ ọ ươ ứ
Trang 29
mnuHelpAbout_Click(sender, e);
}
49. Ch n menu Debug.Start Debugging đ d ch và ch y th ng d ng, n u máy báo ể ị ử ứ ụ ế ạ ọ
i cho đ n khi h t l ng trình l ỗ i thì tìm hi u và s a l ể ử ỗ ế ỗ ế i. Khi c a s chính ch ử ổ ươ
hi n th , hãy th t ng l nh trong MenuBar và trong Toolbar đ ki m tra k t qu . ả ể ể ử ừ ệ ế ể ị
VI.13 Xem xét code cho 5 class con và rút ra các k t lu n h u ích : ậ ữ ế
Tính th a kừ
ng đ i t ng cho phép ta t p trung vi t code dùng ế trong h ướ ố ượ ậ ế
chung cho nhi u ch c năng trong 1 class (cha), ch không c n l p l i trong ầ ậ ạ ứ ứ ề
t ng class (con) miêu t ừ ả ừ t ng ch c năng. ứ
t ng ch c năng, ta ch c n đ nh nghĩa 1 class con th a k class cha Đ miêu t ể ả ừ ừ ế ỉ ầ ứ ị
đã có r i override các hàm primitive, c th ta ch c n override các hàm sau : ụ ể ỉ ầ ồ
Hàm InitForm đ thi t l p chu i caption cho các đ i t ng giao di n. ể ế ậ ố ượ ỗ ệ
Hàm Prolog (n u c n) đ thi t l p giá tr đ u cho các thu c tính d li u. ế ầ ể ế ậ ữ ệ ị ầ ộ
Hàm Action đ miêu t công vi c x ly trên ph n t tìm đ c. ể ả ệ ử ầ ử ượ
M c dù các hàm template đ
Hàm Epilog (n u c n) đ th c hi n 1 s vi c k t thúc ch c năng. ố ệ ế ế ầ ể ự ứ ệ
c vi ặ ượ ế t trong class cha và g i các hàm primitive ọ
đ ượ ị ạ c đ nh nghĩa trong class cha (lúc này các class con ch a có), nh ng khi ch y ư ư
trên đ i t ng thu c class con nào, nó s kích ho t đ c đúng hàm primitive ố ượ ạ ượ ẽ ộ
M c dù các class ch c năng có nhi u thành ph n có t m v c public, protected,
đ c override trong class con đó (nh ượ ờ tính đa xạ).
ứ ự ề ầ ầ ặ
ng trình chính (Client) dùng các đ i t ng thông qua interface … nh ng ch ư ươ ố ượ
ICommand, interface này ch có 1 hàm ch c năng Show() nên ch ng trình ứ ỉ ươ
chính ch có th g i đ c hàm Show ch không th truy xu t đ ể ọ ượ ỉ ấ ượ ị ụ c d ch v gì ứ ể
khác c a các đ i t ng mà mình đang tham kh o t i. Đi u này th hi n r t rõ ố ượ ủ ả ớ ể ể ấ ề
Dùng macro [DllImport] trong th vi n
nét tính bao đóng và l ợ i ích c a nó. ủ
ư ệ System.Runtime.InteropServices để
ụ ủ chuy n 1 hàm API có s n trong th vi n l p trình c đi n thành 1 tác v c a 1 ư ệ ậ ổ ể ể ẵ
ng đ i t ng VC# có th g i các hàm API d class VC#, nh đó ng d ng h ờ ứ ụ ướ ố ượ ể ọ ễ
ng đ i t ng). dàng (nh ng theo c ch g i thông đi p c a h ơ ế ở ệ ủ ướ ư ố ượ