CHƯƠNG 1 MÔI TRƯỜNG PHÁT TRIỂN ỨNG DỤNG VISUAL STUDIO.NET CHƯƠNG 2 NGÔN NGỮ LẬP TRÌNH C CHƯƠNG 3 WINDOWS FORM VÀ CÁC CONTROL CHƯƠNG 4 XỬ LÝ SỰ KIỆN CHƯƠNG 5 ĐỒ HỌA HÌNH ẢNH GDI CHƯƠNG 6 LÀM VIỆC VỚI FILE VÀ THƯ MỤC
Trang 1QUAN
Trang 2 CHƯƠNG 5 ĐỒ HỌA HÌNH ẢNH - GDI
CHƯƠNG 6 LÀM VIỆC VỚI FILE VÀ THƯ MỤC
Trang 4– Nắm vững các thành phần trong môi trường Visual
Studio.Net và các lớp thư viện Net Framework – Tạo được project, tìm hiểu các thành phần trong
một project và các thao tác biên dịch, sửa lỗi khi lập trình
• Nội dung
– 1 Giới thiệu Visual Studio Net – 2 Tạo project trong Visual Studio.Net
Trang 5• Các ngôn ngữ lập trình trong VS.Net
• Các loại ứng dụng trong VS.Net
Trang 8Giới thiệu về Visual Studio Net 2010
• Microsoft Visual Studio 2010 ra đời vào tháng 10/2010, là phiên bản mới hoàn toàn về giao diện
• Tích hợp SQLServer Express 2008
• Net Framework 4.0
Trang 10C# VB.NET J# C++ …
XML Web Service Forms Web Windows Forms
ASP.NET
Trang 11– Bẫy lỗi và xử lý lỗi.
– Bảo mật.
Trang 12• Gồm hai thành phần: Common Language
Runtime (CLR) và thư viện lớp NET Framework
– CLR là nền tảng của NET Framework, thực hiện quản lý bộ nhớ, quản lý thực thi tiểu trình, thực thi
mã nguồn, xác nhận mã nguồn an toàn, biên dịch và các dịch vụ hệ thống khác
– Framework Class Library: Thư viện nền tảng cho NET Framework, chứa đựng hầu hết các lớp cho phép xây dựng các loại ứng dụng
Trang 13Đặc điểm của ứng dụng NET
13 • Chạy trên nền (.NET framework)
• Mã nguồn được biên dịch qua MSIL
• MSIL được thông dịch qua mã máy lúc thực thi nhờ vào CLR
• Độc lập nền tảng
– Về lý thuyết có thể chạy trên mọi nền!
• Install NET Framework redistribute
packadge (dotnetfx.exe) để chạy ứng dụng NET trên máy client.
Trang 14CT C#.NET
CT VB.NET
CT C++.NET
CT J#.NET
VB NET Compiler
1011010 1011010 1011010
Programmer
Trang 16• Windows Control Library
• ASP NET Web Application / Service / Control Library
Trang 17• Các kiểu file của các thành phần trong project
• Biên dịch, sửa lỗi, chạy ứng dụng
Trang 18Tạo project trong VS.NET
• File, New Project
Trang 19• Cửa sổ Solution Explorer:
– Hiển thị phân cấp Project
• Project References
• Forms, Classes, Modules
• Forder với các items
– Các chế độ trong Project
• Drag và Drop
• Context menus
Trang 20• Cửa sổ Properties: chứa các thuộc tính định
dạng và tùy chọn của đối tượng tương ứng được chọn như Window Form, các controls,… giúp người sử dụng thay đổi các thuộc tính của đối tượng một cách dễ dàng
• Thanh Toolbox: chứa các control, giúp người sử dụng thao tác một cách trực quan để thiết kế
giao diện bằng cách kéo thả các control lên Form
Trang 21• Cửa sổ Server Explorer:
– Quản lý các kết nối tới cơ sở dữ liệu – Hiển thị và quản lý các item của Server trong VS.Net IDE như Event Logs, Message Queues …
– Cho phép sử dụng kỹ thuật kéo thả như các trường trong DB vào ứng dụng
Trang 23• Solution Files (.sln, suo)
• Project Files (.csproj, vbproj)
• Local Project Items
– Classes, forms, modules, etc (.cs, vb)
• Web Project Items
– XML Web services (.asmx) – Web forms (.aspx)
– Global application classes (.asax)
Trang 25• Debug (chạy từng bước):
– Tạo break point: F9 – Chạy từng bước: F10
Trang 26Thiết lập các thuộc tính cho Project
• Thiết lập các thuộc tính thông thường
– Định nghĩa tên Assembly – Namespace gốc
– Đầu ra Project – Đối tượng chạy đầu tiên – Import các mức namespaces
• Thiết lập các thuộc tính cấu hình
– Thiết lập Debug – Các tùy chọn Build
Trang 28Thiết lập các tham chiếu trong Project
• Nhiều Project tham chiếu đến các ứng dụng khác hoặc code của các thư viện Dùng hộp
thoại Add Reference
Trang 31• Cấu trúc điều khiển
• Hướng đối tượng trong C#
• Mảng (Array)
• Xử lý ngoại lệ
Trang 32– C# là một ngôn ngữ lập trình mới, được thiết
kế riêng để dùng cho Microsoft's NET Framework
– Là một ngôn ngữ hoàn toàn hướng đối
tượng – Một chương trình C# có ít nhất một hàm
Main
Trang 36• Lợi ích của namespace:
– Tránh được sự trùng lặp tên giữa các class – Cho phép tổ chức mã nguồn một cách có khoa học
và hợp lý
Các từ khóa trong C# (tt)
Trang 37– Từ khóa using: Được sử dụng để làm cho
chương trình gọn hơn, và không cần phải viết từng namespace cho từng đối tượng, sau từ khóa này là một namespace hay
subnamespace với mô tả đầy đủ trong cấu trúc phân cấp của nó
• Ví dụ : using System;
– Từ khóa static: thường dùng đặt trước khai báo hàm, biến của một lớp Các hàm hoặc biến static này được truy xuất mà không cần tạo một đối tượng của lớp.
Các từ khóa trong C# (tt)
Trang 41Kiểu liệt kê
• Enum là một cách thức để đặt tên cho các trị nguyên (tương tự như tập các hằng),
làm cho chương trình rõ ràng, dễ hiểu hơn
• Enum không có hàm thành viên
• Ví dụ:
– enum Direction {LEFT, RIGHT, UP, DOWN};
• (LEFT =0, RIGHT=1, UP=2, DOWN=3)
Trang 42Kiểu chuỗi (string)
• Chuỗi là kiểu dữ liệu định nghĩa sẵn trong C#, là một dãy các ký tự
• Các ký hiệu chuỗi đặc biệt trong C#
– Ký hiệu \: đặt trước các ký tự đặc biệt
Trang 43– Dùng đặt trước tên biến khi tên biến trùng với
từ khóa trong C# (Ví dụ: int @new = 10; ) – Thay thế \: ví dụ @“D:\Baitap” thay vì “D:\\
Baitap”
Trang 44• Compare() : so sánh hai chuỗi (=, >, <)
• Concat () : tạo chuỗi mới từ nhiều chuỗi
• Copy () : tạo một bản sao của một chuỗi
• Equals () : so sánh hai chuỗi có giống nhau
• Join () : ghép nối nhiều chuỗi
• Length : chiều dài chuỗi
• Insert() : chèn một chuỗi khác vào chuỗi
• SubString () : Lấy một chuỗi con
• ToLower () : chuyển một chuỗi về chữ thường
• ToUpper () : chuyển một chuỗi về chữ hoa
• Trim () : Cắt bỏ khoảng trắng hai đầu chuỗi
Trang 45• Biến là một vùng nhớ lưu trữ một giá trị
tạm thời với một kiểu dữ liệu nào đó
• Biến phải được khởi tạo trước khi sử dụng
• Khai báo
– [ modifier ] datatype identifier ;
• modifier: từ khóa public, private, protected,… chỉ định mức truy cập của biến, nếu không có từ khóa phía trước, mặc định là private
• datatype: kiểu dữ liệu
• identifier: tên biến
– Ví dụ: int number;
double radius = 5.0;
Trang 48• Khai báo: sử dụng từ khóa const
– <const> <type> <CONSTNAME> = <value>; – Ví dụ: const double PI = 3.14158;
Trang 49– Lưu ý: phân biệt = và ==
• Toán tử logic: && (and), || (or), ! (not)
Trang 50Kiểu dữ liệu cấu trúc
• Sử dụng từ khóa struct để khai báo
• Một cấu trúc có thể có các trường, các phương thức và thậm chí các phương
thức khởi dựng giống như lớp
• Ví dụ
Trang 51Kiểu dữ liệu cấu trúc (tt)
• Sự khác nhau giữa cấu trúc và lớp (class)
– Không thể khai báo một phương thức khởi dựng không tham số cho một cấu trúc
– Các thuộc tính của cấu trúc đều phải được khởi tạo giá trị
– Khi khai báo thuộc tính của cấu trúc, không thể khởi gán giá trị như lớp
Trang 52Kiểu dữ liệu cấu trúc (tt)
• Trường hợp gọi phương thức khởi dựng của cấu trúc với từ khóa new, các thuộc tính chưa khởi trị sẽ được tự động gán trị
0 hoặc null
Trang 61Lệnh break, continue, goto, return
• break: lệnh thoát khỏi vòng lặp và tiếp tục thực
hiện các lệnh tiếp ngay sau vòng lặp.
• continue ngừng thực hiện các công việc còn lại
của vòng lặp hiện thời và quay về đầu vòng lặp
để thực hiện bước lặp tiếp theo
• goto: chuyển đến “nhãn” có dạng “Label:” (hạn
chế sử dụng lệnh này)
• return: thoát khỏi một hàm, trả quyền điều khiển
về phía triệu gọi hàm (caller)
Trang 62Bài 4: Hướng đối tượng trong C#
• Khái niệm về lớp, đối tượng
• Thiết kế lớp
• Xây dựng các phương thức
• Xây dựng các thuộc tính
• Thừa kế
Trang 63Khái niệm về lớp và đối tượng
• Sự phân loại (Classification): Sắp xếp
thông tin một cách có hệ thống vào trong một thực thể, một sự vật, hiện tượng
• Đóng gói (Encapsulation): Đóng gói là tiến trình che giấu những thông tin và hoạt
động bên trong của một đối tượng khỏi thế giới bên ngoài
• Lớp (class) là một kiểu cấu trúc mở rộng, được định nghĩa để tạo nên một kiểu dữ liệu mới, bao gồm các thuộc tính và
phương thức
Trang 64Khái niệm về lớp và đối tượng (tt)
• Đối tượng là thể hiện của lớp
– Ví dụ:
Circle cir = new Circle();
double area = cir.Area());
• Thuộc tính: thành phần dữ liệu mô tả đối
tượng
• Phương thức: mô tả và thực hiện các hành
vi của đối tượng
Trang 65• None hoặc internal: chỉ truy cập bên trong project
• public: truy cập ở bất kỳ nơi đâu
• abstract: chỉ truy cập bên trong project, không được cài đặt lại
Trang 67của đối tượng (hoặc của lớp)
• Mỗi phương thức thường được định nghĩa
là một hàm, các thao tác để thực hiện
hành vi đó được viết tại nội dung của hàm
• Trong C#, tất cả các câu lệnh, phương
thức… được “gói” trong một class, và tất
cả các class được “gói” trong một
namespace
Trang 68• Khai báo phương thức: giống C++, tuy
nhiên, mỗi phương thức được khai báo bởi
từ khóa public, private, protected,…)
• Phương thức có trị trả về
Trang 70cùng tên nhưng khác tham số.
• Khi chạy chương trình, tùy tình huống mà hàm thích hợp nhất được gọi
Trang 71Truyền tham số cho phương thức
• Truyền giá trị (tham trị) cho phương thức
– Tạo bản sao của biến
– Sự thay đổi giá trị của biến trong phương thức không ảnh hưởng đến biến gốc
– Cú pháp truyền tham trị tương tự C++
Trang 72Truyền tham số cho phương thức (tt)
• Truyền tham chiếu (reference) cho phương thức
– Tạo bản sao của tham chiếu tới đối tượng
– Bất kỳ thay đổi nào về nội dung đối tượng
trong phương thức đều có ảnh hưởng đến đối tượng ngoài phương thức
– Một phương thức chỉ có thể trả về một giá trị
Do đó, muốn nhận nhiều hơn một giá trị thì ta
sử dụng các tham số dưới hình thức là các tham chiếu với từ khoá ref hoặc out
Trang 73Truyền tham số cho phương thức (tt)
• Truyền tham chiếu (tt):
Trang 74Truyền tham số cho phương thức (tt)
• Truyền tham chiếu ra (out): được sử dụng trong trường hợp không cần phải khởi tạo tham số trước khi dùng
Trang 75Phương thức khởi tạo
• Phương thức khởi tạo (Constructor) là một phương thức đặc biệt có tên trùng với tên của lớp và có mức độ truy cập là public
• Được gọi đến một cách tự động khi một
đối tượng của lớp được tạo ra
• Dùng để khởi tạo các giá trị đầu cho các thành phần dữ liệu của đối tượng thuộc
lớp
Trang 76Phương thức khởi tạo (tt)
• Nếu không định nghĩa phương thức khởi tạo, trình biên dịch sẽ tự động sử dụng
phương thức khởi tạo mặc định
• Phương thức khởi tạo không có kiểu trả về
• Các thuộc tính không được khởi tạo trong phương thức này sẽ được khởi tạo mặc định (0, false, null)
Trang 78Nạp chồng phương thức khởi tạo
• Là các phương thức khởi tạo có đối số khác nhau
Trang 79Phương thức khởi tạo sao chép
• Phương thức khởi tạo sao chép khởi gán giá trị cho đối tượng mới bằng cách sao chép dữ liệu của đối tượng cùng kiểu đã tồn tại
– Ví dụ
Trang 80• Từ khóa this được dùng để tham chiếu
đến thể hiện hiện hành của một đối tượng
• Có thể tham chiếu đến phương thức,
thuộc tính của lớp thông qua tham chiếu
this
• Từ khóa this thường được dùng để:
– Tránh xung đột tên khi tham số của phương
thức trùng tên với tên biến dữ liệu của đối tượng.
– Dùng để truyền đối tượng hiện tại làm tham số cho một phương thức khác
Trang 83• public : cho phép truy xuất mọi nơi trong
bản thân lớp khai báo và bên ngoài
• private: chỉ cho phép truy xuất bên trong
lớp mà nó khai báo
• protected: chỉ cho phép truy xuất bên trong
lớp khai báo và các lớp dẫn xuất từ lớp đó
• internal: cho phép truy xuất từ bất cứ lớp
nào trong cùng một khối hợp ngữ assembly
Trang 84• Dữ liệu và phương thức của một lớp có thể là
thành viên thuộc thể hiện của lớp (đối tượng)
hoặc thành viên tĩnh.
• Dữ liệu và phương thức tĩnh được xem là toàn cục trong phạm vi một lớp mọi đối tượng thuộc lớp đều có thể truy cập
• Khai báo: sử dụng từ khóa static đứng trước
• Việc truy cập đến dữ liệu và phương thức tĩnh
phải thực hiện thông qua tên lớp theo cú pháp:
– classname variableName;
– classname methodName;
Ví dụ: Math.Abs(number); String.Concat(str1,str2);
Trang 85Xây dựng các thuộc tính (properties)
• Properties là một đặc tính mới của ngôn
ngữ C# làm tăng sức mạnh của tính đóng
gói
• Cho phép lấy giá trị (get) và gán giá trị
(set) cho các thành phần dữ liệu của lớp
• Cho phép truy cập đến các thành phần dữ liệu của đối tượng ở mức độ đọc, hoặc
ghi, hoặc cả hai và che dấu cài đặt thực sự bên trong lớp
Trang 87• Thuộc tính đọc và ghi: cho phép đọc và ghi
dữ liệu, sử dụng từ khóa get, set
Trang 88• Là cơ chế cho phép định nghĩa một lớp
mới (còn gọi là lớp dẫn xuất - drived class) dựa trên một lớp đã có sẵn (còn gọi là lớp
cơ sở - base class)
• Lớp dẫn xuất có hầu hết các thành phần
giống như lớp cơ sở (bao gồm tất cả các phương thức và biến thành viên của lớp
cơ sở, trừ các phương thức private,
phương thức khởi tạo, phương thức hủy và phương thức tĩnh)
Trang 89• Lưu ý: lớp dẫn xuất vẫn được kế thừa các thành phần dữ liệu private của lớp cơ sở nhưng không được phép truy cập trực tiếp (truy cập gián tiếp thông qua các phương thức public của lớp cơ sở)
Trang 92• Gọi phương thức thiết lập của lớp cơ sở
– Nếu lớp cơ sở có phương thức tạo lập có
tham số thì lớp dẫn xuất cũng phải định nghĩa phương thức tạo lập có tham số theo cú pháp: class Lopdanxuat (thamso):Lopcoso(thamso) {
} – Lưu ý: tham số lớp dẫn xuất phải bao tham số lớp cơ sở.
Trang 94phương thức ảo (virtual method.
– Để thực hiện được đa hình ta phải thực hiện các bước sau
• Lớp cơ sở đánh dấu phương thức ảo bằng từ khóa
virtual hoặc abstract
• Các lớp dẫn xuất định nghĩa lại phương thức ảo
này (đánh dấu bằng từ khóa override).
Trang 97• Các phần tử trong array được truy xuất
theo tên và vị trí của phần tử trong mảng, chỉ số bắt đầu bằng zero
• Trong C#, mảng được xem là một đối
tượng bao gồm các phương thức, thuộc tính
Trang 98• Có nhiều loại mảng (array): mảng một
chiều, mảng nhiều chiều
• Trong ngôn ngữ C#, những đối tượng
Array là đối tượng của lớp System.Array
Trang 99• Một số phương thức của lớp System.Array
– BinarySearch(): tìm kiếm trên một mảng một chiều đã sắp thứ tự.
– Clear(): thiết lập các thành phần của mảng về
Trang 100– Length: thuộc tính chiều dài của mảng
– Rank thuộc tính số chiều của mảng
– GetLowerBound(): trả về cận dưới của chiều xác định trong mảng
– GetUpperBound(): trả về cận trên của chiều
xác định trong mảng – SetValue(): thiết lập giá trị cho một thành phần xác định trong mảng.
Trang 101• Khai báo mảng với từ khóa new:
– int[] arrInt = new int[30]; //tạo mảng số nguyên gồm 30 phần tử
• Khai báo và khởi tạo các phần tử mảng:
– string[] arrString = {"first", "second", "third"};
Trang 103cách gọi phương thức static Array.Sort()
– Ví dụ: Array.Sort(arrayInt);
• Duyệt mảng:
– Sử dụng vòng lặp (for, while, do while) duyệt từng phần tử dựa vào chỉ số như cú pháp C+ +.
– Dùng lệnh foreach
Trang 104• Câu lệnh foreach không có biến đếm
• Sử dụng một biến để đại diện cho giá trị từng phần tử
Trang 105Truyền mảng cho phương thức
• Truyền mảng như tham số cho phương thức bằng cách xác định tên của mảng (không có ngoặc [ ])
Trang 108• Mảng chữ nhật (thông dụng)
– Là các bảng trong đó các hàng có cùng kích thước, các cột có cùng kích thước
– Quy ước: chỉ số thứ nhất là hàng, chỉ số thứ hai là cột của phần tử, đều bắt đầu =0
Trang 110• Khai báo: type[ , ] array-name;
– int[,] arr = new int [2,3];
Trang 112• Những mảng con này phải đuợc khai báo từng mảng con một
• Ví dụ:
Trang 115– using System.Collections;
Trang 116– Add: thêm một phần tử vào cuối danh sách
– Insert: chèn một phần tử vào danh sách
Trang 118• Là loại danh sách FIFO
• Lấy ra phần tử từ đầu hàng đợi, thêm
phần tử vào cuối hàng đợi
Trang 120• SortedList là loại danh sách gồm hai
mảng: khóa và giá trị, mảng khóa luôn được sắp thứ tự
Trang 123• Khi phát sinh ngoại lệ, việc thực thi trong khi CLR sẽ được dừng và tìm kiếm một trình xử lý ngoại lệ, nếu tìm được một
trình xử lý ngoại lệ nào thì chương trình sẽ kết thúc
Trang 125• Các câu lệnh dễ sinh lỗi đặt trong khối try {}
• Các lệnh xử lý lỗi đặt trong khối catch { }
• Các câu lệnh trong khối finally luôn được
thực hiện cả trong hai trường hợp có hay
không có lỗi phát sinh
• Khi có lỗi phát sinh, các lệnh tiếp theo trong khối try không được thực hiện mà chuyển sang các lệnh xử lý trong khối catch
• Để bắt giữ ngoại lệ, ta sử dụng các đối
tượng Exception