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 ơ ế ở ệ ủ ướ ư ố ượ