Tài liệu tham khảo chuyên ngành tin học Bóc tách thông tin trên Web
Trang 1Phần II Công nghệ phát triển NET Framework 9
Chương 1: Kiến trúc NET 9
2.3 Các ưu điểm ngôn ngữ C# 14
Chương3: Phát triển ứng dụng với Windows Form 16
3.1 Tạo một Windows Form đơn giản 16
3.2 Dùng kéo thả trong Windows 20
3.3.Tạo ứng dụng Windows Form khác 27
3.3.1.Tạo giao diện cho ứng dụng 28
3.3.2.Quản lý điều khiển TreeView 29
3.3.3.Quản lý sự kiện trên điều khiển cây 32
3.3.4.Quản lý sự kiện nhấn chọn nút xóa ( Delete ) 37
3.3.5 Tạo siêu liệu XML bằng chú thích 49
Chương 4:Kết nối CSDL 52
4.1.Cơ sở dữ liệu và ngôn ngữ truy vấn SQL 52
4.2.Kiến trúc ADO.NET 52
4.3.1 DataProvider có 5 loại đối tượng: 53
4.3.2 DataProvider có hai trình cung cấp dữ liệu: 54
4.3.3 Đối tượng SqlConnection và SqlCommand 54
4.3.4 Đối tượng DataAdapter 55
4.4.1.Đối tượng DataTable và DataColumn 56
4.4.2 Đối tượng DataRelation 57
4.4.3.Đối tượng DataView 57
Trang 24.4.4.Đối tượng DataGridview 57Phần III Phát triển 1 RSS Reader 59Tài liệu tham khảo 63
Trang 3PhầnI:Tổng quan về RSS
1.Lời nói đầu
Rss coi là chìa khóa cho việc chia sẻ thông tin Một trong những điều kì diệu nhấtcủa web là khả năng đem đến cho người dùng những thông tin cập nhật nhật mớinhất vào bất kì thời điểm nào, không chỉ các tiêu đề tin tức mà cả nội dung mớicập nhật của toàn bộ trang web Vậy điều gì đóng vai trò quyết định tới khả năngthể hiện thông tin trên trang web Làm thế nào để các trang web có thể cập nhậtthông tin mới nhất Công nghệ RSS(tạm dịch là Rich Site Summary, tạm dịch:Tóm lược website đa thông tin) đóng vai trò lớn đối với điều tuyệt vời này RSScó thể không phải công nghệ đầu tiên mà bạn nghĩ tới khi nói đến thành phầnchính của web, tuy nhiên nó làm cho các thông điệp và tin tức được thể hiện vớitốc độ của ánh sáng hoặc ít ra tốc độ mà chiếc modem của bạn có thể phục vụđược.
2 RSS là gì?
RSS là định dạng tập tin thuộc họ XML dùng trong việc chia sẻ tức Webđược nhiều bởi website tin tức và weblog Chữ viết tắt RSS dùng để chỉ các chuẩnsau:
- Rich Site Summary (RSS 0.91).- RDF Site Summary (RSS 0.9 và 1.0).- Really Simple Sydication (RSS 2.0.0).
Công nghệ RSS cho phép người dùng Internet có thể đặt mua thông tin từcác websites có khả năng cung cấp RSS (RSS feeds) Chúng thường là các site cónội dung thay đổi và được thêm vào thường xuyên, để có thể dùng công nghệ này,các người quản trị site đó tạo ra hay quản lý một phần mềm chuyên dụng (như mộthệ thống quản lý nội dung- content management system- CMS), với định dạngXML mà máy có thể đọc được, có thể biểu diễn các bài tin mới thành một danhsách, với một hoặc hai dòng cho mỗi bài tin và một liên kết đến bài tin đầy đủ đó.Khác với việc mua nhiều ấn bản của các tờ báo hay tạp chí in giấy, hầu hết việcmua RSS là miễn phí.
Trang 4Định dạng RSS là cung cấp nội dung web và tóm lược nội dung web cùngvới các liên kết đến phiên bản đầy đủ của nội dung tin đó và các siêu dữ liệu(meta-data) khác Thông tin này được cung cấp dưới dạng một tập tin XML được
gọi là một RSS feed , webfeed, RSS stream, RSS channel Cùng với việc hỗ trợ
cung cấp chia sẻ thông tin, RSS cho phép những độc giả thường xuyên củawebsite có thể theo dõi các cập nhật của site đó cùng một aggregator.
Chú thích: Một chương trình gọi là một feed reader hay aggregator có thể kiểm
tra xem một website có hỗ trợ RSS cho người dùng không và, nếu có, hiển thịnhững bài viết cập nhật nhất mà nó tìm thấy từ website đó.
3 Lịch sử ra đời RSS.
RDF (Resource Description Framework) Site Summary, phiên bản đầu tiêncủa RSS, được tạo bởi Dan Libby của Netscape vào tháng 3-1999 dùng cho cổngđiện tử My Netscape Phiên bản này trở thành RSS 0.9 Vào tháng 7-1999, đáp trảlại lời đề nghị và góp ý, Libby đưa ra bản phác thảo ban đầu tên là RSS 0.91 (RSSviết tắt của Rich Site Summary), nhằm đơn giản hóa định dạng và tích hợp một sốphần trong định dạng scriptingNews của Winter Từ đó Libby đề xuất định dạngtương tự RSS 1.0 thông qua các gọi là Future Document.
Chẳng bao lâu Netscape không còn tập trung RSS/XML, bỏ rơi định dạngđó Một nhóm làm việc và danh sách địa chỉ email, RSS-DEV, được thành lập bởinhiều người dùng và cộng đồng XML để tiếp tục phát triển nó Cùng thời điểmWinter đưa ra phiên bản sửa đổi RSS 0.91 cho website Userland, vì nó đang đượcdùng trong sản phẩm của họ Ông ta cho rằng đặc tả kĩ thuật của RSS 0.91 là tàisản riêng của công ty ông, Userland Software Vì chẳng có bên nào có tuyên bốchính thức về tên của định dạng cho nên bây giờ có nhiều tên gọi.
Nhóm RSS-DEV tiếp tục đưa ra RSS 1.0 vào tháng 12-2000 dựa trên bản phácthảo góp ý sửa đổi cho bản đặc tả kĩ thuật đưa ra bởi Tristan Louis Giống với RSS0.9 (không phải 0.91) bản này dựa vào đặc tả RDF, nhưng có tính khả mở hơn, vớinhiều mục đích bắt nguồn từ các từ vựng metadata chuẩn như Dublin Core.
Mười chin ngày sau, Winer cho ra phiên bản RSS 0.92, có một vài chỉnh sửa cótính tương thích với các thay đổi của RSS 0.91 dựa trên cùng bản góp ý Vào
Trang 5tháng 4-2001, ông đưa ra bản phác thảo RSS 0.93 mà hầu hết là giống với bảnRSS 0.92 Bản thảo 0.94 ra đời vào tháng 8 và thêm vào thuộc tính (attribute) typecho thành phần (element) description.
Vào tháng 9-2002, Winer cho ra bản cuối cùng của RSS 0.92, bây giờ gọi làRSS 2.0 và nhấn mạnh “Really Simple Syndication” là nghĩa của ba kí tự viết tắtRSS Đặc tả kĩ thuật của RSS 2.0 loại bỏ thuộc tính type từng được thêm vàotrong RSS 0.94 và co phép người dùng có thể thêm vào thành phần mở rộng củaXML namespaces Nhiều phiên bản của RSS 2.0 đã được ra đời, nhưng chỉ số củaphiên bản thì vẫn không thay đổi.
Vào tháng 11-2002, thời báo NewYork Time đã bắt đầu cung cấp cho người đọckhả năng mục các tin có hỗ trợ RSS feeds liên quan đến nhiều chủ đề khác nhau.Vào tháng 1-2003 David Winer đã gọi việc dùng RSS của thời báo NewYorkTime là một “điểm nhấn” trong việc đưa định dạng RSS trở thành một chuẩn.Vào tháng 7-2003, Winer và Userland Software được cấp quyền sở hữu của đặc tảkĩ thuật RSS 2.0, bởi Trung tâm Berkman về xã hội và Internet của Harvard.
e Version RSS 2.0: Tạo bởi UserLand, mođun hóa các thành phần; sử dụng trongnhiều mục đích, chia sẻ nhiều siêu dữ liệu.
Trang 65 Ứng dụng của RSS.
a WebBlog (hay gọi tắt blog): bắt đầu xuất hiện và bung nổ trong đa số ngườidùng Internet khoảng 1 đến 2 năm Blog cho phép người dùng, cá nhân hoặcnhóm, có thể đưa thông tin mạng với mọi chủ đề, thông thương có liên quan đếnkinh nghiệm hoặc ý kiến cá nhân Người sử dụng RSS khi tạo ra các blog để việccập nhật các tệp blog trở nên dễ dàng hơn và giúp người đọc có thể nhận thấy sựthay đổi
b Chia sẻ thông tin diện rộng: Việc cung cấp thông tin rộng rãi cho nhiều chủ thểtruyền thông là điều khá phổ biến trên truyền hình và các loại hình thông tấn báochí khác Đối với mạng lưới báo chí và truyền hình, việc tận dụng các thông tinkiểu này thường có giá thành rẻ hơn và cũng dễ dàng hơn cho việc tự tạo ra cácnội dung Thêm vào đó công chúng dễ dàng nhận biết và theo dõi các thông tinđược quảng bá rộng rãi.
Các website sử dụng các thông tin được cung cấp rộng rãi cho các chủ thểkhác nhau với lý do tương tự Các chủ thể có uy tín và danh tiếng thường là ngườikhởi tạo, tổ chức và phân phối các dữ liệu dùng chung Một vài dữ liệu đượctruyền tải trên web có thể được chia sẻ miễn phí giữa các website, tuy nhiên cũngcó nhiều trường hợp các thông tin này được một nhà phân phối bán lại cho các chủthể có nhu cấu.
Nhiều website sử dụng RSS như một công cụ để cập nhật các thông tin mớiliên quan tới trang web hoặc các sản phẩm mới Lấy ví dụ một website đăng tảicác thông tin về một sản phẩm cụ thể nào đó, chẳng hạn như Linux, có thể tự độngthu thập các dữ liệu RSS từ nhiều website về Linux khác nhằm cung cấp chokhách hàng một kho thông tin chưa đầy các thông tin cập nhật về hệ điều hànhnày Trong trường hợp này sử dụng RSS sẽ tiết kiệm thời gian hơn nhiều so vớiviệc webmaster truy cập từng website Linux và cập nhật thông tin một cách thủcông.
c Tập hợp thông tin.
Khi đề cập RSS, sự tập hợp thông tin có liên quan mật thiết tới khái niệmchia sẻ thông tin trên diện rộng Nếu một website thu thập nhiều RSS và sau đóphân phối lại chúng , điều đó đồng nghĩa với sự tập hợp thông tin.
Trang 7Các site khác nhau sử dụng các phương pháp tập hợp thông tin khác nhau.Một vài site có thể lựa chọn các nguồn RSS cho mục tiêu duy nhất là cung cấpchúng cho người sử dụng Các site khác lại tập hợp thông tin để truyền tải dữ liệuRSS đến các website khác nhằm giúp các site này tìm kiếm từ RSS các dữ liệu màhọ muốn hiển thị trên web.
Một website tập hợp thông tin cũng có thể tích hợp một số tính năng cánhân để giúp bạn tìm kiếm thông tin một cách nhanh chóng và dễ dàng hơn.Chẳng hạn, site đó có thể dấu các nguồn RSS mà bạn đã truy cập Cũng có thể cácnguồn RSS sẽ được phân loại nhằm tăng cường tính cấu trúc và hệ thông của toànbộ website.
d Sức mạnh của RSS.
Một trong những lý do quan trọng nhất cho việc ứng dụng RSS là khả năngcủa nó trong việc tiếp cận với người dùng mà không cần phải phát động một chiếndịch quảng cáo rầm rộ và tốn kém Nếu bạn có thông tin hấp dẫn trên web củabạn, RSS có thể giúp bạn giới thiệu và truyền tải tới người dùng và thu hút sựquan tâm của khách hàng.
Đối với những ai chỉ đơn thuần sử dụng Internet và không cần tới tính năngquảng cáo của RSS, công nghệ này giúp họ tìm kiếm các thông tin quan trọng quacác nguồn RSS, thậm chí từ các website mà họ ít khi hoặc không bao giờ truynhập.
6 Một số tiện ích đọc tin RSS
Abilon: Chương trình có tốc độ xử lý nhanh này cho phép bạn lựa chọnnhiều cách hiển thị và tích hợp một trình duyệt dạng thẻ (tab) Abilon có khả năngnhanh chóng đồng bộ và trích xuất các tập tin OPML , dùng để chuyển danh sáchnguồn tin hiện có sang một trình đọc RSS khác.
RssReader: Bạn có thể xem tất cả các nội dung của một nguồn tin hay một nhómnguồn tin trong một cửa sổ có khả năng cuộn.Thực hiện đồng bộ tập tin OPMLdung lượng lớn còn chậm.
Feedreader: chỉ hiển thị nội dung một tin tại cùng một thời điểm.Thực hiệnđồng bộ tập tin OPML dung lượng lớn còn chậm.
Trang 87 RSS.NET là gì.
RSS là mã nguồn mở lớp thư viện NET cho RSS feeds Nó cung cấp kiểuđối tượng dùng lại cho việc phân tích và viết RSS feeds RSS.NET tương thíchbới các phiên bản của RSS 0.9, 0.91, 0.92, 2.0.1 đều xây dựng được.
8 Ai sử dụng RSS.NET.
Sử dụng RSS.NET trong thương mại, cài đặt sẵn, mã nguồn mở, cho nhữngngười phát triển phần mềm sử dụng RSS.NET Nhưng người sử dụng đầu cuốikhông thể dùng RSS.NET đúng hướng.
Trang 9Phần II Công nghệ phát triển NET Framework.
Chương 1: Kiến trúc NET.
1.1.Nền tảng NET
Khi Microsoft công bố C# vào tháng 7 năm 2000, việc khánh thành nó chỉ làmootj phần trong số rất nhiều mà sự kiện mà nền tảng NET được công bố Nềntảng Net là bộ khung phát triển ứng dụng mới, nó cung cấp một lập trình giaodiện ứng dụng (Application Programming Interface-API) mới mẻ cho các dịch vụvà hệ điều hành của Windows, cụ thể là Windows 2000, nó cũng mang nhiều kĩthuật khác nổi bật của Microsoft suốt từ những năm 90 Trong số đó có các dịchvụ COM+, công nghệ APS, XML và thiết kế đối tượng, hỗ trợ các giao thức dịchvụ hỗ trợ Web mới như SOAP, WSDL và UDDL với trọng tâm là Internet, tất cảđược tích hợp trong kiến trúc DNA.
Nền tảng Net gồm 4 nhóm sau:
1 Một tập hợp các ngôn ngữ, bao gồm C# và Visual Basic Net; một tập cáccông cụ phát triển bao gồm Visual Studio Net; một tập đầy đủ các thư việnphục vụ cho việc xây dựng các ứng dụng web, các dịch vụ web và các ứngdụng Windows; còn có CLR-Common Language Runtime: (ngôn ngữ thựcthi dùng chung) để thực thi các đối tượng được xây dựng trên bộ khung này.2 Một tập các Sever xí nghiệp Net như SQL 2000, Exchange 2000, BizTalk2000,…chúng cung cấp các chức năng cho việc lưu trữ dữ liệu quan hệ, thưđiện tử, thương mại điện tử B2B,…
3 Các dịch web thương mại miễn phí, dự án Hailstorm; nhà phát triển có thểdùng các dịch vụ này để xây dựng các ứng dụng đòi hỏi về tri thức địnhdanh người dùng…
4 .Net cho các thiết bị không phải PC như điện thoại(cell phone), thiết bịgame.
Trang 101.2 NET Framework.
.Net hỗ trợ tích hợp ngôn ngữ, tức là ta có thể kế thừa các lớp, bắt các biệtlệ, đa hình thông qua nhiều ngôn ngữ .Net Framework thực hiện các được việcnày nhờ vào đặc tả Common Type System-CTS(hệ thống kiểu chung) mà tất cảcác thành phần Net đều tuân theo Ví dụ mọi thứ trong Net đều là đối tượng; thừakế từ lớp gốc System.Object.
Ngoài ra Net còn bao gồm Common Language Specification-CLS(đặc tảngôn ngữ chung) Nó cung cấp các qui tắc cơ bản mà ngôn ngữ muốn tích hợpphải thỏa mãn CLS chỉ ra các yêu cầu tối thiểu của ngôn ngữ hỗ trợ Net Trìnhbiên dịch tuân theo CLS sẽ tạo các đối tượng có thể tương hợp với các đối tượngkhác Bộ thư viện lớp với khung ứng dụng (Framework Class Library-FCL) có thểdùng bởi bất kì ngôn ngữ nào tuân theo CLS.
.Net Framework nằm ở tầng trên của hệ điều hành (bất kì hệ điều hành nàokhông chỉ là Windows) Net Framewok bao gồm:
- Bốn ngôn ngữ chính: C#, VB.Net, C++, và Jscript.Net.
- Common Language Runtime-CLR, nền tảng hướng đối tượng cho pháttriển ứng dụng Windows và web mà các ngôn ngữ có thể chia sẻ sửdụng.
- Bộ thư viện Framework Class Library-FCL
Hình 1 Kiến trúc khung ứng dụng Net
Trang 11Thành phần quan trọng nhất của Net là CLR, nó cung cấp môi trường choứng dụng thực thi, CLR là một máy ảo, tương tự như máy ảo Java CLR kích họatđối tượng, thực hiện kiểm tra bảo mật, cấp phát bộ nhớ thực thi và thu dọn chúng.Hình 1 Tầng trên của CLR bao gồm:
- Các lớp cơ sở
- Các lớp dữ liệu và XML.
- Các lớp cho dịch vụ web, web form, và windows form.
Các lớp này gọi chung FCL, Framework Class Library, cung cấp APIhướng đối tượng cho tất cả các chức năng của Net Framework (hơn 5000 lớp).Các lớp cơ sở tương tự với các lớp trong Java Các lớp này hỗ trợ các thao tácnhập xuất, thao tác chuỗi, văn bản, quản lý bảo mật truyền thông mạng, quản lýtiến trình và các chức năng tổng hợp khác…
Trên mức này là lớp dữ liệu và XML Lớp dữ liệu hỗ trợ việc thao tác cácdữ liệu trên cơ sở dữ liệu Các lớp này bao gồm các lớp SQL (Structure QueryLanguage: ngôn ngữ truy vấn có cấu trúc) cho phép ta thao tác dữ liệu thông quamột SQL chuẩn Ngoài ra còn có một tập các lớp goi là ADO.Net cũng cho phépthao tác dữ liệu Lớp XML hỗ trợ thao tác XML, tìm kiếm và diễn dịch XML.Trên lớp dữ liệu và XML và các hỗ trợ xây dựng các ứng dụng Windows(Windons forms), ứng dụng web (Web forms), dịch vụ web (Web Services).
1.3.Biên dịch và ngôn ngữ trung gian (MSIL).
Với Net chương trình không biên dịch thành tập tin thực thi, mà biên dịchngôn ngữ trung gian (MSIL- Microsoft Intermediate Language, viết tắt là IL), sauđó chúng được CLR thực thi Các tập tin IL biên dịch từ C# đồng nhất với các tậptin IL biên dịch từ ngôn ngữ Net khác.
Khi biên dịch dự án, mã nguồn C# được chuyển thành tập tin IL lưu trên đĩa.Khi chạy chương trình thì IL được biên dịch (hay thông dịch) một lần nữa bằngtrình Just In Time –JIT, khi nầy két quả là mã máy và bộ xử lý được thực thi.Trình biên dịch JIT chỉ chạy khi có yêu cầu Khi mọi phương thức được gọi, JITphân tích IL và sinh ra mã máy tối ưu cho từng loại máy JIT có thể nhận biết mã
Trang 12nguồn đã được biên dịch chưa, để có thể chạy ngay ứng dụng hay phải biên dịchlại.
CLS có nghĩa là các ngôn ngữ Net cùng sinh ra mã IL Các đối tượng đượctạo theo một ngôn ngữ nào đó sẽ được truy cập và thừa kế bởi các đối tượng củangôn ngữ khác Vì vậy ta có tạo được một lớp cơ sở trong Vb.Net và thừa kế nó từC#.
Trang 13Chương 2 Ngôn ngữ C#
2.1 Giới thiệu ngôn ngữ C#
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấy kiểudữ liệu được xây dựng sẵn Tuy nhiên ngôn ngữ C# có ý nghĩa cao khi nó thực thinhững khái niệm lập trình hiện đại C# bao gồm tất cả những hỗ trợ cho cấu trúc,thành phần, lập trình hướng đối tượng Những tính chất đó hiện diện trong ngônngữ lập trình hiện đại Và ngôn ngữ C# hội tụ những điều kiện như vậy, hơn nữanó được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java.Ngôn ngữ C# được phát triển bởi đội ngũ kỹ sư của Microsoft, trong đó người dẫnđầu là Anders Hejlsberg và Scott Wiltamuth Cả hai người nay đều là những ngườinổi tiếng trong đó Anders Hejlsberg được biết đến là tác giả của Turbo Pascal, mộtngôn ngữ lập trình PC phổ biến Và ông đứng đầu nhóm thiết kế Borland Delphi.Một trong những thành công đầu tiên của việc xây dựng môi trường phát triểnthích hợp (IDE) cho lập trình client/server.
2.2 Đặc điểm ngôn ngữ C#.
Trọng tâm của ngôn ngữ hướng đối tượng là lớp Lớp định nghĩa kiểu dữliệu mới, cho phép mở rộng ngôn ngữ theo hướng cần giải quyết C# có những từkhóa dành cho việc khai báo lớp, phương thức, thuộc tính(property) C# hỗ trợ đầyđủ khái niệm trong lập trình hướng đối tượng: đóng gói, kế thừa, đa hình
Trong C# mọi thứ liên quan đến khai báo lớp đều được tìm thấy trong phầnkhai báo của nó Định nghĩa một lớp trong ngôn ngữ C# không đòi hỏi phải chia ratập tin header và tập tin nguồn giống như trong ngôn ngữ C# Hơn nữa ngôn ngữC# hỗ trợ kiểu XML, cho phép chèn các tag XML để phát sinh tự đông cácdocument cho lớp.
C# hỗ trợ khái niệm giao diện interfaces (tương tự Java) Một lớp chỉ có thểkế thừa duy nhất một lớp cha nhưng có thể cài đặt nhiều giao diện.
C# có kiểu cấu trúc, struct (không giống C++) Cấu trúc là kiểu hạng nhẹ vàbị giới hạn Cấu trúc không thể thừa kế lớp hay được kế thừa nhưng có thể cài đặtgiao diện.
Trang 14C# cung cấp những đặc trưng lập trình hướng đối tượng như property, sựkiện và dẫn hướng khai báo (được gọi là attribute) Lập trình hướng đối tượngđược hỗ trợ bởi CLR thông qua siêu dữ liệu (metadata) Siêu dữ liệu mô tả các lớpbao gồm các phương thức và thuộc tính, các thông tin bảo mật,…
Assembly là một tập hợp các tập tin theo cách nhìn của lậpn trình viên làcác thư viện liên kết động (DLL) hay tập tin (EXE) Trong Net một assembly làmột đơn vị của việc tái sử dụng xác định phiên bản, bảo mật và phân phối CLRcung cấp một số các lớp để thao tác với assembly.
C# cũng cho truy cập trực tiếp bộ nhớ dùng con trỏ kiểu C++, nhưng vùngmã đó được xem như không an toàn CLR sẽ không thục thi việc thu dọn rác tựđộng các đối tượng được tham chiếu bởi các con trỏ cho đến khi lập trình viên tựgiải phóng.
2.3 Các ưu điểm ngôn ngữ C#.
- C# là ngôn ngữ đơn giản.
Ngôn ngữ C# là ngôn ngữ đơn giản vì nó dựa trên nền tảng C và C++ C#khá giống về diện mạo, cú pháp biểu thức, toán tử và những chức năng khác đượclấy trực tiếp từ ngôn ngữ C và C++ nhưng nó đã được cải tiến làm cho ngôn ngữđơn giản hơn.
- C# là ngôn ngữ hiện đại.
Ngôn ngữ C# chứa các đặc tính sau: xử lý ngoại lệ, thu gom bộ nhớ tựđộng, những kiểu dữ liệu mở rộng và bảo mật mã nguồn.
- C# là ngôn ngữ hướng đối tượng.
Những đặc điểm chính của ngôn ngữ hướng đối tượng (Object –orientedlanguage) là sự đóng gói (encapsulation), sự kế thừa (inheritance), và đa hình(polymorphism) C# hỗ trợ tất cả các đặc tính trên.
- C# là ngôn ngưc mạnh và cũng mềm dẻo,
Ngôn ngữ C# chúng ta chỉ bị giới hạn bởi chính bản than hay là trí tưởngtượng của chúng ta, Ngôn ngữ này không đặt những ràng buộc lên những việc cóthể làm C# được sử dụng cho nhiều các dự án khác nhau như là tạo ứng dụng xửlý văn bản, ứng dụng đồ họa, bàn tính, thạm chí những biên dịch cho các ngôn ngữkhác.
Trang 15- C# ngôn ngữ hướng module.
Mã nguồn C# có thể được viết trong những phần được gọi là những lớp,những lớp này chứa các phương thức thành viên của nó Những lớp và phươngthức có thể sử dụng lại trong ứng dụng hay các chương trình khác Bằng cáchtruyền các mẫu thông tin đến những lớp hay phương thức chúng ta có thể tạo ranhững mã nguồn dùng lại có hiệu quả.
Trang 16Chương3: Phát triển ứng dụng với Windows Form.
3.1 Tạo một Windows Form đơn giản
Windows Form là công cụ dùng để tạo các ứng dụng Windows, nó mượncác ưu điểm mạnh của ngôn ngữ Visual Basic : dễ sử dụng, hỗ trợ mô hình RADđồng thời kết hợp với tính linh động, hướng đối tượng của ngôn ngữ C# Việc tạoứng dụng Windows trở lên hấp dẫn và quen thuộc với các lập trình viên.Trongphần này, ta sẽ thảo luận hai cách khi tạo một ứng dụng Windows : Dùng bộ soạnmã để gõ mã trực tiếp hoặc dùng bộ công cụ kéo thả của IDE Ứng dụng của
chúng ta khi chạy sẽ xuất dòng chữ “Hello World!” ra màn hình, khi người dùngnhấn vào Button “Cancel” thì ứng dụng sẽ kết thúc.
Hình 2- Ứng dụng minh họa việc hiển thị chuỗi và bắt sự kiện của Button.Đầu tiên, ta dùng lệnh using để thêm vùng tên sau :
using System.Windows.Forms;
Ta sẽ cho ứng dụng của ta thừa kế từ vùng tên Form : public class HandDrawnClass : Form
Bất kỳ một ứng dụng Windows Form nào cũng đều thừa kế từ đối tượng
Form, ta có thể dùng đối tượng này để tạo ra các cửa sổ chuẩn như : các cửa sổ
trôi (floating form), thanh công cụ (tools), hộp thoại (dialog box) … Mọi Điềukhiển trong bộ công cụ của Windows Form (Label, Button, Listbox …) đều thuộc
Trang 17private System.Windows.Forms.Button btnCancel;
Tiếp theo ta sẽ khởi tạo 2 đối tượng trên trong hàm khởi tạo của Form: this.lblOutput = new System.Windows.Forms.Label( );
this.btnCancel = new System.Windows.Forms.Button( );
Sau đó ta gán chuỗi tiêu đề cho Form của ta là ‘Hello World‘ :
this.Text = "Hello World";
Gán vị trí, chuỗi và kích thước cho đối tượng Label :
lblOutput.Location = new System.Drawing.Point (16, 24); lblOutput.Text = "Hello World!";
lblOutput.Size = new System.Drawing.Size (216, 24);
Vị trí của Label được xác định bằng một đối tượng Point, đối tượng này cầnhai thông số : vị trí so với chiều ngang (horizontal) và đứng (vertical) của thanhcuộn Kích thước của Label cũng được đặt bởi đối tượng Size, với hai thông số làchiều rộng (width) và cao (height) của Label Cả hai đối tượng Point và Size đềuthuộc vùng tên System.Drawing : chứa các đối tượng và lớp dùng cho đồ họa.Tương tự làm với đối tượng Button :
btnCancel.Location = new System.Drawing.Point (150,200); btnCancel.Size = new System.Drawing.Size (112, 32);
btnCancel.Text = "&Cancel";
Để bắt sự kiện click của Button, đối tượng Button cần đăng ký với trình quản lý sự
kiện, để thực hiện điều này ta dùng ‘delegate’ Phương thức được ủy thác (sẽ bắt
sự kiện) có thể có tên bất kỳ nhưng phải trả về kiểu void và phải có hai thông số :
một là đối tượng ‘sender’ và một là đối tượng ‘System.EventArgs’.
protected void btnCancel_Click( object sender, System.EventArgs e){
Ta đăng ký phương thức bắt sự kiện theo hai bước Đầu tiên, ta tạo một trình quảnlý sự kiện mới System.EventHandler, rồi đẩy tên của phương thức bắt sự kiện vàolàm tham số :
new System.EventHandler (this.btnCancel_Click);
Trang 18Tiếp theo ta sẽ ủy thác trình quản lý vừa tạo ở trên cho sự kiện click của Button
bằng toán tử +=.Mã gộp của hai bước trên :
one:btnCancel.Click +=new System.EventHandler (this.btnCancel_Click);
Để kết thúc việc viết mã trong hàm khởi tạo của Form, ta sẽ thêm hai đốitượng Label và button vào Form của ta :
this.Controls.Add (this.btnCancel); this.Controls.Add (this.lblOutput);
Sau khi ta đã định nghĩa hàm bắt sự kiện click trên Button, ta sẽ viết mã thihành cho hàm này Ta sẽ dùng hàm tĩnh ( static ) Exit() của lớp Application để kếtthúc ứng dụng :
protected void btnCancel_Click( object sender, System.EventArgs e) {
Application.Exit(); }
Cuối cùng, ta sẽ gọi hàm khởi tạo của Form trong hàm Main() Hàm Main() làđiểm vào đầu tiên của Form.
public static void Main( ) {
Application.Run(new HandDrawnClass( )); }
Sau đây là mã hoàn chỉnh của toàn bộ ứng dụng
using System;
using System.Windows.Forms;namespace ProgCSharp
public class HandDrawnClass : Form{
// Label dùng hiển thị chuỗi ‘Hello World’
private System.Windows.Forms.Label lblOutput;// Button nhấn ‘Cancel’
private System.Windows.Forms.Button btnCancel;
Trang 19public HandDrawnClass( ){
// Tạo các đối tượng
this.lblOutput = new System.Windows.Forms.Label ( );this.btnCancel = new System.Windows.Forms.Button ( );// Gán tiêu đề cho Form
this.Text = "Hello World";// Hiệu chỉnh Label
lblOutput.Location = new System.Drawing.Point(16,24);lblOutput.Text = "Hello World!";
lblOutput.Size = new System.Drawing.Size (216, 24);// Hiệu chỉnh Button
btnCancel.Location = newSystem.Drawing.Point(150,20);btnCancel.Size = new System.Drawing.Size (112, 32);btnCancel.Text = "&Cancel";
// Đăng ký trình quản lý sự kiệnbtnCancel.Click +=
new System.EventHandler (this.btnCancel_Click);//Thêm các điều khiển vào Form
this.Controls.Add (this.btnCancel);this.Controls.Add (this.lblOutput);}
// Bắt sự kiện nhấn Button
protected void btnCancel_Click(object sender, EventArgs e){
Application.Exit( );}
// Chạy ứng dụng
public static void Main(){
Application.Run(new HandDrawnClass( ));}
Trang 203.2 Dùng kéo thả trong Windows
Bên cạnh trình soạn mã, NET còn cung cấp một bộ các công cụ kéo thả để
làm việc trong môi trường phát triển tích hợp IDE ( Intergrate DevelopmentEnviroment ), IDE cho phép kéo thả rồi tự động phát sinh mã tương ứng Ta sẽ tạo
lại ứng dụng trên bằng cách dùng bộ công cụ trong Visual Studio, ta mở VisualStudio và chọn ‘New Project’ Trong cửa sổ ‘New Project’, chọn loại dự án làVisual C# và kiểu ứng dụng là ‘Windows Applications’, đặt tên cho ứng dụng làProgCSharpWindowsForm.
Hình 3:Màn hình tạo ứng dụng Windows mới.
Vs.NET sẽ tạo một ứng dụng Windows mới và đặt chúng vào IDE như hình
dưới :
Trang 21Hình 3 Môi trường thiết kế kéo thả
Phía bên trái của cửa hình trên là một bộ các công cụ (Toolbox) kéo thả dành chocác ứng dụng Windows Form, chính giữa là một Form được NET tạo sẵn có tênForm1 Với bộ công cụ trên, ta có thể kéo và thả một Label hay Button trực tiếpvào Form, như hình sau :
Trang 22Với thanh công cụ Toolbox ở bên trái, ta có thể thêm các thành phần mới
vào nó bằng các chọn View/Add Reference Gó bên phải phía trên là cửa sổ duyệttoàn bộ các tập tin trong giải pháp (Solution, một giải pháp có một hay nhiều dự
án con).
Phía dưới là cửa sổ thuộc tính, hiển thị mọi thuộc tính về mục chọn hiệnhành Ta có thể gán giá trị chuỗi hiển thị hoặc thay đổi font cho Label một cáchtrực tiếp trong cửa sổ thuộc tính.
Trang 23Hình 5 Thay đổi Font trực tiếp bằng hội thoại Font
Với IDE này, ta có thể kéo thả một Button và bắt sự kiện click của nó mộtcách dễ dàng, chỉ cần Nhấn đúp vào Button thì tự động NET sẽ phát sinh ra các
mã tương ứng trong trang mã của Form (Code-Behind page) như : khai báo, tạo
Button và hàm bắt sự kiện click của Button.
Trang 24Hình 6 Sau khi click đúp nút Cancel
Bây giờ, ta chỉ cần gõ thêm một dòng code nữa trong hàm bắt sự kiện củaButton là ứng dụng có thể chạy được y như ứng dụng mà ta đã tạo bằng cách gõcode trong phần trên.
Application.Exit( );
Sau đây là toàn bộ mã được phát sinh bởi IDE và dòng mã bạn mới gõ vào :using System;
using System.Drawing;using System.Collections;
using System.ComponentModel;using System.Windows.Forms;using System.Data;
namespace ProgCSharpWindowsForm{
Trang 25/// Required designer variable./// </summary>
private System.ComponentModel.Container components;public Form1( )
InitializeComponent( );}
public override void Dispose( ){
base.Dispose( );
if(components != null)components.Dispose( );}
#region Windows Form Designer generated code/// <summary>
/// Required method for Designer support - do not modify/// the contents of this method with the code editor.
//
Trang 26// lblOutput//
this.lblOutput.Font = new System.Drawing.Font("Arial",15.75F, System.Drawing.FontStyle.Bold,
System.Drawing.GraphicsUnit.Point,((System.Byte)(0)));this.lblOutput.Location = new System.Drawing.Point(24, 16);this.lblOutput.Name = "lblOutput";
this.lblOutput.Size = new System.Drawing.Size(136, 48);this.lblOutput.TabIndex = 0;
this.lblOutput.Text = "Hello World";// btnCancel
this.btnCancel.Location = new System.Drawing.Point(192, 208);this.btnCancel.Name = "btnCancel";
this.btnCancel.TabIndex = 1;this.btnCancel.Text = "Cancel";this.btnCancel.Click +=
new System.EventHandler( this.btnCancel_Click );
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[]{this.btnCancel, this.lblOutput});
this.Name = "Form1";this.Text = "Form1";this.ResumeLayout(false);}
private void btnCancel_Click(object sender, System.EventArgs e){
Application.Exit( );}
#endregion/// <summary>
/// The main entry point for the application.
Trang 27/// </summary>[STAThread]static void Main( ){
Application.Run(new Form1( ));}
So với đoạn mã ta gõ vào trong ứng dụng trước thì mã do IDE phát sinh khôngkhác gì nhiều Các dòng chú thích được dùng để làm sưu liệu báo cáo cho dự án.(mục này sẽ được thảo luận sau)
3.3.Tạo ứng dụng Windows Form khác.
Trong ứng dụng trên ta đã thảo luận sơ qua về ứng dụng Windows Form, phầnnày ta sẽ tạo một ứng dụng Windows khác thực tế hơn Ứng dụng có tên làFileCopier, cho phép chép hay xóa một hoặc nhiều tập tin từ vị trí này sang vị tríkhác Mục đích của ứng dụng là minh họa sâu hơn về các kỹ năng lập trình C# và
giúp người đọc hiểu thêm về namespace Windows.Forms Giao diện của ứng dụng
sau khi hoàn chỉnh sẽ như sau:
Trang 28Hình 3-7 Giao diện người dùng của FileCopier
Giao diện của ứng dụng gồm các thành phần sau :
• Labels: Các tập tin nguồn (Source Files) and Thư múc đích (Target Directory).• Buttons: Bỏ các dấu chọn trên cây bên trái (Clear), Copy, Delete, and Cancel.• Checkbox : ghi đè lên nếu đã có sẵn ( "Overwrite if exists" )
• Checkbox : hiển thị đường dẫn của mục được trọn ở cây bên phải.• Hai cây (TreeView) chứa tập tin.
Khi người dùng nhấn vào Button ‘Copy’ thì tất các tập tin được chọn ở câybên trái sẽ được chép qua cây bên phải, cũng như khi nhấn vào Button ‘Delete’ thìsẽ xóa các tập tin được chọn.
3.3.1.Tạo giao diện cho ứng dụng.
Đầu tiên ta tạo một dự án Windows Form mới có tên FileCopier IDE sẽhiển thị màn hình thiết kế (Designer) lên, ta sẽ thực hiện kéo thả các Label,Button, Checkbox và TreeView cho đến khi thích hợp như hình dưới đây :
Trang 29Sau khi tạo giao diện xong, ta đặt thuộc tính CheckBoxes cho cây bên tráicó tên tvwSource thành true, còn cây bên phải có tên tvwTargetDir thành false, đểthực hiện ta đơn giản chỉ chọn và sửa đổi trên cửa sổ thuộc tính của từng đốitượng Khi ta nhấn đúp lên bất kỳ Điều khiển nào thì tự động Visual Studio NETsẽ phát sinh ra mã tương ứng để bắt sự kiện của Điều khiển đó và đặt con trỏ( Cursor ) vào ngay tại hàm đó, ta nhấn đúp vào Button “Cancel” và bổ sung mãnhư sau :
protected void btnCancel_Click( object sender, System.EventArgse)
{
Application.Exit( ); }
3.3.2.Quản lý điều khiển TreeView.
Trong ứng dụng này, hai điều khiển TreeView hoạt động tương tự nhau,ngoại trừ điều khiển cây bên trái tvwTargetDir có thuộc tính CheckBoxes là truevà liệt kê cả tập tin lẫn thư mục, còn cây bên phải là false và chỉ liệt ke thư mục.Mặc nhiên thì điều khiển cây cho phép chọn nhiều mục một lúc, nhưng ta sẽ chỉnhlại sao cho chỉ cây bên trái tvwSource mới được chọn nhiều mục một lúc,bên phảithì không.
Ta sẽ tạo ra một hàm đẩy dữ liệu vào cây :
Trang 30private void FillDirectoryTree(TreeView tvw, bool isSource)Có 2 tham số :
- TreeView tvw: điều khiển cây cần đẩy dữ liệu vào
- Bool isSource: cờ xác định là dữ liệu đẩy cho cây Nếu isSource là truethì cây sẽ liệt kê cả tập tin và thư mục, false thì chỉ có tập tin.
Hàm này sẽ được dùng chung cho cả hai điều khiển cây :- FillDirectoryTree(tvwSource, true);
- FillDirectoryTree(tvwTargetDir, false);
Đối tượng TreeNode
Điều khiển TreeView có một thuộc tính Nodes thuộc tính này nhận vào một đốitượng TreeNodeCollection , đối tượng này thực chất là một mảng chứa các đốitượng TreeNode, mỗi một TreeNode là một nút trên cây.
Trước tiên ta cần khởi tạo cây về rỗng : tvw.Nodes.Clear( );
Sau đó ta gọi hàm tĩnh GetLogicalDrives() của đối tượng Enviroment để lấy về tấtcả các ổ đĩa logic hiện đang có trên máy Đối tượng Enviroment cung cấp cácthông tin như : tên máy tính, phiên bản hệ điều hành, hệ thống thư mục … trênmáy tính hiện hành.
string[] strDrives = Environment.GetLogicalDrives( );
strDrives sẽ chứa tên các ổ đĩa logic hiện có trên máy.
Sau đó ta sẽ duyệt qua từng ổ đĩa bằng cách dùng lệnh foreach Với mỗi ổ đĩalogic, ta gọi hàm GetDirectories() của đối tượng DirectoryInfo Hàm này sẽ trả vềdanh sách các đối tượng DirectoryInfo, chứa tất cả các tập tin và thư mục trên ổđĩa logic đó Những tại đây ta không quan tâm đến kết quả mà nó trả về, mục đíchta gọi hàm này chủ yếu là để kiểm tra xem các ổ đĩa có hợp lệ hay không, nếu cóbất kỳ một lỗi nào trên ổ đĩa thì hàm GetDirectories() sẽ quăng ra một ngoại lệ Tasẽ dùng khối bắt lỗi try…catch để bắt lỗi này.
foreach (string rootDirectoryName in strDrives){
DirectoryInfo dir = new DirectoryInfo(rootDirectoryName);dir.GetDirectories( );
Trang 31
Khi ỗ đĩa hợp lệ, ta sẽ tạo ra một TreeNode ứng với rootDirectoryName ổ
đĩa đó,chẳng hạn như : “C:\”, “D:\” …Rồi thêm TreeNode này vào điều khiển câydùng hàm Add() thông qua thuộc tính Nodes của cây.
TreeNode ndRoot = new TreeNode(rootDirectoryName);tvw.Nodes.Add(ndRoot);
Tiếp theo ta tiến hành duyệt trên mọi thư mục con của đối tượng TreeNodegốc trên, để làm điều này ta gọi hàm GetSubDirectoriesNodes( ), hàm này cầnnhận vào các đối số : TreeNode gốc, tên của nó và cờ xác định là có đẩy cả tập tinvào cây hay không.
if (isSource){
GetSubDirectoryNodes(ndRoot, ndRoot.Text, true);}
GetSubDirectoryNodes(ndRoot, ndRoot.Text, false);}
Duyệt đệ qui trên các thư mục con
Hàm GetSubDirectoryNodes() bắt đầu bằng việc gọi hàm GetDirectories()để nhận về một danh sách các đối tượng DirectoryInfo :
private void GetSubDirectoryNodes(
TreeNode parentNode, string fullName, bool getFileNames){
DirectoryInfo dir = new DirectoryInfo(fullName);DirectoryInfo[] dirSubs = dir.GetDirectories( );
Ở đây ta thấy node truyền vào có tên là parentNode ( nút cha ), nghĩa lànhững nút sau này sẽ được xem là nút con của nó Bạn sẽ rõ hơn khi tìm hiểu hếthàm này Ta tiến hành duyệt qua danh sách các thư mục con dirSubs, bỏ qua cácmục có trạng thái là ẩn ( Hidden ).
foreach (Directory dirSub in dirSubs){