Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
313 KB
Nội dung
Trang 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 : Giúp SV thực hành để hiểu biết hầu hết tính chất khả lập trình hướng đối tượng VC# để xây dựng ứng dụng thực tế II Nội dung : Thiết kế trực quan cửa sổ ứng dụng FileManager theo đặc tả chi tiết Viết code cho hàm xử lý kiện thực chức quản lý hệ thống file chương trình III Chuẩn đầu : Sinh viên nắm vững dùng thành thạo qui trình kỹ thuật để thiết kế trực quan cửa sổ giao diện chương trình, thiết lập giá trị thuộc tính cho phần tử giao diện, khai báo hàm xử lý kiện cho kiện quan tâm đối tượng giao diện Sinh viên nắm vững sử dụng thành thạo tính chất lập trình hướng đối tượng tính thừa kế, bao đóng, đa xạ để xây dựng đoạn code tổng quát hóa IV Đặc tả chương trình FileManager : Chương trình phải cung cấp chức quản lý hệ thống file sau : duyệt tìm xóa file thỏa mãn pattern qui định từ thư mục bắt đầu người dùng qui định duyệt tìm xóa file *.exe virus exe.exe tạo từ thư mục bắt đầu người dùng qui định duyệt tìm phần tử có độ sâu sâu thư mục người dùng qui định Trang duyệt tìm tính số lượng file thư mục thỏa mãn pattern qui định từ thư mục bắt đầu người dùng qui định duyệt tìm tính tổng kích thước file thỏa mãn pattern qui định từ thư mục bắt đầu người dùng qui định V Phân tích : Để giúp người dùng thực chức trên, chương trình nên có menubar sau : Để giúp người dùng thực chức dễ dàng nhanh chóng hơn, chương trình nên có toolbar sau (mỗi icon toolbar giúp thực nhanh chức tương ứng chương trình) : Phân tích chức cần thực chương trình, ta thấy qui trình thực chức có công việc giống sau : cần 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 phần tử cần xử lý, hiển thị thông tin xử lý theo thời gian Thí dụ form có dạng sau : Trang cần đoạn code thực thuật giải duyệt phân cấp từ thư mục xác định người dùng để tìm tất phần tử thỏa mãn pattern qui định để xử lý Lưu ý chức qui định việc xử lý phần tử tìm hoàn toàn khác : chức xóa file xóa file, chức đếm số lượng tăng count đếm, … Sau phân tích chức chương trình nắm vững kiến thức thiết kế phần mềm hướng đối tượng, ta thấy để giải tốt chức chương trình dùng mẫu thiết kế phổ dụng có tên “Template method” với lược đồ class sau : Trang 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 //override primitive method InitForm() Prolog() Action() Epilog() CDeepLengthDlg //override primitive method InitForm() Prolog() Action() Epilog() thiết kế trực quan lần để tạo giao diện cho form giao diện tổng quát để người dùng xác định thư mục bắt đầu xử lý, chuỗi pattern nhận dạng phần tử cần xử lý, hiển thị thông tin xử lý theo thời gian Đặt tên class cho form CRecursiveBrowseDlg, thuộc tính dùng chung, hàm xử lý button Browse, button Start viết lần class CRecursiveBrowseDlg, ta gọi hàm template function, thí dụ hàm DuyetCay() miêu tả thuật giải duyệt phân cấp dùng chung cho chức xử lý hệ thống file Để thực chức năng, ta định nghĩa class CrecursiveBrowseDlg cần override hàm primitive InitForm, Prolog, Action, Epilog Trang VI Qui trình xây dựng chương trình VI.1 Qui trình điển hình để tạo icon đồ họa toolbar thể chức : Toolbar cửa sổ chứa nhiều button (icon), button cho phép thực chức ứng dụng Các button có kích thước nhau, nên kết hợp ảnh bitmap với button, nội dung ảnh gợi ý cho người dùng chức tương ứng (thí dụ ảnh dạng kéo gợi ý chức Cut, ) Công việc cần thực dùng trình soạn thảo đồ họa (Paint, CorelDraw, ) để thiết kế (vẽ) ảnh bitmap gợi ý cho chức button Toolbar Bạn vẽ hình bitmap hay dùng trình "Screen Capture" cắt icon có sẵn ứng dụng đo chạy dán vào vùng soạn thảo ảnh trình soạn thảo đồ họa Sau soạn xong ảnh, ta cất ảnh lên file dạng *.bmp Lưu ý ảnh phải có kích thước (thí dụ ta chọn 20*20) : - file FilesDelete.bmp chứa ảnh button (xóa file) - file FilesCount.bmp chứa ảnh button (đếm số lượng) - file FilesSize.bmp chứa ảnh button (tính tổng kích thước) - file DeepLen.bmp chứa ảnh button (tính độ sâu max) - file ExeVirusDel.bmp chứa ảnh button - file Help.bmp chứa ảnh button (trợ giúp chương trình) - file About.bmp chứa ảnh button (giới thiệu thông tin chương trình) (tìm diệt virus exe.exe) VI.2 Qui trình điển hình để xây dựng MenuBar cho cửa sổ chương trình : Chạy VS Net, chọn menu File.New.Project để hiển thị cửa sổ New Project Mở rộng mục Visual C# TreeView "Project Types", chọn mục Window, chọn icon "Windows Application" listbox "Templates" bên phải, thiết lập thư mục chứa Project listbox "Location", nhập tên Project vào textbox "Name:" (td FileManager), click button OK để tạo Project theo thông số khai báo Trang Form ứng dụng hiển thị cửa sổ thiết kế, việc thiết kế form trình lặp thao tác tạo mới/xóa/hiệu chỉnh thuộc tính/tạo hàm xử lý kiện cho đối tượng cần dùng form Nếu cửa sổ ToolBox chưa hiển thị chi tiết, chọn menu View.Toolbox để hiển thị (thường nằm bên trái hình) Click chuột vào button (Auto Hide) nằm góc phải cửa sổ ToolBox để chuyển chế độ hiển thị thường trực Duyệt tìm phần tử MenuStrip (trong nhóm Menu & Toolbars), chọn nó, drag vị trí form để tạo menubar cho cửa sổ chương trình Menubar tạo cửa sổ Menubar có menu trống có caption “Type Here” Click chuột vào chuỗi “Type Here” để thiết lập cursor nhập vào caption menu chương trình “File” Sau nhập xong caption cho menu, click chuột để chọn nó, cửa sổ thuộc tính menu hiển thị cửa sổ thuộc tính (thường nằm phải hình) Duyệt tìm hiệu chỉnh nội dung thuộc tính (Name) = mnuFile Chọn lại menu File, chứa MenuItem trống có caption “Type Here” : Click chuột vào chuỗi “Type Here” menu pop-up “File” để thiết lập cursor nhập vào caption MenuItem “Xóa file đệ quy” Sau nhập xong caption cho MenuItem, click chuột để chọn nó, máy hiển thị cửa sổ thuộc tính Ấn phải chuột MenuItem để hiển thị menu lệnh, chọn chức “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 xác định file bitmap dùng làm icon cho MenuItem Xem cửa sổ thuộc tính MenuItem “Xóa file đệ Trang quy” vừa tạo, duyệt tìm hiệu chỉnh nội dung thuộc tính (Name) = mnuFilesDelete Lặp lại bước để tạo MenuItem chức lại : - “Tính số lượng file đệ quy” có (Name) = mnuFilesCount - “Tính tổng kích thước file đệ quy” có (Name) = mnuFilesSize - “Tính độ sâu maximum thư mục” có (Name) = mnuFileDeepLen - “Diệt virus exe.exe” có (Name) = mnuFileVirusDel - “-“ có (Name) = tên mặc định Phần từ tự biến thành phân cách (để tạo nhóm chức menu pop-up) - “Exit” có (Name) = mnuFileExit 10 Lặp lại bước & để tạo menu Help với (Name) = mnuHelp gồm MenuItem chức sau : - “Trợ giúp” có (Name) = mnuHelpHelp - “Về chương trình…” có (Name) = mnuHelpAbout Sau thiết kế xong, cửa sổ có dạng y hình vẽ mục 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 vị trí form để tạo Toolbar cho cửa sổ chương trình Toolbar tạo cửa sổ Toolbar có Button trống hình : 12 Click chuột vào mũi tên xuống Button trống để hiển thị menu lệnh, chọn lệnh Button để tạo Button mới.Button có hình đồ họa mặc định Trong cửa sổ thuộc tính 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 xác Trang định file bitmap dùng làm icon cho Button ( ) Xem cửa sổ thuộc tính Button vừa tạo, duyệt tìm hiệu chỉnh thuộc tính (Name) = tbFileDelete 13 Lặp lại bước 12 nhiều lần để tạo button lại : - 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 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ó class miêu tả chức mà chương trình cung cấp Chi tiết thực class chức cần che dấu phần lại chương trình Để giải vấn đề tốt nhất, ta định nghĩa interface sử dụng chung cho class chức năng, interface có tên Icommand chứa hàm dịch vụ : void Show(); //hiển thị form chức đề người dùng làm việc 14 Để định nghĩa interface, ta dời chuột phần tử gốc Project cửa sổ “Solution Explorer”, ấn phải chuột vào để hiển thị menu lệnh, chọn chức Add.New Item để hiển thị cửa sổ “Add New Item”, chọn mục “Interface”, hiệu chỉnh tên interface ICommand.cs, chọn button Add để máy tạo interface 15 Cửa sổ soạn code cho interface ICommand hiển thị, ta định nghĩa interface đơn giản sau : namespace FileManager { Trang interface ICommand { void Show(); //hiển thị form chức để người dùng làm việc với } } VI.5 Qui trình điển hình để xây dựng trực quan Dialog Box : Giả sử ta cần form tổng quát chứa đối tượng giao diện sau để phục vụ chung cho tất chức chương trình FileManager : Qui trình điển hình để xây dựng trực quan Form (Dialog Box) gồm bước thao tác sau : 16 Dời chuột phần tử gốc Project cửa sổ “Solution Explorer”, ấn phải chuột vào để hiển thị menu lệnh, chọn chức 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 CRecursiveBrowseDlg.cs, chọn button Add để máy tạo form 17 Form tạo hiển thị cửa sổ thiết kế, việc thiết kế form trình lặp thao tác tạo mới/xóa/hiệu chỉnh thuộc tính/tạo hàm xử lý kiện cho đối tượng cần dùng form Trang 10 18 Thay đổi chừng kích thước form cho đủ lớn hầu chứa đủ đối tượng giao diện form hình vẽ 19 Nếu cửa sổ ToolBox chưa hiển thị chi tiết, chọn menu View.Toolbox để hiển thị (thường nằm bên trái hình) Click chuột vào button (Auto Hide) nằm góc phải cửa sổ ToolBox để chuyển chế độ hiển thị thường trực 20 Duyệt tìm phần tử Label (trong nhóm Common Controls), chọn nó, dời chuột vị trí trái form vẽ với kích thước mong muốn Vì phần tử tổng quát để class override nên ta không cần thiết lập nội dung cụ thể cho thuộc tính Text nó, nhiên để class 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 vị trí Label vừa vẽ vẽ với kích thước mong muốn Hiệu chỉnh 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ị trí bên phải TextBox vừa vẽ vẽ 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 bước 20, 21, 22 để vẽ Label có (Name) = lblPattern, Modifiers = protected, TextBox có (Name) = txtPattern, Modifiers = protected, button có (Name) = btnStart, Modifiers = protected Bạn dùng phương pháp nhân vô tính để tạo phần tử giống phần tử có, thí dụ bạn chọn đối tượng vẽ (Label, TextBox, Button), copy chúng paste vào vị trí mới, dời vị trí thay đổi kích thước phần tử 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ị trí TextBox txtStartDir vẽ với kích thướ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ị trí Label vừa vẽ vẽ với kích thước mong muốn Hiệu chỉnh thuộc tính (Name) = lbOutput, Modifiers = protected Sau thiết kế form xong, Form có dạng theo yêu cầu VI.6 Định nghĩa hàm xử lý kiện cần thiết đối tượng giao diện : Trang 15 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 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 phục vụ đếm số lượng file đệ quy : 34 Dời chuột phần tử gốc Project cửa sổ “Solution Explorer”, ấn phải chuột vào để hiển thị menu lệnh, chọn chức Add.Class để hiển thị cửa sổ Trang 16 “Add New Item”, chọn mục “Class”, hiệu chỉnh tên class CFilesCountDlg.cs, chọn button Add để máy tạo class 35 Khi cửa sổ soạn code cho class CFilesCountDlg hiển thị, hiệu chỉnh nội dung class sau : using System; using System.Collections.Generic; using System.Text; namespace FileManager { class CFilesCountDlg : CRecursiveBrowseDlg { //định nghĩa thuộc tính liệu cần dùng private int dcount; private int fcount; //override hàm InitForm public override void InitForm() { //hiệu chỉnh chuỗi caption cho phần tử giao diện this.Text = "Chức đế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 đếm :"; this.btnBrowse.Text = "Browse"; this.btnStart.Text = "Start"; } //override hàm Prolog Trang 17 public override void Prolog() { fcount = dcount = 0; } //override hàm Action để thực đếm số thư mục 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 phục vụ tính tổng kích thước file đệ quy : 36 Dời chuột phần tử gốc Project cửa sổ “Solution Explorer”, ấn phải chuột vào để hiển thị menu lệnh, chọn chức Add.Class để hiển thị cửa sổ “Add New Item”, chọn mục “Class”, hiệu chỉnh tên class CFilesSizeDlg.cs, chọn button Add để máy tạo class Trang 18 37 Khi cửa sổ soạn code cho class CFilesSizeDlg hiển thị, hiệu chỉnh nội dung class 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 thuộc tính 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 ); //override hàm InitForm public override void InitForm() { Trang 19 //hiệu chỉnh chuỗi caption cho phần tử giao diện this.Text = "Chức tính tổng kích thướ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 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 tổng kích thướ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); } else { //file FileInfo fi = new FileInfo(fname); Trang 20 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 phục vụ tính tổng độ sâu max thư mục : 38 Dời chuột phần tử gốc Project cửa sổ “Solution Explorer”, ấn phải chuột vào để hiển thị menu lệnh, chọn chức Add.Class để hiển thị cửa sổ “Add New Item”, chọn mục “Class”, hiệu chỉnh tên class CDeepLengthDlg.cs, chọn button Add để máy tạo class 39 Khi cửa sổ soạn code cho class CDeepLengthDlg hiển thị, hiệu chỉnh nội dung class sau : using System; using System.Collections.Generic; using System.Text; namespace FileManager Trang 21 { class CDeepLengthDlg : CRecursiveBrowseDlg { //định nghĩa thuộc tính liệu cần dùng int DeepLength; String path; //override hàm InitForm public override void InitForm() { //hiệu chỉnh chuỗi caption cho phần tử giao diện this.Text = "Chức tính độ sâu sâu 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 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 tính độ sâu max căy thư mực public override void Action(String fname, byte fop) { //tách đường dẫn phần tử thành thành phần rời rạc string[] parts = fname.Split('\\'); Trang 22 if (parts.Length > DeepLength) { //nếu độ sâu thành phần hành lớn 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 sau max la : "); lbOutput.Items.Add(path); } } //hết class } //hết namespace VI.11 Định nghĩa class phục vụ xóa file bị nhiễm virus exe.exe : 40 Dời chuột phần tử gốc Project cửa sổ “Solution Explorer”, ấn phải chuột vào để hiển thị menu lệnh, chọn chức Add.Class để hiển thị cửa sổ “Add New Item”, chọn mục “Class”, hiệu chỉnh tên class CExeVirusDelDlg.cs, chọn button Add để máy tạo class 41 Khi cửa sổ soạn code cho class CExeVirusDelDlg hiển thị, hiệu chỉnh nội dung class sau : using System; using System.Collections.Generic; using System.Text; using System.IO; Trang 23 namespace FileManager { class CExeVirusDelDlg : CrecursiveBrowseDlg { //override hàm InitForm public override void InitForm() { //hiệu chỉnh chuỗi caption cho phần tử giao diện this.Text = "Chức xóa 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 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 FileInfo fi = new FileInfo(fname); if (fi.Length == 61440) { //nếu kích thước file = 61440 Trang 24 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 42 Duyệt tìm mục Form1.cs cửa sổ “Solution Explorer” miêu tả cửa sổ chương trình, ấn phải chuột vào để hiển thị menu lệnh, chọn lệnh “View Code” để hiển thị cửa sổ soạn mã nguồn class Form tương ứng Thêm lệnh định nghĩa thuộc tính liệu sau vào đầu class Form1 : ICommand dlg; //tham khảo đến form chức mà người dùng muốn dùng 43 Duyệt tìm mục Form1.cs cửa sổ “Solution Explorer” miêu tả cửa sổ chương trình, ấn kép chuột vào để hiển thị lại cửa sổ chương trình 44 Click chuột vào menu File để hiển thị MenuItem Dời chuột MenuItem “Xóa file đệ quy” ấn kép chuột để tạo hàm xử lý kiện Click chuột Khi cửa sổ code hiển thị, viết code đơn giản sau cho hàm : //hàm xóa file theo pattern private void mnuFilesDelete_Click(object sender, EventArgs e) { //tạo Form xóa file theo pattern hiển thị để người dùng làm việc dlg = new CFilesDeleteDlg(); Trang 25 dlg.Show(); } 45 Lập lại bước 40 41 nhiều lần để tạo viết hàm xử lý kiện Click chuột cho MenuItem chức lại Code hàm sau : //hàm đếm số file theo pattern private void mnuFilesCount_Click(object sender, EventArgs e) { //tạo Form đếm số file theo pattern hiển thị để người dùng làm việc dlg = new CFilesCountDlg(); dlg.Show(); } //hàm xóa file bị nhiễm virus exe.exe private void mnuFileVirusDel_Click(object sender, EventArgs e) { //tạo Form xóa virus hiển thị để 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 hiển thị để người dùng làm việc dlg = new CDeepLengthDlg(); dlg.Show(); Trang 26 } //hàm tính tổng kích thước file private void mnuFilesSize_Click(object sender, EventArgs e) { //tạo Form tính tổng kích thước file theo pattern //và hiển thị để 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 chưa thực!"); } //hàm hiển thị thông tin chương trình private void mnuHelpAbout_Click(object sender, EventArgs e) { MessageBox.Show("Xin lỗi, chức chưa thực!"); } 46 Duyệt tìm mục Form1.cs cửa sổ “Solution Explorer” miêu tả cửa sổ chương trình, ấn kép chuột vào để hiển thị lại cửa sổ chương trình Trang 27 47 Dời chuột Button “Xóa file đệ quy” Toolbar ấn kép chuột để tạo hàm xử lý kiện Click chuột Khi cửa sổ code hiển thị, viết code đơn giản sau 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 tương ứng mnuFilesDelete_Click(sender, e); } 48 Lập lại bước 40 41 nhiều lần để tạo viết hàm xử lý kiện Click chuột cho Button chức lại Toolbar Code hàm 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 tương ứng mnuFilesCount_Click(sender, e); } //hàm xóa 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 tương ứng mnuFileVirusDel_Click(sender, e); } //hàm tính độ sâu max Trang 28 private void tbFileDeepLen_Click(object sender, EventArgs e) { //gọi hàm xử lý MenuItem có chức tương ứng mnuFileDeepLen_Click(sender, e); } //hàm tính tổng kích thước file private void tbFilesSize_Click(object sender, EventArgs e) { //gọi hàm xử lý MenuItem có chức 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 tương ứng mnuHelpHelp_Click(sender, e); } //hàm hiển thị thông tin chương trình private void tbHelpAbout_Click(object sender, EventArgs e) { //gọi hàm xử lý MenuItem có chức tương ứng mnuHelpAbout_Click(sender, e); } Trang 29 49 Chọn menu Debug.Start Debugging để dịch chạy thử ứng dụng, máy báo lỗi tìm hiểu sửa lỗi hết lỗi Khi cửa sổ chương trình hiển thị, thử lệnh MenuBar Toolbar để kiểm tra kết VI.13 Xem xét code cho class rút kết luận hữu ích : Tính thừa kế hướng đối tượng cho phép ta tập trung viết code dùng chung cho nhiều chức class (cha), không cần lập lại class (con) miêu tả chức Để miêu tả chức năng, ta cần định nghĩa class thừa kế class cha có override hàm primitive, cụ thể ta cần override hàm sau : Hàm InitForm để thiết lập chuỗi caption cho đối tượng giao diện Hàm Prolog (nếu cần) để thiết lập giá trị đầu cho thuộc tính liệu Hàm Action để miêu tả công việc xử ly phần tử tìm Hàm Epilog (nếu cần) để thực số việc kết thúc chức Mặc dù hàm template viết class cha gọi hàm primitive định nghĩa class cha (lúc class chưa có), chạy đối tượng thuộc class nào, kích hoạt hàm primitive override class (nhờ tính đa xạ) Mặc dù class chức có nhiều thành phần có tầm vực public, protected, … chương trình (Client) dùng đối tượng thông qua interface ICommand, interface có hàm chức Show() nên chương trình gọi hàm Show truy xuất dịch vụ khác đối tượng mà tham khảo tới Điều thể hiển rõ nét tính bao đóng lợi ích Dùng macro [DllImport] thư viện System.Runtime.InteropServices để chuyển hàm API có sẵn thư viện lập trình cổ điển thành tác vụ class VC#, nhờ ứng dụng hướng đối tượng VC# gọi hàm API dễ dàng (nhưng theo chế gởi thông điệp hướng đối tượng) [...]... 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); } //hàm tính độ sâu max Trang 28 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... chính của chương trình, ấn kép chuột vào nó để hiển thị lại cửa sổ chính của chương trình Trang 27 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ó... tương ứng mnuFilesDelete_Click(sender, e); } 48 Lập lại các bước 40 và 41 nhiều lần để tạo và viết các hàm xử lý sự kiện Click 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... tả cửa sổ chính của chương trình, ấn kép chuột vào nó để hiển thị lại cửa sổ chính của chươ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... //tạo Form xóa file theo pattern và hiển thị nó để người dùng làm việc dlg = new CFilesDeleteDlg(); Trang 25 dlg.Show(); } 45 Lập lại các bước 40 và 41 nhiều lần để tạo và viết các hàm xử lý sự kiện Click 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... 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 FileInfo fi = new FileInfo(fname); if (fi.Length == 61440) { //nếu kích thước file = 61440 Trang 24 File. Delete(fname); lbOutput.Items.Add("Delete " + fname); } } } //override hàm Epilog public... 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. .. 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ị... 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... cửa sổ Trang 16 “Add New Item”, chọn mục “Class”, hiệu chỉnh tên class là 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 ... xử lý hệ thống file Để thực chức năng, ta định nghĩa class CrecursiveBrowseDlg cần override hàm primitive InitForm, Prolog, Action, Epilog Trang VI Qui trình xây dựng chương trình VI.1 Qui trình. .. ảnh trình soạn thảo đồ họa Sau soạn xong ảnh, ta cất ảnh lên file dạng *.bmp Lưu ý ảnh phải có kích thước (thí dụ ta chọn 20*20) : - file FilesDelete.bmp chứa ảnh button (xóa file) - file FilesCount.bmp... (trợ giúp chương trình) - file About.bmp chứa ảnh button (giới thiệu thông tin chương trình) (tìm diệt virus exe.exe) VI.2 Qui trình điển hình để xây dựng MenuBar cho cửa sổ chương trình : Chạy VS