Giáo trình C#



Lưu hành nội bộ














Lưu hành nội bộ

MỤC LỤC



Chương 1. Cơ bản ngôn ngữ C# ............................................................................................ 1
I. Giới thiệu ngôn ngữ C# 2008 ...................................................................................... 1
II. Môi trường lập trình ..................................................................................................... 2
III. Biến, hằng, toán tử ....................................................................................................... 3
IV. Quy ước lập trình, ứng dụng Console Application trong Visual Studio 2008 ............. 5
V. Kiểu dữ liệu ................................................................................................................. 9
VI. Cấu trúc điều khiển .................................................................................................... 10
VII. Cấu trúc lặp ................................................................................................................ 12
Chương 2. Xây dựng Windows Forms Application ........................................................... 15
I. Sử dụng Visual Studio 2008 ...................................................................................... 15
II. Các control cơ bản: Label, TextBox, Button, CheckBox, … .................................... 18
III. Menu và ToolBar ....................................................................................................... 30
IV. Common Dialog ......................................................................................................... 30
Chương 3. Array – String – Exception ............................................................................... 34
I. Mảng 1 chiều ............................................................................................................. 34
II. Mảng nhiều chiều ....................................................................................................... 37
III. String .......................................................................................................................... 40
IV. Exception ................................................................................................................... 45
Chương 4. Class – Object - Method .................................................................................... 47
I. Khái niệm ................................................................................................................... 47
II. Định nghĩa lớp (Class) ............................................................................................... 47
III. Phương thức (Method) ............................................................................................... 50
Chương 5. SQL Server 2008 ................................................................................................ 54
I. Tổng quan về SQL ..................................................................................................... 54
II. Tổng quan về CSDL quan hệ ..................................................................................... 55
III. Table (Bảng) .............................................................................................................. 58
IV. Câu lệnh truy vấn ....................................................................................................... 66
V. Một số hàm thường dùng trong SQL Server ............................................................. 70
Chương 6. Lập trình kết nối CSDL SQL Server 2008 ...................................................... 72
I. Tạo kết nối – Vận chuyển dữ liệu. ............................................................................ 72
II. Sử dụng control .......................................................................................................... 73
III. Các thao tác trên dữ liệu: Thêm - Sửa - Xóa với ADO.NET ..................................... 78
Chương 7. Xây dựng ứng dụng ............................................................................................ 85
I. Chuẩn bị. .................................................................................................................... 85
II. Sử dụng control .......................................................................................................... 85
III. Sử dụng database ....................................................................................................... 88




Lưu hành nội bộ Trang 1

Chương 1:
CƠ BẢN NGÔN NGỮ C#


Bài 1:
GIỚI THIỆU C# 2008


I. Giới thiệu C#

Ngôn ngữ C# khá đơn giản, chỉ khoảng hơn 80 từ khóa và hơn mười mấy kiểu dữ liệu
được dựng sẵn. Tuy nhiên, ngôn ngữ C# có ý nghĩa to lớn khi nó thực thi nhữ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 component, lập
trình hướng đối tượng. Những tính chất đó hiện diện trong một ngôn ngữ lập trình hiện đại.
Hơn nữa ngôn ngữ C# được xây dựng trên nền tảng hai ngôn ngữ mạnh nhất là C++ và Java.
Tóm lại, C# có các đặc trưng sau đây:
- C# là ngôn ngữ đơn giản
- C# là ngôn ngữ hiện đại
- C# là ngôn ngữ hướng đối tượng
- C# là ngôn ngữ mạnh mẽ và mềm dẻo
- C# là ngôn ngữ hướng module
- C# sẽ trở nên phổ biến
1. C# là ngôn ngữ đơn giản
- C# loại bỏ được một vài sự phức tạp và rối rắm của các ngôn ngữ C++ và Java.
- C# khá giống C / C++ về diện mạo, cú pháp, biểu thức, toán tử.
- Các chức năng của C# được lấy trực tiếp từ ngôn ngữ C / C++ nhưng được cải tiến để
làm cho ngôn ngữ đơn giản hơn.
2. C# là ngôn ngữ hiện đại
C# có được những đặc tính của ngôn ngữ hiện đại như:
- Xử lý ngoại lệ
- Thu gom bộ nhớ tự động
- Có những kiểu dữ liệu mở rộng
- Bảo mật mã nguồn
3. C# là ngôn ngữ hướng đối tượng
C# hỗ trợ tất cả những đặc tính của ngôn ngữ hướng đối tượng là:
- Sự đóng gói (encapsulation)
- Sự kế thừa (inheritance)
- Đa hình (polymorphism)
4. C# là ngôn ngữ mạnh mẽ và mềm dẻo
- Với ngôn ngữ C#, chúng ta chỉ bị giới hạn ở chính bản thân của chúng ta. Ngôn ngữ này
không đặt ra những ràng buộc lên những việc có thể làm.
- C# được sử dụng cho nhiều dự án khác nhau như: tạo ra ứng dụng xử lý văn bản, ứng
dụng đồ họa, xử lý bảng tính; thậm chí tạo ra những trình biên dịch cho các ngôn ngữ khác.
- C# là ngôn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa dùng để mô tả
thông tin, nhưng không gì thế mà C# kém phần mạnh mẽ. Chúng ta có thể tìm thấy rằng ngôn
ngữ này có thể được sử dụng để làm bất cứ nhiệm vụ nào.
5. C# là ngôn ngữ hướng module
- Mã nguồn của C# được viết trong Class (lớp). Những Class này chứa các Method
(phương thức) thành viên của nó.
- Class (lớp) và các Method (phương thức) thành viên của nó có thể được sử dụng lại
trong những ứng dụng hay chương trình khác.
6. C# sẽ trở nên phổ biến


Lưu hành nội bộ Trang 2

C# mang đến sức mạnh của C++ cùng với sự dễ dàng của ngôn ngữ Visual Basic.
II. Môi trường lập trình

1. Sử dụng Notepad soạn thảo
§ Bước 1: Soạn thảo tập tin và lưu với tên C:\ChaoMung.cs có nội dung như sau
class ChaoMung
{
static void Main()
{
// Xuat ra man hinh chuoi thong bao 'Chao mung ban den voi C# 2008 '
System.Console.WriteLine("Chao mung ban den voi C# 2008 ") ;
System.Console.ReadLine() ;
}
}
§ Bước 2: Vào menu Start | All Programs | Microsoft Visual Studio 2008 | Visual
Studio Tools | Visual Studio 2008 Command Prompt
§ Bước 3:
- Gõ lệnh biên dịch tập tin ChaoMung.cs sang tập tin ChaoMung.exe
C:\> csc /t:exe /out:chaomung.exe chaomung.cs
- Chạy tập tin ChaoMung.exe và được kết quả như sau :
C:\> chaomung.exe
Chao mung ban den voi C# 2008

2. Sử dụng Micosoft Visual Studio 2008 để tạo chương trình
§ Bước 1: Khởi động Visual Studio 2008
Start | All Programs | Microsoft Visual Studio 2008 | Microsoft Visual Studio 2008
§ Bước 2: Vào menu File | New | Project
§ Bước 3: Khai báo



Lưu hành nội bộ Trang 3

* Mặc định: Visual Studio 2008 (Visual Studio .NET) sẽ tạo ra tập tin Program.cs
chứa một namespace tên ChaoMung và trong namespace này chứa một
class tên Program.
§ Bước 4: trong phương thức Main, gõ đoạn mã lệnh sau
* Ví dụ:
// Xuat ra man hinh chuoi thong bao 'Chao mung ban den voi C# 2008 '
System.Console.WriteLine("Chao mung ban den voi C# 2008 ") ;
System.Console.ReadLine() ;
§ Bước 5: Để chạy chương trình, nhấn F5 hoặc nhắp vào nút

III. Biến, hằng, toán tử

1. Biến
a) Khái niệm:
- Biến là một vùng lưu trữ ứng với một kiểu dữ liệu.
- Biến có thể được gán giá trị và cũng có thể thay đổi giá trị trong khi thực hiện các lệnh
của chương trình.
b) Khai báo biến: Sau khi khai báo biến phải gán giá trị cho biến
<Kiểu_Dữ_Liệu> <tên_biến> [ = <giá_trị> ] ;
c) Ví dụ 1.1: Khởi tạo và gán giá trị một biến
class Bien
{
static void Main()
{
// Khai bao va khoi tao bien
int bien = 9 ;
System.Console.WriteLine("Sau khi khoi tao: bien = {0}", bien) ;
// Gan gia tri cho bien
bien = 5 ;
// Xuat ra man hinh
System.Console.WriteLine("Sau khi gan: bien = {0}", bien) ;
}
}

2. Hằng
a) Khái niệm:
- Hằng cũng là một biến nhưng giá trị của hằng không thay đổi trong khi thực hiện các
lệnh của chương trình.
- Hằng được phân làm 3 loại:
+ Giá trị hằng (literal)
+ Biểu tượng hằng (symbolic constants)
+ Kiểu liệt kê (enumerations)
b) Giá trị hằng:
Ví dụ: x = 100; // 100 được gọi là giá trị hằng
c) Biểu tượng hằng: gán một tên hằng cho một giá trị hằng.
Khai báo:
<const> <Kiểu_Dữ_Liệu> <tên_hằng> = <giá_trị> ;
Ví dụ 1.2: Nhập vào bán kính, in ra chu vi và diện tích hình tròn.


Lưu hành nội bộ Trang 4

class HinhTron
{
static void Main()
{
// Khai bao bieu tuong hang
const double PI = 3.14159 ;
// Khai bao bien
int bankinh ;
double chuvi , dientich ;
string chuoi ;
// Nhap gia tri cho bien chuoi
System.Console.Write("Nhap ban kinh hinh tron: ") ;
chuoi = System.Console.ReadLine() ;
// Doi chuoi thanh so va gan vao bien so
bankinh = System.Convert.ToInt32(chuoi) ;
// Gan gia tri cho bien
chuvi = 2 * bankinh * PI ;
dientich = bankinh * bankinh * PI ;
// Xuat ra man hinh
System.Console.WriteLine("Chu vi hinh tron = {0:0.00}", chuvi) ;
System.Console.WriteLine("Dien tich hinh tron = {0:0.00}", dientich) ;
}
}
d) Kiểu liệt kê: là tập hợp các tên hằng có giá trị số không thay đổi (danh sách liệt kê)
Khai báo:
<enum> <Tên_Kiểu_Liệt_Kê>
{
<tên_hằng_1> = <giá_trị_số_1>,
<tên_hằng_2> = <giá_trị_số_2>,
... ,
} ;
Ví dụ:
enum NhietDoNuoc
{
DoDong = 0, DoNguoi = 20,
DoAm = 40, DoNong = 60,
DoSoi = 100,
} ;

3. Toán tử
a) Toán tử toán học: + , - , * , / , %
b) Toán tử tăng / giảm: += , -= , *= , /= , %=
c) Toán tử tăng / giảm 1 đơn vị: ++ , --
d) Toán tử gán: =
e) Toán tử quan hệ: == , != , > , >= , < , <=
f) Toán tử logic: ! , && , ||
g) Toán tử 3 ngôi: (Điều_Kiện) ? (Biểu_Thức_1) : (Biểu_Thức_2) ;



Lưu hành nội bộ Trang 5

IV. Quy tắc lập trình, ứng dụng Console Application

1. Quy tắc lập trình
Khi tạo một chương trình trong C#, chúng ta nên thực hiện theo các bước sau:
§ Bước 1: Xác định mục tiêu của chương trình
§ Bước 2: Xác định những phương pháp giải quyết vấn đề
§ Bước 3: Tạo một chương trình để giải quyết vấn đề
§ Bước 4: Thực thi chương trình để xem kết quả

2. Ứng dụng Console Application
Là ứng dụng giao tiếp với người dùng thông qua bàn phím và không có giao diện người
dùng (UI).
Ví dụ 1.3:
using System;
class ChaoMung
{
static void Main()
{
// Xuat ra man hinh chuoi thong bao 'Chao mung ban den voi C# 2008 '
Console.WriteLine("Chao mung ban den voi C# 2008 ") ;
Console.ReadLine() ;
}
}
* Phần Bổ sung
1. Namespace
- .NET cung cấp một thư viện các class rất đồ sộ, trong đó Console là một class nhỏ trong
thư viện các class này.
- Mỗi class có một tên riêng, vì vậy người lập trình không thể nào nhớ hết tên các class
trong .NET. Để giải quyết vấn đề này là việc tạo ra một namespace, namespace sẽ hạn chế
phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong vùng đã định nghĩa.
2. Từ khóa using
- Để không phải viết namespace cho từng đối tượng, ta dùng từ khóa using.
- Ta có thể dùng dòng lệnh sau ở đầu chương trình:
using System ;
Khi đó, thay vì viết đầy đủ System.Console. ta chỉ cần viết Console.
3. Từ khóa static
Từ khóa static chỉ ra rằng hàm Main() có thể được gọi mà không cần phải tạo đối tượng
ChaoMung.
4. Từ khóa this
Từ khóa this dùng để tham chiếu đến thể hiện hiện hành của đối tượng.
5. Chú thích (Comment)
- Một chương trình được viết tốt thì cần phải có chú thích các đoạn mã lệnh được viết.
- Mục đích chính là làm cho đoạn mã lệnh nguồn rõ ràng và dễ hiểu.
- Có 2 loại chú thích:
+ Chú thích một dòng: //
+ Chú thích nhiều dòng: /* */
6. Phân biệt chữ thường và chữ hoa
C# là ngôn ngữ phân biệt chữ thường với chữ hoa.


Lưu hành nội bộ Trang 6

7. Toán tử '. '
Toán tử '. ' được sử dụng để truy cập đến phương thức hay dữ liệu trong một class và
ngăn cách giữa tên class đến một namespace.
Ví dụ: System
.
Console
.
WriteLine()


8. Câu lệnh (statement)
Một chỉ dẫn lập trình đầy đủ được gọi là một câu lệnh.
Ví dụ: int bankinh = 5 ; // một câu lệnh
chuvi = 2 * bankinh * PI ; // một câu lệnh khác
9. Kiểu chuỗi ký tự
Kiểu chuỗi ký tự là một mảng các ký tự.
a) Khai báo chuỗi hằng:
string <Tên_chuỗi_hằng> = <"Noi dung chuoi hang"> ;
Ví dụ: string tentuong = "Nhat Nghe" ;
b) Khai báo biến kiểu chuỗi:
string <Biến_chuỗi> [= "Noi dung chuoi hang"] ;
Ví dụ: string hoten = "Nguyen Van Teo" ;
c) Nhập chuỗi:
<Biến_chuỗi> = System.Console.ReadLine() ;
Ví dụ: hoten = System.Console.ReadLine() ;
d) Xuất chuỗi:
System.Console.WriteLine("Chuoi") ;
Ví dụ: System.Console.WriteLine("Do dai cua chuoi la:") ;
e) Một số thao tác trên chuỗi:
Phương thức Ý nghĩa
Length Chiều dài của chuỗi
Substring() Lấy chuỗi con
ToLower() Trả về bản sao của chuỗi ở kiểu chữ thường
ToUpper() Trả về bản sao của chuỗi ở kiểu chữ IN HOA
Ví dụ 1.4: Nhập vào họ và tên, in ra màn hình họ tên bằng chữ IN HOA, chữ thường, độ
dài của họ và tên.
using System ;
class HoTen
{
static void Main()
{ // Khai bao bien
string hoten ;
// Nhap gia tri cho bien chuoi
Console.Write("Nhap Ho va Ten: ") ;
hoten = Console.ReadLine() ;
// Thao tac tren chuoi
string HT = hoten.ToUpper() ;
string ht = hoten.ToLower() ;
int dodai = hoten.Length ;
// Xuat ra man hinh
Console.WriteLine("Ho va Ten (chu IN HOA): {0}", HT) ;
Console.WriteLine("Ho va Ten (chu thuong): {0}", ht) ;
namespace class phương thức


Lưu hành nội bộ Trang 7

Console.WriteLine("Do dai Ho va Ten la: {0}",dodai) ;
}
}

10. Bảng liệt kê các từ khóa của ngôn ngữ C# 2008
abstract event new struct
as explicit null switch
base extern object this
bool false operator throw
break finally out true
byte fixed override try
case float params typeof
catch for private unit
Char foreach protected ulong
checked goto public unchecked
Class if readonly unsafe
Const implicit ref ushort
continue in return using
decimal interface sbyte virtual
default internal sealed volatile
delegate is short void
do lock sizeof while
double long stackalloc
else namespace static
enum string
from get group
into join let
orderby partial (type) partial (method)
select set value
where (generic type constraint) where (query clause) yield

Bài tập
1. Viết chương trình nhập vào 1 số nguyên n. Cho biết:
a) n là số chẵn hay số lẻ ?
b) n là số âm hay số không âm ?
2. Viết chương trình nhập vào 2 số thực dương chỉ chiều dài và chiều rộng của hình chữ
nhật. In ra màn hình chu vi và diện tích của hình chữ nhật đó.


Lưu hành nội bộ Trang 8

3. Viết chương trình nhập vào một số thực dương chỉ cạnh của một hình vuông. Tính diện
tích và chu vi của hình vuông đó.
4. Viết chương trình nhập vào họ tên (HoTen), điểm toán (Toan), điểm lý (Ly), điểm hoá
(Hoa) của một học sinh. In ra màn hình họ tên của học sinh dưới dạng chữ IN HOA và
điểm trung bình (Dtb) của học sinh này theo công thức: Dtb = (Toan + Ly + Hoa) / 3
5. Viết chương trình nhập bậc lương (BacLuong), ngày công (NgayCong), phụ cấp
(PhuCap). Tính tiền lãnh (TienLanh) = BacLuong * 650000 * NCTL + PhuCap
Với: NCTL = NgayCong nếu NgayCong < 25
= (NgayCong – 25) * 2 + 25 nếu NgayCong >= 25
--- oOo ---


Lưu hành nội bộ Trang 9

Bài 2:
(tiếp theo)
KIỂU DỮ LIỆU – CẤU TRÚC ĐIỀU KHIỂN – CẤU TRÚC LẶP


V. Kiểu dữ liệu

C# chia kiểu dữ liệu thành hai tập hợp kiểu dữ liệu chính:
- Kiểu xây dựng sẵn (built-in): do ngôn ngữ cung cấp cho người lập trình.
- Kiểu do người dùng định nghĩa (user-defined): do người lập trình tạo ra.
1. Kiểu dữ liệu dựng sẵn
Kiểu C# Số byte Kiểu .NET Mô tả
byte 1 Byte Số nguyên dương không dấu từ 0 đến 255
char 2 Char Ký tự Unicode
bool 1 Boolean Giá trị logic true / false
sbyte 1 Sbyte Số nguyên có dấu từ -128 đến 127
short 2 Int16 Số nguyên có dấu từ -32768 đến 32767
ushort 2 Uint16 Số nguyên dương không dấu từ 0 đến 65535
int 4 Int32 Số nguyên có dấu từ -2.147.483.647 đến
2.147.483.647
uint 4 Uint32 Số nguyên không dấu từ 0 đến 4.294.967.295
float 4 Single Kiểu dấu chấm động, giá trị xấp xỉ từ
-3.4E-38 đến 3.4E+38, với 7 chữ số có nghĩa
double 8 Double Kiểu dấu chấm động có độ chính xác gấp
đôi, giá trị xấp xỉ từ -1.7E-308 đến
1.7E+308, với 15, 16 chữ số có nghĩa
decimal 8 Decimal Có độ chính xác đến 28 con số và giá trị thập
phân, được dùng trong tính toán tài chính,
kiểu này đòi hỏi phải có hậu tố “m” hay “M”
long 8 Int64 Kiểu số nguyên có dấu có giá trị trong
khoảng -9.223.370.036.854.775.808 đến
9.223.372.036.854.775.807
ulong 8 Uint64 Số nguyên không dấu từ 0 đến
0xfffffffffffffff
* Bảng trình bày các ký tự đặc biệt
Ký tự Ý nghĩa
\' Dấu nháy đơn
\" Dấu nháy kép
\\ Dấu chéo
\0 Ký tự null
\a Alert
\b Backspace
\f Sang trang form feed
\n Dòng mới
\r Đầu dòng
\t Tab ngang
\v Tab dọc


Lưu hành nội bộ Trang 10


2. Chuyển đổi kiểu dữ liệu
Ví dụ a:
short x = 10 ;
int y = x ; // chuyển đổi ngầm định
Ví dụ b:
short x ;
int y = 100 ;
x = (short) y ; // ép kiểu tường minh, trình biên dịch không báo lỗi
Ví dụ c:
short x ;
int y = 100 ;
x = y ; // không biên dịch, lỗi

VI. Cấu trúc điều khiển

1. Câu lệnh if … else
a) Cú pháp:
if (Điều_Kiện)
<Khối lệnh Điều_Kiện đúng>
[else
<Khối lệnh Điều_Kiện sai>]
b) Ví dụ 2.1: Dùng câu lệnh điều kiện if … else
using System;
class Chan_Le
{
static void Main()
{
// Khai bao va khoi tao bien
int bienDem = 9 ;
// Xuat ra man hinh
if (bienDem % 2 == 0)
Console.WriteLine("{0} la so chan", bienDem) ;
else Console.WriteLine("{0} la so le", bienDem) ;
}
}

2. Câu lệnh if lồng nhau
a. Cú pháp:
if (Điều_Kiện_1)
<Khối lệnh 1>
else if (Điều_Kiện_2)
<Khối lệnh 2.1>
else
<Khối lệnh 2.2>
b. Ví dụ 2.2:
using System;
class Thu_Trong_Tuan


Lưu hành nội bộ Trang 11

{
static void Main()
{
// Khai bao va khoi tao bien
int thu = 5 ; // 0: Chu nhat, 1: Thu hai, 2: Thu ba, 3: Thu tu,
// 4: Thu nam, 5: Thu sau, 6: Thu bay
// Xuat ra man hinh
if ((thu == 1) || (thu == 3) || (thu == 5))
Console.WriteLine("Day la ngay 2-4-6") ;
else if ((thu == 2) || (thu == 4) || (thu == 6))
Console.WriteLine("Day la ngay 3-5-7") ;
else Console.WriteLine("Day la ngay chu nhat") ;
}
}

3. Câu lệnh switch
a. Cú pháp:
switch (Biểu_Thức)
{
case <giá_trị_1>:
< Khối lệnh 1>
<Lệnh Nhảy>
case <giá_trị_2>:
< Khối lệnh 2>
<Lệnh Nhảy>
….
[default:
< Khối lệnh khác>]
}
b. Ví dụ 2.3:
using System;
class Thu
{
static void Main()
{
// Khai bao va khoi tao bien
int thu = 5 ; // 0: Chu nhat, 1: Thu hai, 2: Thu ba, 3: Thu tu,
// 4: Thu nam, 5: Thu sau, 6: Thu bay
// Xuat ra man hinh
switch (thu)
{
case 0:
Console.WriteLine("Chu nhat") ;
break;
case 1:
Console.WriteLine("Thu hai") ;
break;
case 2:


Lưu hành nội bộ Trang 12

Console.WriteLine("Thu ba") ;
break;
case 3:
Console.WriteLine("Thu tu") ;
break;
case 4:
Console.WriteLine("Thu nam") ;
break;
case 5:
Console.WriteLine("Thu sau") ;
break;
case 6:
Console.WriteLine("Thu bay") ;
break;
default:
Console.WriteLine("Khong phai la thu trong tuan") ;
break;
}
}
}

VII. Cấu trúc lặp

1. Lệnh lặp while
a. Cú pháp:
while (Điều_Kiện)
< Khối lệnh>
b. Ví dụ 2.4:
using System;
class UsingWhile
{
static void Main()
{
// Khai bao va khoi tao bien dem
int i = 1 ;
// Xuat ra man hinh
while (i<=10) {
Console.WriteLine("i = {0}",i) ;
i++ ; // tang bien dem,
}
}
}

2. Lệnh lặp do … while
a. Cú pháp:
do
< Khối lệnh>
while (Điều_Kiện) ;


Lưu hành nội bộ Trang 13

b. Ví dụ 2.5:
using System;
class UsingDoWhile
{
static void Main()
{
// Khai bao va khoi tao bien dem
int i = 1 ;
// Xuat ra man hinh
do {
Console.WriteLine("i = {0}",i) ;
i++ ; // tang bien dem
} while (i<= 10) ;
}
}

3. Lệnh lặp for
a. Cú pháp:
for ([Khởi_tạo] ; [Điều_kiện] ; [Bước_lặp])
< Khối lệnh>
b. Ví dụ 2.6:
using System;
class UsingFor
{
static void Main()
{
for (int i=1 ; i<=30 ; i++)
if (i % 10 ==0)
Console.Write("{0} \n\r",i) ;
else Console.Write("{0} ",i) ;
}
}

4. Lệnh lặp foreach
a. Cú pháp:
foreach (<Kiểu_tập_hợp> <Tên_truy_cập_thành_phần> in <Tên_tập_hợp>)
< Khối lệnh>
b. Ví dụ 2.7:
using System;
public class UsingForeach
{
public static void Main()
{
int[] intArray = {1,2,3,4,5,6,7,8,9,10};
foreach (int item in intArray)
Console.WriteLine("i = {0} ",item) ;
}
}


Lưu hành nội bộ Trang 14

Bài tập

1. Viết chương trình nhập vào 3 số nguyên. In ra màn hình số nguyên nhỏ nhất trong 3 số
đó.
2. Viết chương trình nhập vào họ tên, điểm thi cuối kỳ của một học sinh. In ra họ tên học
sinh bằng chữ IN HOA, và kết quả xếp loại của học sinh theo tiêu chuẩn sau:
- Giỏi: Nếu Điểm kết quả >= 8
- Khá: Nếu 8 > Điểm >= 6.5
- Trung bình: Nếu 6.5 > Điểm >= 5
- Yếu: Nếu Điểm < 5
3. Viết chương trình giải phương trình bậc 1: bx + c = 0
4. Viết chương trình giải phương trình bậc 2: ax
2
+ bx + c = 0
5. Viết chương trình nhập vào một số nguyên cho đến khi nhận được số nguyên dương thì
dừng.
6. Viết chương trình nhập vào một số nguyên n. Cho biết số nguyên n có phải là số nguyên
tố không ?
7. Viết chương trình nhập vào một số nguyên dương n chỉ năm dương lịch. Cho biết n có
phải là năm nhuận không ?
8. Viết chương trình nhập vào số nguyên dương n. In ra màn hình kết quả của các tổng sau:
a) S
1
= 1 + 2 + 3 + ... + n
b) S
2
= 1 +
1
2
+
1
3
+ ... +
1
n

9. Viết chương trình nhập vào số nguyên dương n. In ra màn hình:
a) Các số nguyên dương từ 1 đến n
b) Tổng và trung bình cộng của n số nguyên dương này.


--- oOo ---


Lưu hành nội bộ Trang 15

Chương 2:
XÂY DỰNG WINDOWS FORMS APPLICATION


Bài 3:
XÂY DỰNG WINDOWS FORMS APPLICATION


I. Sử dụng Microsoft Visual Studio 2008

1. Khởi động
§ Bước 1: Khởi động Visual Studio 2008
Start | All Programs | Microsoft Visual Studio 2008 | Microsoft Visual Studio 2008
§ Bước 2: Vào menu File | New | Project
§ Bước 3: Khai báo

· Mở hộp ToolBox: Menu View | ToolBox à chứa các control
· Mở cửa sổ Properties: Menu View | Properties à chứa thuộc tính
· Mở cửa sổ Solution Explorer: Menu View | Solution Explorer à cửa sổ Project
xuất hiện.
§ Bước 4: Thiết kế Form – Viết code
· Thiết kế form: Nhắp vào View Designer (trong cửa số Solution Explorer)
· Viết code: Nhắp vào View Code (trong cửa số Solution Explorer)
§ Bước 5: Để chạy chương trình, nhấn F5 hoặc nhắp vào nút
Để dừng chương trình, nhấn Shift + F5 hoặc nhắp vào nút
* Các thao tác với Project / Solution
a. Tạo Project


Lưu hành nội bộ Trang 16

C1. Vào menu File | New | Project
C2. Ctrl + Shift + N
C3. Chọn công cụ New Project trên thanh Standart
b. Mở Project / Solution:
C1. Vào menu File | Open | Project / Solution
C2. Ctrl + Shift + O
c. Lưu Project / Solution
C1. Vào menu File | Save All
C2. Chọn công cụ Save All trên thanh Standart
d. Đóng Solution: Vào menu File | Close Solution

2. Màn hình giao diện của Windows Forms
a. Cửa sổ thiết kế Form (Designer):

b. Cửa sổ thiết viết code:

* Các thao tác với Form
a. Thêm một Form mới vào Project:


Lưu hành nội bộ Trang 17

b1. C1. Vào menu Project | Add New Item …
C2. Chọn công cụ Add New Item trên thanh Standart
b2. Khai báo
+ Categories: chọn Windows Forms
+ Templates: chọn Windows Form
+ Name: đặt tên Form
b3. Nhắp Add
b. Thêm một Form có sẵn vào Project:
b1. Vào menu Project | Add Existing Item …
b2. Chọn Form
b3. Nhắp Add
c. Xóa bỏ một Form đang có trong Project:
b1. Chọn Form cần gỡ bỏ (ở cửa sổ Solution Explorer)
b2. Vào menu Edit | Delete
d. Lưu Form
- Vào menu File | Save Form.cs
- Ctrl + S
* Ghi chú
- Ta đem “bỏ vào” form các đối tượng như: Label, TextBox, Button, …
+ Label, TextBox, Button, … được gọi là control hay còn gọi là component.
+ Form được gọi là control “chứa”.
- Khi thay đổi nội dung của Label, TextBox, Button, … ta thay đổi vào Text. Text được
gọi là Property của control.

3. Control là gì?
- Control là lớp (class) các thành phần được thêm vào Windows Forms để tương tác giữa
người sử dụng với Windows.
- Có rất nhiều loại control trong Windows Forms như: Label, TextBox, ListBox,
ComboBox, Button, …
- Các control sử dụng trên Windows Forms dùng namespace System.Windows.Forms.

4. Properties (thuộc tính) của control
- Properties là những thông tin mà ta có thể thay đổi nội dung, cách trình bày … của
người thiết kế để ứng dụng vào control.
- Mỗi lớp (class) có nhiều property khác nhau. Tuy nhiên, vẫn có một số property giống
nhau được xây dựng từ lớp ban đầu.
* Bảng trình bày các thuộc tính (Properties) giống nhau
Thuộc tính Mô tả
Anchor Có 4 hướng được định nghĩa là: top, bottom, left, right để cố định (neo).
Khi control chứa nó thay đổi kích thước thì nó sẽ bị thay đổi kích thước
nếu nếu các hướng left / right / top / bottom bị cố định (neo).
BackColor Màu nền của control.
Bottom Là khoảng cách theo chiều dọc từ cạnh đáy của control đến cạnh trên
của control chứa nó.
Dock Giống như Anchor nhưng việc cố định (neo) này theo một cạnh nào đó
của control (hoặc cả 4 cạnh) với control chứa nó.
Enabled Control được phép tương tác (True) hay không được phép tương tác
(False)) với người dùng.


Lưu hành nội bộ Trang 18

ForeColor Màu chữ của control.
Height Là chiều cao của control tính từ cạnh trên của control đến cạnh dưới của
control.
Left Là khoảng cách theo chiều ngang từ cạnh trái của control đến cạnh trái
của control chứa nó.
Name Tên của control.
Parent Chỉ đến control chứa control hiện hành.
Right Là khoảng cách theo chiều ngang từ cạnh phải của control đến cạnh trái
của control chứa nó.
TabIndex Thứ tự focus khi nhấn phím Tab (trên bàn phím) của control so với các
control khác cùng nằm trong control chứa nó.
TabStop Chỉ định control có được phép “bắt” (True) / không được phép “bắt”
(False) phím Tab. Nếu không được phép thì TabIndex cũng không dùng
được.
Tag Là nhãn phân biệt giữa các control giống nhau trong cùng form.
Text Nội dung hiện trong control.
Top Là khoàng cách theo chiều dọc từ cạnh trên của control đến cạnh trên
của control chứa nó.
Visible Cho phép control hiện (True) / không hiện (False) khi chạy ứng dụng.
Width Là chiều rộng của control tính từ cạnh trái của control đến cạnh phải của
control.
* Bảng trình bày các phương thức (Method) xử lý trên chuỗi
Phương thức Mô tả
Clear() Xóa nội dung
ResetText() Xóa nội dung Text
Trim() Cắt bỏ khoảng trắng thừa hai bên chuỗi

II. Các control cơ bản

1. Label ( )
a. Công dụng:
- Hiển thị chuỗi ký tự không thay đổi trên form (nhãn).
b. Tạo Label:
- Chọn công cụ
- Rê chuột và vẽ Label trên form.
c. Thuộc tính:
Thuộc tính Mô tả
AutoSize Điều chỉnh kích thước đối tượng cho vừa với chiều dài chuỗi ký tự
Font
Name Quy định font chữ cho văn bản
Bold True: đậm / False: bỏ đậm
Italic True: nghiêng / False: bỏ nghiêng
Size Quy định cỡ chữ cho văn bản
Underline True: gạch dưới / False: bỏ gạch dưới
TextAlign Canh lề (Left / Center / Right)
2. TextBox ( )


Lưu hành nội bộ Trang 19

a. Công dụng:
- Dùng trình bày văn bản và cho phép người dùng được thay đổi nội dung văn bản.
- Công dụng chính là cho người dùng nhập văn bản.
b. Tạo TextBox:
- Chọn công cụ
- Rê chuột và vẽ TextBox trên form.
c. Thuộc tính:
Thuộc tính Mô tả
PasswordChar Quy định ký tự hiển thị cho ô mật khẩu.
Multiline True: hiện thanh cuộn / False: không hiện thanh cuộn
ScrollBars Thanh cuộn (None / Horizontal / Vertical / Both)
3. Button ( )
a. Công dụng:
- Dùng để thực thi lệnh.
- Khi nhắp chuột lên button, chương trình nhận được tín hiệu Click và lệnh được thi hành.
b. Tạo Button:
- Chọn công cụ
- Rê chuột và vẽ Button trên form.
c. Thuộc tính:
Thuộc tính Mô tả
Text Nhập nội dung vào Button
4. CheckBox ( )
a. Công dụng:
- Cho phép người dùng chọn hoặc không chọn.
b. Tạo CheckBox:
- Chọn công cụ
- Rê chuột và vẽ CheckBox trên form.
c. Thuộc tính:
Thuộc tính Mô tả
Checked Không có dấu check (False) / Có dấu check (True)
Ví dụ 3.1:
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 3.1 như sau:

* Yêu cầu:
- Nhập:
+ Username vào TextBox Tên đăng nhập (Name: txtUser)
+ Password vào TextBox Mật khẩu (Name: txtPass)


Lưu hành nội bộ Trang 20

- Chọn hoặc không chọn ô CheckBox Ghi nhớ (Name: chkNho)
- Nhắp button Đăng nhập thì hiện ra hộp thông báo chứa Tên đăng nhập, Mật khẩu; Và
“Bạn có ghi nhớ” (nếu chkNho có đánh dấu chọn).
- Nhắp button Xóa thì xóa trống TextBox Tên đăng nhập và TextBox Mật khẩu, đồng
thời di chuyển con trỏ vào txtUser.
- Nhắp button Dừng thì dừng chương trình.
* Hướng dẫn:
- Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True
+ Font: Times New Roman
+ Size: 12
+ Text: Form Đăng Nhập
+ Icon: logo.ico
- Nhắp đúp vào button Đăng nhập, thêm đoạn code sau:
string thongbao;
thongbao = "Tên đăng nhập là: " ;
thongbao += this.txtUser.Text ;
thongbao += "\n\rMật khẩu là: " ;
thongbao += this.txtPass.Text;
if (this.chkNho.Checked==true) {
thongbao += "\n\rBạn có ghi nhớ.";
}
MessageBox.Show(thongbao,"Thông báo");

- Nhắp đúp vào button Xóa, thêm đoạn code sau:
this.txtUser.Clear();
this.txtPass.Clear();
this.txtUser.Focus();
- Nhắp đúp vào button Dừng, thêm đoạn code sau:
Application.Exit();
+ Có thể thay button Xóa bằng button Reset với đoạn code như sau:
this.txtUser.ResetText();
this.txtPass.ResetText();
this.txtUser.Focus();
* Phần Bổ sung:
1. MessageBox.Show: hiện hộp thông báo
MessageBox.Show("Thông báo" , "Tiêu đề");
MessageBox.Show("Thông báo", "Tiêu đề", Buttons, Icon);
+ Buttons (nút lệnh):
MessageBoxButtons.OK
MessageBoxButtons.OKCancel
MessageBoxButtons.YesNo
MessageBoxButtons.YesNoCancel
+ Icon (biểu tượng):
MessageBoxIcon.Information
MessageBoxIcon.Question
MessageBoxIcon.Warning
+ DialogResult (kết quả trả về):
DialogResult.Ok


Lưu hành nội bộ Trang 21

DialogResult.Yes
2. Dừng chương trình:
this.Close();
Application.Exit();
3. Event (sự kiện) là gì?
- Sự kiện là những phản ứng của đối tượng. Nói cách khác, sự kiện là những tín hiệu phát
ra khi người dùng thao tác trên đối tượng.
- Nhờ có event, người lập trình sẽ nhận được những tín hiệu và xử lý những tín hiệu đó để
phản hồi lại cho người dùng, tạo nên sự nhịp nhàng cho chương trình.
4. Bảng trình bày các sự kiện (Events) của control
Sự kiện Mô tả
Click Gọi đến khi control bị Click. Trong một vài control, event này cũng xảy
ra khi người dùng nhấn phím Enter.
DoubleClick Gọi đến khi control bị Double-Click. Trong một vài control, event này
không báo giờ được gọi. Ví dụ: control Button.
DragDrop Gọi đến khi việc “Drag and Drop” được hoàn tất.
DragEnter Gọi đến khi đối tượng vừa được “Drag” đến biên của control.
DragLeave Gọi đến khi đối tượng vừa được “Drag” ra ngoài biên của control.
DragOver Gọi đến khi đối tượng được “Drag” bên trong control.
KeyDown Gọi đến khi vừa bấm một phím bất kỳ từ 1 control đang focus.
Sự kiện này luôn được gọi trước sự kiện KeyUp.
KeyPress Gọi đến khi vừa bấm một phím bất kỳ từ 1 control được focus.
Sự kiện này được gọi sau sự kiện KeyUp.
KeyUp Gọi đến khi vừa bấm một phím bất kỳ rồi thả ra từ 1 control đang focus.
Sự kiện này luôn được gọi sau sự kiện KeyDown.
GotFocus Gọi đến khi control được focus.
LostFocus Gọi đến khi control bị mất focus.
MouseDown Gọi đến khi con trỏ chuột nằm trên 1 control và nút chuột được nhắp
nhưng chưa thả ra.
MouseMove Gọi đến khi con trỏ chuột đi qua 1 control.
MouseUp Gọi đến khi con trỏ chuột nằm trên 1 control và nút chuột vừa được thả.
Paint Gọi đến khi control được vẽ.
Validated Gọi đến khi control focus, property CaucesValidation được đặt là true
và sau khi gọi việc kiểm tra bằng Validating.
Validating Gọi đến khi control mất focus, property CaucesValidation được đặt là
true.
Ví dụ 3.2:
* Cải tiến Vi Du 3.1 cho button Dừng như sau:
- Khi nhắp vào button Dừng thì xuất hiện hộp thoại hỏi đáp có 2 button Ok, Cancel.
- Chương trình chỉ dừng khi nhắp tiếp vào nút Ok.
* Hướng dẫn: Sửa lại button Dừng như sau
DialogResult traloi;
traloi = MessageBox.Show("Chắc không?", "Trả lời",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if ( traloi == DialogResult.OK) Application.Exit();
Ví dụ 3.3:
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 3.3 gồm:


Lưu hành nội bộ Trang 22

- Form1: được thiết kế như sau

- Form2: được thiết kế như sau

(txtUser, txtPass, btnDangnhap, btnThoat)
* Yêu cầu:
- Khi chạy chương trình thì Form2 (Đăng nhập hệ thống) được mở lên trước.
- Nhập:
+ Tên người dùng vào TextBox txtUser
+ Mật khẩu vào TextBox txtPass
- Nhắp button Đăng nhập thì thực hiện kiểm tra
+ Nếu txtUser = "teonv" và txtPass = "123" thì chuyển sang Form1.
+ Ngược lại thì thông báo "Không đúng tên người dùng / mật khẩu !!!"
- Nhắp button Thoát thì hiển thị thông báo "Chắc không? "
+ Nếu chọn Yes thì kết thúc chương trình.
+ Ngược lại thì trở lại màn hình Đăng nhập hệ thống.
* Hướng dẫn:
- Form1
. Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True
+ Font: Times New Roman
+ Size: 12
+ Text: Màn hình chính
+ Icon: star.ico
. Form load:
Form frm = new Form2();
frm.ShowDialog();
- Form2
. Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True
+ Font: Times New Roman


Lưu hành nội bộ Trang 23

+ Size: 12
+ Text: Đăng nhập hệ thống
+ Icon: logo.ico
. Đăng nhập: Nhắp đúp vào button btnDangnhap, gõ vào đoạn code sau
if ((
this.txtUser.Text=="teonv"
)&&(
this.txtPass.Text=="123"
))
this.Close();
else
{
MessageBox.Show("Không đúng tên người dùng / mật
khẩu !!!","Thông báo");
this.txtUser.Focus();
}
. Thoát: Nhắp đúp vào button btnThoat, gõ vào đoạn code sau
DialogResult traloi;
traloi = MessageBox.Show("Chắc không?", "Trả lời",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if ( traloi == DialogResult.OK)
Application.Exit();

Bài tập

1. - Thiết kế form như mẫu.

(txtsSo1, txtSo2, txtKQ, btnCong, btnTru, btnNhan, btnChia, btnXoa)
- Viết chương trình làm các phép toán: cộng, trừ, nhân, chia cho các button btnCong,
btnTru, btnNhan, btnChia.
- Xóa: Xóa trắng các TextBox.
- Thêm vào button Dừng (btnDung), khi nhắp vào btnDung thì dừng chương trình.
- Cải tiến:
Khi nhắp button btnChia, nếu txtSo2 là 0 thì xuất hiện hộp thông báo lỗi rồi xóa trống
txtSo2 và di chuyển con trỏ đến TextBox này.
2. Viết chương trình giải phương trình bậc nhất: bx + c = 0