khối: cao Đẳ năm 2012 - · pdf filenhững sinh viên chưa hòan ... f5...

102
Hướng dẫn thực hành - Lập trình Windows 1 Trang 1/102 Khối: Cao Đẳng và Trung Cấp Năm 2012 Hướng dẫn: Bài tập thực hành được chia làm nhiều Module Mỗi Module được thiết kế cho thời lượng là 3 tiết thực hành tại lớp với sự hướng dẫn của giảng viên. Tùy theo số tiết phân bổ, mỗi tuần học có thể thực hiện nhiều Module. Sinh viên phải làm tất cả các bài tập trong các Module ở tuần tương ứng. Những sinh viên chưa hòan tất phần bài tập tại lớp có trách nhiệm tự làm tiếp tục ở nhà. Các bài có dấu (*) là các bài tập nâng cao dành cho sinh viên khá giỏi.

Upload: doanlien

Post on 03-Feb-2018

216 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 1/102

Khối: Cao Đẳng và Trung Cấp

Năm 2012

Hướng dẫn:

Bài tập thực hành được chia làm nhiều Module

Mỗi Module được thiết kế cho thời lượng là 3 tiết thực hành tại lớp với sự

hướng dẫn của giảng viên.

Tùy theo số tiết phân bổ, mỗi tuần học có thể thực hiện nhiều Module.

Sinh viên phải làm tất cả các bài tập trong các Module ở tuần tương ứng.

Những sinh viên chưa hòan tất phần bài tập tại lớp có trách nhiệm tự làm

tiếp tục ở nhà.

Các bài có dấu (*) là các bài tập nâng cao dành cho sinh viên khá giỏi.

Page 2: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 2/102

Module 1

Nội dung kiến thức thực hành:

+ Làm quen với ngôn ngữ C#

+ Tạo ứng dụng dạng Console

+ Một số thuộc tính, phương thức qua Console.

Bài 1:

Mục đích:

Sử dụng các properties và methods của các đối tượng trong ứng dụng Console.

Yêu cầu:

Viết ứng dụng dạng Console xuất lời chào.

Yêu cầu xuất ra lời chào sau:

Welcome to

C# 2010 Programming!

Programming by your name

Hướng dẫn:

+ Mở Microsoft Visual Studio 2010

Page 3: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 3/102

Project tạo ra một file mặc định là: Program.cs có chứa một hàm Main()

namespace BaiTapLoiChao { class Program { static void Main(string[] args) { //Viết code trong đây } } }

+ Bạn sửa lại hàm Main() thành như sau.

namespace BaiTapLoiChao { class Program { static void Main(string[] args) { Console.WriteLine("Welcome to "); Console.WriteLine("C# 2010 Programming!"); Console.WriteLine("Programming by your name"); Console.ReadLine(); } } }

+ Chạy chương trình bằng cách nhấn phím F5 được kết quả mong muốn sau:

Bài 2:

Mục đích:

Sử dụng các Properties và Methods của các đối tượng trong ứng dụng Console

Kết hợp định dạng xuất dữ liệu.

Yêu cầu:

+ Rào các statement trong hàm Main của bài 1 chuyển sang dạng

comment.

Page 4: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 4/102

+ Viết lại hàm Main như sau:

static void Main(string[] args)

{

Console.WriteLine("{0}\n{1}", "Welcome to ", "C# 2010 Programming!");

Console.WriteLine( "Programming by your name" );

Console.ReadLine();

}

+ Chạy chương trình bằng cách nhấn phím F5 được kết quả mong muốn

không đổi như bài tập 1:

Bài 3:

Mục đích:

Sử dụng một số hàm toán học và nhập dữ liệu từ bàn phím Kết hợp định dạng

xuất dữ liệu.

Yêu cầu:

+ Tạo Project mới với tên là ThaoTacSo:

Khi chạy chương trình xuất ra yêu cầu nhập vào hai số từ bàn phím xuất ra kết

quả tổng của hai số vừa nhập.

Xuất ra mà hình yêu cầu có dạng:

Nhap So Thu Nhat A: ??

Nhap So Thu Hai B: ??

Tong cua ?? Va ?? La: ??

Ví dụ xem hình :

Page 5: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 5/102

Hướng dẫn:

Hàm Main() viết code như sau:

int nSo1, nSo2, nTong=0; Console.Clear(); Console.Write("{0}", "Nhap So thu nhat: "); // read first number from user nSo1 = Convert.ToInt32(Console.ReadLine()); Console.Write("Nhap So thu hai: "); // read second number from user nSo2 = Convert.ToInt32(Console.ReadLine()); nTong = nSo1 + nSo2; Console.WriteLine("Tong cua " + nSo1 + " Va " + nSo2 + " La " + nTong); Console.ReadLine();

+ Mở rộng làm các phép tính cơ bản (cộng, trừ, nhân, chia)

Bài 4:

Mục đích:

Sử dụng một số hàm toán học và nhập dữ liệu từ bàn phím Kết hợp định dạng

xuất dữ liệu.

Yêu cầu:

+ Tạo Project mới với tên là TinhDienTich:

+ Khi chạy chương trình xuất ra yêu cầu nhập vào hai cạnh của một tứ giác

vuông xuất ra kết quả chu vi, diện tích….

Xem hình:

Page 6: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 6/102

Bài 5:

Mục đích:

Sử dụng một số hàm toán học và nhập dữ liệu từ bàn phím Kết hợp định dạng

xuất dữ liệu.

Yêu cầu:

+ Tạo Project mới với tên là PhuongTrinhBac1:

+ Giải và biện luận phương trình bậc 1 : ax+b=0

+ Sinh viên chú ý rằng phương trình có 3 trường hợp: vô nghiệm, vô số nghiệm

và có một nghiệm

+ xem hình để hiểu rõ yêu cầu

Hướng dẫn:

1. Mở Microsoft Visual Studio 2010 và tạo 1 Console Application có

Name là PhuongTrinhBac1

2. Xuất yêu cầu nhập số từ bàn phím

Page 7: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 7/102

a. Khai báo 2 biến chứa giá trị các dữ liệu sẽ nhập và 1 biến chứa

Kết Quả tính được:

int nSoA, nSoB;

double dbKetQua;

b. Xuất ra màn hình yêu cầu nhập chiều thứ nhất :

Console.Write("Nhap so a: ");

c. Đọc và truyền dữ liệu vào biến:

nSoA = Convert.ToInt32(Console.ReadLine())

d. Làm tương tự với số thứ 2:

3. Giải và biện luận phương trình và xuất kết quả :

//nếu số a bằng 0

if (nSoA == 0)

//và số b khác 0

if(nSoB != 0)

//thì xuất câu lệnh bên dưới

Console.WriteLine("Phuong trinh Vo Nghiem!");

// còn nếu số b cũng bằng 0

else

//thì xuất câu lệnh khác

Console.WriteLine("Phuong trinh Vo So Nghiem!");

//ngược lại nếu số a khác 0

else

{

//giải pt bậc 1 bình thường x = -b / a

//nhưng vì a, b đều là số nguyên, khi chia nhau chỉ ra số

nguyên

//nên ta phải chuyển a hoặc b thành kiểu số thực

dbKetQua = -nSoB / (nSoA * 1.0);

//Xuất kq vừa tính được

Console.WriteLine("Phuong trinh co 1 nghiem x= " +

dbKetQua);

}

//giữ kq tồn tại trên màn hình

Console.ReadLine();

Page 8: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 8/102

Bài 6:

Mục đích:

Sử dụng một số hàm toán học và nhập dữ liệu từ bàn phím Kết hợp định dạng

xuất dữ liệu.( làm quen class Math)

Math.Pow(x,y) lấy xy Math.Sqrt(x) lấy căn bậc 2 của x Math.Round(x,2) làm tròn x tới 2 đơn vị

Yêu cầu:

1. Tạo Project mới với tên là PhuongTrinhBac2:

2. Nhập dữ liệu

3. Giải và biện luận phương trình bậc 2 : ax2+bx+c=0

a. Nếu a = 0 : Giải pt bậc 1 với b và c

b. Nếu a !=0

Tính delta = b2 - 4 * a * c

i. Delta < 0 : pt vô nghiệm

ii. Delta = 0 : pt có nghiệm kép

iii. x1 = x2 = -b / (2 * a)

iv. Delta > 0 : pt có 2 nghiệm phân biệt

v. x1 = (-b + √ ) / (2 * a)

vi. x2 = (-b - √ ) / (2 * a)

Sinh viên chú ý rằng phương trình có các trường hợp: vô nghiệm, có 2

nghiệm phân biệt, có 1 nghiệm kép

Xem hình để hiểu rõ yêu cầu:

Page 9: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 9/102

Hướng dẫn:

1. Mở Microsoft Visual Studio 2010 và tạo 1 Console Application có

Name là PhuongTrinhBac2

2. Xuất yêu cầu nhập số từ bàn phím

a. Khai báo 3 biến chứa giá trị các dữ liệu sẽ nhập và các biến chứa

các Kết Quả tính được:

int nSoA, nSoB, nSoC;

double dbX1, dbX2;

b. Xuất ra màn hình yêu cầu nhập chiều thứ nhất :

Console.Write("Nhap so a: ");

c. Đọc và truyền dữ liệu vào biến:

nSoA = Convert.ToInt32(Console.ReadLine())

d. Làm tương tự với số thứ b và c:

3. Giải, biện luận pt bậc 2 và xuất kết quả :

//nếu số a bằng 0 if (nSoA == 0) { //biện luận và giải pt bậc 1 với số b và số c } //ngược lại nếu số a khác 0 else { //truyền dữ liệu cho biến Delta = b * b - 4 * a * c dbDelt = Math.Pow(nSoB, 2) - 4 * nSoA * nSoC; //biện luận dựa trên Delta if (dbDelt < 0)

Page 10: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 10/102

Console.WriteLine("Phuong trinh vo nghiem!"); else //nếu Delta = 0, pt có nghiệm kép if (dbDelt == 0) { Tính X1 } //còn nếu Delta > 0, pt có 2 nghiệm phân biệt else { dbX1 = ? dbX2 = ? //xuất ra kết quả vừa tính được Console.WriteLine("Phuong trinh co 2 nghiem phan biet:"); Console.WriteLine("x1= " + dbX1); Console.WriteLine("x2= " + dbX2); } } Console.ReadLine();

Bài 7:

Mục đích:

Sử dụng một số hàm lượng giác và nhập dữ liệu từ bàn phím Kết hợp định dạng

xuất dữ liệu.( tiếp tục làm quen với class Math)

Math.PI lấy số PI Math.Sin(a) tính sin, với a là radian Math.Cos(a) tính Cos, với a là radian Math.Tan(a) tính Tan, với a là radian

Yêu cầu:

+ Tạo Project mới với tên là CacHamLuongGiac:

+ Nhập 1 góc x. Tính và xuất sinx, cosx, tgx, cotgx.

+ Sinh viên chú ý rằng hàm lượng giác truyền vào là 1 số Radian, do đó các em phải

đổi góc x ra radian, công thức đổi như sau a=x*PI/180

+ Xem hình để hiểu rõ yêu cầu

Page 11: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 11/102

Gợi ý tính hàm sin: double fx; Console.Write("Nhap vao 1 goc: "); fx = Convert.ToDouble(Console.ReadLine()); double rad = fx * Math.PI / 180; Console.WriteLine("Sin({0})={1}",fx,Math.Sin(rad));

Bài 8:

Mục đích:

Sử dụng một số hàm lượng giác và nhập dữ liệu từ bàn phím Kết hợp định dạng

xuất dữ liệu.( tiếp tục làm quen với class Math)

Yêu cầu:

1. Tạo Project mới với tên là ChuViDienTichTamGiac:

2. Nhập cạnh a>0, b>0, c>0.

3. Nếu a, b, c tạo thành tam giác thì hãy tính và xuất chu vi, diện tích hình tam giác.

Ngược lại thông báo “Không tạo thành tam giác”

3 đoạn thẳng tạo thành 1 tam giác khi và chỉ khi tổng độ dài 2 cạnh bất kỳ lớn

hơn độ dài cạnh còn lại

Công thức:

Chu vi = a + b + c

p = cv / 2

Diện tích = √ ( ) ( ) ( )

Page 12: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 12/102

Hướng dẫn

1. Mở Microsoft Visual Studio 2010 và tạo 1 Console Application có

Name là ChuViDienTichTamGiac

2. Xuất yêu cầu nhập số từ bàn phím

a. Khai báo biến chứa Dữ liệu và Kết quả tính được :

int nA, nB, nC, nChuVi;

double dbP, dbDienTich;

b. Xuất ra màn hình yêu cầu nhập các cạnh:

Console.Write("Nhap canh a: ");

c. Đọc và truyền dữ liệu vào biến:

nA = Convert.ToInt32(Console.ReadLine());

d. Làm tương tự với các cạnh còn lại:

3. Tính toán và xuất kết quả

//kiểm tra điều kiện tạo thành 1 tam giác //nếu thoả điều kiện thì tính if (nA + nB > nC && nA + nC > nB && nB + nC > nA) {

nChuVi = ?; dbP = nChuVi / 2.0; Console.WriteLine("Chu vi tam giac: " + nChuVi); dbDienTich = ?; Console.WriteLine("Dien tich tam giac: " + dbDienTich);

} //không thỏa điều kiện thì xuất câu thông báo else

Console.WriteLine("Khong tao thanh tam giac!"); Console.ReadLine();

Bài 9(*):

Mục đích:

Sử dụng hàm toán học và nhập dữ liệu từ bàn phím Kết hợp định dạng xuất dữ

liệu.

Yêu cầu:

+ Tạo Project mới với tên là TinhTongChuoiSo: + Nhập x, n để tính tổng chuỗi số sau (làm tròn 3 chữ số):

Page 13: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 13/102

Hướng dẫn:

Với dạng toán này ta thấy mỗi số hạng từ trái qua phải bao gồm:

1) Tử số: xi, với i bắt đầu từ 1, tăng thêm 1 khi qua số hạng kế tiếp và tang

đến khi = n

2) Mẫu số: k! với k bắt đầu từ 1, tăng thêm 1 khi qua số hạng kế tiếp và

tang đến khi = n

Code thiết kế:

1) Tạo project, đặt tên như các bài trước

2) Xuất thông báo nhập biến với các khai báo biến sau:

int x, n, nMau = 1; double dbKetQua = 0, dbTu = 0;

3) Thực hiện tính toán:

//cho vòng lặp for() chạy từ 1 đến n mà ta nhập vào //mỗi lần lặp tăng thêm 1 for (int i = 1; i <= n; i++) { //tính tử số dbTu = Math.Pow(x, i); //gán mẫu = 1 để trả về giá trị 1 khi qua 1 số hạng mới nMau = 1; //cho vòng lặp for() chạy từ 1 đến giới hạn biến chạy ở vòng lặp trên Tử //mỗi lần lặp tăng thêm 1 for (int k = 1; k <= i; k++) //tính giai thừa của mẫu lúc đó nMau *= k; //sau khi có được Tử và Mẫu số, ta gán chúng vào biến Kết Quả dbKetQua += dbTu / nMau; } //làm tròn biến KQ, lấy 3 chữ số thập phân dbKetQua = Math.Round(dbKetQua, 3); //xuất KQ Console.WriteLine("S({0},{1})= {2}", x, n, dbKetQua); Console.ReadLine();

Bài 10(*):

Mục đích:

𝑆(𝑥,𝑛) = 𝑥 +𝑥2

2!+𝑥3

3!+ ⋯+

𝑥𝑛

𝑛!

Page 14: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 14/102

Sử dụng hàm toán học và nhập dữ liệu từ bàn phím Kết hợp định dạng xuất dữ

liệu.

Yêu cầu:

+ Tạo Project mới với tên là SoGaSoCho: + Tìm số gà và số chó, biết:

Vừa gà vừa chó Bó lại cho tròn Ba mươi sáu con Một trăm chân chẵn

X + Y = 36

2𝑋 + 4𝑌 = 100

Gợi ý:

Với X là số gà, Y là số Chó

Page 15: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 15/102

Module 2

Nội dung kiến thức thực hành:

+ Làm quen với ngôn ngữ C#

+ Tạo ứng dụng trên windows form.

Mục đích:

Sử dụng các properties, methods và event của các đối tượng trong Windows

Form.

Bài 1:

Yêu Cầu

Thiết kế form như hình bên dưới

Viết lệnh để chương trình hoạt động như sau:

+ Người sử dụng sẽ nhập Password vào textbox , sau đó nhấn nút “Hiễn Thị‟

thì nội dung của password sẽ được hiễn thị ra trên label bên dưới

Hướng dẫn:

Trong sự kiện Click của button “Hiễn Thị”, gõ vào câu lệnh sau

lblHienThi.Text = txtPassWord.Text;

+ Người sử dụng nhấn nút “Tiếp” để xoá nội dung textbox, label và đặt con trỏ

vào texttbox password để người sử dụng nhập nội dung mới thuận lợi.

Hướng dẫn:

Trong sự kiện Click của button “Tiếp”, gõ vào đoạn lệnh sau

lblHienThi.Text = "";

txtPassWord.Clear();

txtPassWord.Focus();

Page 16: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 16/102

+ Nhấp nút “Đóng” để kết thúc chương trình.

Hướng dẫn:

1. Thiết kế Form:

a. Để nội dung trong text box thay bằng ký tự * hoặc #, ta click vào

text box cần hiệu chỉnh và thay đổi Property PasswordChar

b. Để chữ trong textbox hoặc label được canh trái, phải hoặc giữa, ta

thay đổi thuộc tính trong Property TextAlign

2. Viết code cho từng button

a. Nhấn nút “Hiễn Thị‟‟ thì nội dung của password sẽ được hiễn thị ra

trên label bên dưới

Trong sự kiện Click của button “Hiển Thị”, gõ vào câu lệnh sau

lblHienThi.Text = txtPassWord.Text;

b. Người sử dụng nhấn nút “Tiếp” để xoá nội dung textbox, label và

đặt con trỏ vào texttbox password để người sử dụng nhập nội dung

mới thuận lợi.

Trong sự kiện Click của button “Tiếp”, gõ vào đoạn lệnh sau

lblHienThi.Text = "";

txtPassWord.Clear();

txtPassWord.Focus();

c. Nhấp nút “Đóng” để kết thúc chương trình.

Trong sự kiện Click của button “Đóng”, gõ vào câu lệnh sau

this.Close();

//hoặc Application.Exit();

d. Để khi đóng form, sẽ xuất hiện hộp thoại hỏi xem user thật sự

muốn đóng hay ko, ta nhập đoạn code sau vào Events FormClosing

Page 17: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 17/102

của Form. Nếu user chọn Yes, sẽ đóng chương trình, nếu chọn No,

trở lại cửa sổ bình thường:

private void frmQuanLyBanHang_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dl; dl = MessageBox.Show("Có chắc bạn muốn đóng ứng dụng?", "Thông báo!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (dl == DialogResult.No) e.Cancel = true; }

Bài 2:

Mục Đích:

Sử dụng các sự kiện (event) cơ bản trên Form

Yêu Cầu

Thiết kế form chỉ chứa 1 button (xem hình)

Khi form hiển thị, sẽ xuất ngay messageBox hiển thị lời chào như sau

Và khi người sủ dụng Click và button hay vào form củng sẽ xuất hiện các

message box hiể thị các thông báo tương ứng như :

Button was clicked.

Form was clicked.

Page 18: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 18/102

Thiết kế giao diện như hình sau:

Hướng Dẫn:

// sự kiện khi Button được click

private void bntClickMe_Click( object sender, EventArgs e )

{

MessageBox.Show( "Button was clicked." );

}

// sự kiện khi load form

private void frmSimpleEvent_Load(object sender, EventArgs e)

{

MessageBox.Show("Hi , Welcome to C# 2010 programming!");

}

// sự kiện khi form được Click

private void frmSimpleEvent _Click(object sender, EventArgs e)

{

MessageBox.Show("Form was clicked.");

}

Bài 3:

lblHoTen

txtHo

txtTen

btnHoTen

btnHo

Page 19: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 19/102

Viết lệnh để chương trình hoạt động như sau:

Viết lệnh để chương trình hoạt động như sau:

Nhấn vào Button btnHo thì gán nội dung của txtHo cho lblHoTen

lblHoTen.Text = txtHo.Text;

Nhấn vào Button btnTen thì gán nội dung của txtTen cho lblHoTen

lblHoTen.Text = txtHo.Text;

Nhấn vào Button btnHoTen thì gán nội dung của txtHo cộng với txtTen cho lblHoTen

lblHoTen.Text = txtHo.Text + “ “ + txtTen.Text;

Nhấn Double click vào lblHoTen thì nội dung của lblHoTen bị xoá

lblHoTen.Text = ““;

Nhấn vào btnKetThuc thi đóng chương trình

this.Close();

Bài 4:

Mục Đích:

Sử dụng các control property và Layout trên Form

Yêu cầu:

Với giao diện của bài 2, yêu cầu sinh viên sử dụng thuộc tính Dock và

Anchor sao cho khi người sử dụng resize kích thước form, thì các đối tượng trên

form vẫn được sắp xếp hợp lý, dễ nhìn.

Dock: cho đối tượng bám vào vị trí chọn ngay sau yêu cầu và thay đổi

kích thước khi kích thước vị trí bám thay đổi

Anchor: chọn hướng sẽ thay đổi kích thước khi cửa sổ ứng dụng thay

đổi kích thước

Page 20: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 20/102

Bài 5:

Yêu Cầu:

Thiết kế giao diện như hình bên dưới

Yêu cầu

1. khi Form load.

a. Radiobutton Red được chọn mặc định

b. Con trỏ xuất hiện ngay tại ô Nhập tên.

2. Khi gõ tên vào ô Nhập tên (gõ ký tự nào thì lable lập trình chạy song song cùng

giá trị trong ô nhập tên)

Hướng dẫn:

1. Khi form load

a. Muốn radio Red được chọn, ta thay đổi Property Checked của radio Red

thành true

b. Muốn con trỏ xuất hiện ở ô txtNhapTen, ta thay đổi thứ tự trong Menu

View / Tab Order

c. Còn ko thì ta nhập đoạn code vào sự kiện Load của form:

txtNhapTen.Focus(); radRed.Checked = true;

radRed

txtNhapTen

chkBold

lblLapTrinh

Page 21: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 21/102

2. Khi gõ chữ trong txtNhapTen, chữ sẽ xuất hiện lien tục trong lblLapTrinh, ta viết

trong sự kiện TextChanged()

private void txtNhapTen_TextChanged(object sender, EventArgs e) { lblLapTrinh.Text = txtNhapTen.Text; }

3. Nhấn Radiobutton Red, Green.. thì đổi màu chữ trong ô Lập trình bởi và ô nhập

tên có màu tương ứng với Radiobutton phù hợp.

private void radRed_CheckedChanged(object sender, EventArgs e) { lblLapTrinh.ForeColor = Color.Red; txtNhapTen.ForeColor = Color.Red; }

3. Nhấn các CheckBox chữ đậm, nghiêng… thì đổi font chữ trong ô Lập trình bởi và

ô nhập tên tương ứng.

private void chkBold_CheckedChanged(object sender, EventArgs e) { lblLapTrinh.Font = new Font(lblLapTrinh.Font.Name, lblLapTrinh.Font.Size, lblLapTrinh.Font.Style ^ FontStyle.Bold);

//c}u lệnh dựa trên to|n tử logic Xor //0 Xor 1=1

//1 Xor 1=0 }

Bài 6:

Thiết kế giao diện như hình bên dưới

e

lblMessage

picBig

radRed

txtName

txtMessage

btnDisplay

btnClear

btnExit

chkVisible

picSmall

Page 22: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 22/102

Viết lệnh để chương trình hoạt động như sau:

Khi form vừa load lên thì:

1. Con trỏ được đặt tại vị trí ô Name

2. 2 hình CDRom đặt chồng lên nhau đồng tâm, hình CDRom lớn hiện

ngược lại hình nhỏ ẩn. (Property Visible)

3. Đưa chụôt vào hình CDRom (lớn, nhỏ) hiện lên tooltip “Click Me”

Hiệu chỉnh TabIndex sao cho hợp lý (Tham khảo hình vào Menu View\Tab Order)

Hướng dẫn:

Tạo 2 hình CD chồng lên nhau và đặt tooltip:

1. Tạo 2 khung PictureBox rồi đưa hình CD vào, chỉnh lại kích thước để 1 lớn 1 nhỏ

2. Vào ToolBox tìm công cụ ToolTip và kéo ra form

3. Chọn từng hình ảnh và gõ mẫu tin mình muốn xuất hiện khi đưa chuột vào hình trong

Property ToolTip on ToolTip1

Hiệu chỉnh form load và các buuton

1. Hiệu chỉnh trong sự kiện Load của Form:

private void frmDinhDang_Load(object sender, EventArgs e) { radRed.Checked = true; //có thể v{o Property Check của Radio v{ chọn true txtName.Focus(); //có thể chỉnh lại thứ tự trong Menu View/Tab Order chkVisible.Checked = true;//có thể v{o Property Check của CheckBox v{ chọn true }

Page 23: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 23/102

2. Nhấn vào Button Display hoặc phím Enter (AcceptButton) thì gán nội dung của ô

Name và Message cho Label Message (lblMessage)

lblMessage.Text = txtName.Text + " : " + txtMessage.Text;

3. Nhấn vào Button Clear thì xóa nội dung trong ô Name và Message

txtMessage.Clear();

txtName.Clear();

4. Nhấn vào RadioButton (Red, Green …) thì đổi màu chữ trong ô Message thành màu

tương ứng: double click vào RadioButton red trong phần design vào gõ vào đoạn code

lblMessage.ForeColor = Color.Red;

5. Ẩn hiện Message (lblMessage) phụ thuộc vào giá trị của Check box (chkVisible), double

click vào CheckBox trong phần design vào gõ vào đoạn code

lblMessage.Visible = chkVisible.Checked;:

6. Nhấn vào Button Exit hoặc phím Esc (CancelButton) thì đóng chương trình

this.Close();

7. Để khi đóng form, sẽ xuất hiện hộp thoại hỏi xem user thật sự muốn

đóng hay ko, ta nhập đoạn code sau vào Events FormClosing của Form.

Nếu user chọn Yes, sẽ đóng chương trình, nếu chọn No, trở lại cửa sổ

bình thường:

private void frmQuanLyBanHang_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dl; dl = MessageBox.Show("Có chắc bạn muốn đóng ứng dụng?", "Thông báo!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (dl == DialogResult.No) e.Cancel = true; }

8. Click chuột vào hình CDRom nào thì hình đó ẩn đi và hiện hình CDRom khác lên,

ta double click vào hình CD lớn và gõ vào đoạn code:

picBig.Visible = false;

picSmall.Visible = true;

Làm ngược lại với CD nhỏ.

Page 24: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 24/102

9. Khi chương trình chạy hòan chỉnh hãy hiệu chỉnh hai hình CDRom chồng lên

nhau sao cho đồng tâm.

Bài 7:

Mục đích:

Kết hợp dử dụng component ToolTip trên các control

Yêu cầu

Yêu cầu:

1. Khi chương trình vừa thực thi.

a. Form được hiển thị giữa màn hình (lưu ý thuộc tính StartPosition)

b. Các đối tượng được “neo” sao cho khi người dùng thay đổi kích thước

form thì các đối tượng được resize kích thước sao cho “dễ nhìn” (thuộc

tính Anchor)

c. picTurnOn được hiển thị, picTurnOff được ẩn ngay bên dưới picTurnOn.

Khi người dùng đưa chuột vào picTurnOn sẽ xuất hiện tip “Click me to

Turn OFF the Light!”, và ngược lại trên picTurnOFF.

d. Hiện tên mặc định vào ô Name

e. Lable ngay bên dưới pictureBox hiển thị thông báo

“Jack. Turn Off the Light ,please!”

2. Khi người dùng Click lên picture nào thì picture đó sẽ phải ẩn đi, picture còn lại xuất

hiện, đồng thời thay đổi nội dung trên label phù hợp.

3. Nút Exit cho phép đóng ứng dụng

4. Sau khi thiết kế xong, đặt 2 PictureBox chồng lên nhau để xem hiệu ứng.

Hướng dẫn

Page 25: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 25/102

1) Thiết kế form như hình trên

a) Tạo 2 PictureBox cùng kích cỡ, đưa vào 2 hình ảnh đèn sáng và tắt và đặt

chúng chồng lên nhau.

b) Vào ToolBox tìm component ToolTip rồi kéo ra form chính.

c) Chọn hình đèn tắt, vào property ToolTip on toolTip1 và gõ câu lệnh

“Click me to Turn ON the Light!” và làm ngược lại với hình còn lại.

d) Để hiện tên mặc định vào ô Name, trong sự kiện Load của form, gõ vào câu

lệnh sau:

txtName.Text = "Jack";

2) Ta vào sự kiện Click của picTurnOff , gõ đoạn code:

//thuộc tính Visible dùng để ẩn/hiện 1 đối tượng picOn.Visible = true;

picOff.Visible = false; lblMessage.Text = txtName.Text + ". Turn off the Light, please!";

Làm ngược lại với picTurnOn

3) Thiết lập button thoát và sự kiện formClosing như những bài trước.

Bài 8: Adding Controls Programmatically. Reference page 127

Mục đích:

Lập trình biến cố trên các đối tượng được tạo động lúc thực thi(run time)

Yêu cầu

Thiết kế form gồm 2 button Add và Remove. Khi người sử dụng Click và button

Add, chương trình sẽ phát sinh động 1 button trên form (mỗi button là một Element thứ

n). Khi button Remove được Click, thì button trên cùng sẽ được remove. (Có thể hình

dung đây là một Stack). (xem hình)

Khi người dùng Click vào một Element nào thì sẽ hiển thị trang thái của Element đó lên

một label ở phía trên form. (xem hình)

Page 26: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 26/102

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình page 127

Bài 9:

Mục đích:

Sử dụng các dialog được cung cấp bởi C#.

Sử dụng RichTextBox

Yêu cầu

Ex1: Using Common Dialog Boxes

Gợi ý:

Page 27: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 27/102

Xem hướng dẫn thực hiện trong giáo trình

private void btnOpen_Click(object sender, EventArgs e) { //Allow to select only *.rtf files and all file openFileDialog1.Filter = "Rich Text Files (*.rtf)|*.rtf|All Files (*.*)|*.*"; if(openFileDialog1.ShowDialog() == DialogResult.OK) { //Load the file contents in the RichTextBox rtbText.LoadFile(openFileDialog1.FileName,RichTextBoxStreamType.RichText); } }

Bài 10:

Mục đích:

Sử dụng đối tượng LinkLable liên kết đến một WebSite, mở ứng dụng

Yêu cầu: Using LinkLabel Controls (chapter 2 page 145 )

Gợi ý: Xem hướng dẫn thực hiện trong giáo trình

lnkPrograms.Links.Add(Vị trí bắt đầu, độ dài chuỗi link, đối tượng cần link); lnkPrograms.Links.Add(0, "Launch Calculator".Length, "calc.exe "); lnkPrograms.Links.Add(lnkPrograms.Text.IndexOf("Open C: Drive"), "Open C: Drive".Length, "c:\\");

Bài 11: Reference page 150

Mục đích: Sử dụng GroupBox và Panel

Yêu cầu : Using GroupBox and Panel Controls and Picturebox

Page 28: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 28/102

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình

private void btnBrowse_Click(object sender, EventArgs e) { //Set filters for graphics files ofdPicture.Filter= "Image Files (BMP, GIF, JPEG, etc.)|" + "*.bmp;*.gif;*.jpg;*.jpeg;*.png;*.tif;*.tiff|" + "BMP Files (*.bmp)|*.bmp| "+ "GIF Files (*.gif)|*.gif|" + "JPEG Files (*.jpg;*.jpeg)|*.jpg;*.jpeg|" + "PNG Files (*.png)|*.png|" + "TIF Files (*.tif;*.tiff)|*.tif;*.tiff|" + "All Files (*.*)|*.*"; if(ofdPicture.ShowDialog() == DialogResult.OK) { //Get file information FileInfo file = new FileInfo(ofdPicture.FileName); lblSize.Text = String.Format( "File Size: {0} Bytes",file.Length.ToString()); lblDateModified.Text = String.Format(" Date last modified: {0}", file.LastWriteTime.ToLongDateString()); lblDateAccessed.Text = String.Format("Date last accessed: {0}",file.LastAccessTime.ToLongDateString()); //Load the file contents in the PictureBox this.pbImage.Image = new Bitmap(ofdPicture.FileName);} } private void Form1_Load(object sender, EventArgs e) { } } //file.Length.ToString() lấy ra size của file // file.LastWriteTime.ToLongDateString() lấy ran ngay modified cuối // file.LastAccessTime.ToLongDateString() //lấy ra ng{y truy cập cối cùng

Page 29: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 29/102

Bài 12:

Mục đích:

Sử dụng ListBox, CheckListBox, Combobox

Yêu cầu

Step by Step

Ex1: Using ListBox and CheckedListBox Controls (page 157)

Gợi ý:

private void clbScripts_ItemCheck(object sender, ItemCheckEventArgs e) { //Get the item that was just checked or unchecked string item = clbScripts.SelectedItem.ToString(); if (e.NewValue == CheckState.Checked) //Checked: Add to the ListBox lbSelectedScripts.Items.Add(item); else //Unchecked: Remove from the ListBox lbSelectedScripts.Items.Remove(item); } Kiểm tra xem item trong Checklist có dang chon không?

if (e.NewValue == CheckState.Checked) Lấy ra item dang chon trong list:

string item = clbScripts.SelectedItem.ToString(); Thêm một Item v{o list:

ListObject.Items.Add(gi| trị); Ví dụ: lbSelectedScripts.Items.Add(item);

private void btnDone_Click(object sender, EventArgs e) { //Be sure to have a using directive for System.Text //at top of the program StringBuilder sbLanguages = new StringBuilder(); if (lbSelectedScripts.SelectedItems.Count>0) {

Page 30: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 30/102

sbLanguages.Append("You Selected:\n\n"); //If there were items selected in ListBox //create a string of their names foreach (string item in lbSelectedScripts.SelectedItems) sbLanguages.Append(item +"\n"); } else { //No items selected sbLanguages.Append("No items selected from ListBox"); } MessageBox.Show(sbLanguages.ToString(), "Selection Status",MessageBoxButtons.OK, MessageBoxIcon.Information); } Tập c|c item đang chọn trong List

lbSelectedScripts.SelectedItems Thêm chuỗi v{o đối tượng StringBuilderObject dùng phương thức Append

StringBuilderObject.Append(Gia tri);

Ex2: Using ComboBox Controls

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình

Lấy giá trị trong combobox cboColor.Text

G|n m{u nền của form : this.BackColor= Màu

Ví dụ: this.BackColor = Color.FromName(cboColor.Text);

Bài 13:

Mục đích:

Thao tác dữ liệu số trên Listbox

Làm quen với các lệnh trong list box

RemoveAt(index) :xóa phần tử tại 1 vị trí xác định

Remove() :xóa tại 1 nơi được user chọn

Page 31: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 31/102

Yêu cầu

Thiết kế form và thực hiện các chức năng sau:

1. Khi người sử dụng nhập một số vào textbox rồi Enter hoặc nhấp vào nút cập nhật thì số này

được thêm vào listbox, đồng thời nội dung trong textbox bị xóa và focus được chuyển về

textbox.

2. Người dùng nhấn vào nút nào thì thực hiện chức năng tương ứng của nút đó.

Gợi ý:

Lưu ý thuộc tính AcceptButton của form

Phần tử đầu tiên trong danh sách có Index = 0

Thuật toán chủ yếu duyệt hết các phần tử trong List lấy ra từng item rồi giải

quyết.

Hướng dẫn:

1. Thiết kế form như hình trên, đặt thuộc tính AcceptButton của form vào button Cập

Nhật, vào trong sự kiện click của button cập nhật, gõ đoạn code:

lstDanhSach

txtPhanTu

Page 32: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 32/102

lstDanhSach.Items.Add(stPtu); txtPhanTu.Clear(); txtPhanTu.Focus();

2. Thiết lập các button tính toán:

a. Tính tổng danh sách

Duyệt vào từng phần tử trong danh sách, lấy từng giá trị cộng dồn vào 1 biển

Tổng

//tạo h{m tính tổng //vì gi| trị của tổng có thể l{ 1 con số rất lớn, nên ta chọn kiểu "long" long tinhTong(ListBox lstDS) { //khai b|o biến chứa gi| trị của tổng //v{ gi| trị của c|c phần tử trong danh s|ch long sum=0; int i=0, GTriItem; //duyệt từng phần tử trong danh sách for (i=0; i < lstDS.Items.Count; i++) { //lấy gi| trị của từng phần tử //chuyển th{nh kiểu số //v{ cộng dồn v{o 1 biến tổng GTriItem = Convert.ToInt32(lstDS.Items[i].ToString()); sum += GTriItem; } //trả về gi| trị của biến tổng khi vòng lặp kết thúc return sum; } private void btnTong_Click(object sender, EventArgs e) { //tạo 1 biến chứa gi| trị tổng //v{ gọi lại h{m tính tổng ở trên long Tong = tinhTong(lstDanhSach); //xuất 1 bản thông b|o kết quả vừa tìm được MessageBox.Show("Tổng danh s|ch l{: " + Tong.ToString(), "Kết Quả"); }

b. Xóa phần tử đầu vào cuối danh sách

Đếm số phần tử có trong danh sách, nếu >=2 thì xuất hiện bảng hỏi xem có

thật sự muốn xóa ko. Nếu đồng ý thì xóa, ko thì trở về danh sách như bình

thường.

Nếu trong danh sách có ít hơn 2 phần tử, thì xuất hiện bảng báo lỗi về sự việc

này.

DialogResult hoiXoa; //nếu trong ds có >=2 phần tử thì thực hiện if (lstDanhSach.Items.Count > 1) { hoiXoa = MessageBox.Show("Bạn có chắc xóa đầu, cuối danh s|ch ko?", "Chú ý", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (hoiXoa == DialogResult.Yes) { //xóa tại 1 vị trí 0 v{ cuối ds lstDanhSach.Items.RemoveAt(0);

Page 33: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 33/102

lstDanhSach.Items.RemoveAt(lstDanhSach.Items.Count - 1); } } else MessageBox.Show("Có ít hơn 2 phần từ hiện có trong danh s|ch!", "Chú ý");

c. Xóa phần tử đang chọn

DialogResult hoiXoa; if (lstDanhSach.Items.Count > 0) { hoiXoa = MessageBox.Show("Bạn có chắc xóa " + lstDanhSach.SelectedItem, "Chú ý", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (hoiXoa == DialogResult.Yes) //xóa phần tử tại vị trí được user chọn lstDanhSach.Items.Remove(lstDanhSach.SelectedItem); } else MessageBox.Show("Hiện danh s|ch đang rỗng!", "Chú ý");

d. Xóa nhiều phần tử đang chọn

Ta phải dùng hàm white() để lặp từ đầu đến cuối danh sách, nếu

phần tử được chọn thì xóa (khi đó phần tử phía sau sẽ dồn lên chỗ

phần tử vừa xóa), ko được chọn thì cộng tiếp lên.

void xoaNhieuPtu(ListBox lst) { int i=0; while(i<lst.Items.Count) if(lst.GetSelected(i)) lst.Items.RemoveAt(i); else i++; }

Vào button tương ứng, gõ vào đoạn code bên dưới. Nếu danh sách có

>=1 phần tử, ta xuất hiện bảng hỏi xóa. Nếu user đồng ý, gọi lại hàm

xoaNhieuPTu ở trên.

DialogResult hoiXoa; if (lstDanhSach.Items.Count > 0) { hoiXoa = MessageBox.Show("Bạn có chắc xóa những phần tử n{y?", "Chú ý", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (hoiXoa == DialogResult.Yes) xoaNhieuPtu(lstDanhSach); } else MessageBox.Show("Hiện danh s|ch đang rỗng!", "Chú ý");

e. Thay 1 phần tử bằng bình phương của nó

int i = 0; double GTriItem=1; for (i = 0; i < lstDanhSach.Items.Count; i++) { GTriItem = Math.Pow(Convert.ToDouble(lstDanhSach.Items[i].ToString()),2); lstDanhSach.Items[i] = GTriItem;

Page 34: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 34/102

}

f. Làm tương tự với tăng phần tử lên 2

g. Chọn số lẻ trong danh sách

Tạo 1 hàm chọn số lẻ

Duyệt từ đầu đến cuối danh sách, bỏ hết tất cả những phần tử đã chọn trước đó

Duyệt lại từ đầu đến cuối danh sách

Nếu số đó chia lấy dư cho 2 bằng 1 thì chọn

void chonLe(ListBox lstDS) { int i = 0, GTriItem; for (i = 0; i < lstDS.Items.Count; i++) lstDS.SetSelected(i, false); for (i = 0; i < lstDS.Items.Count; i++) { GTriItem = Convert.ToInt32(lstDS.Items[i].ToString()); if (GTriItem % 2 != 0) lstDS.SetSelected(i, true); } }

Gọi lại hàm trong sự kiện Click của button tương ứng

h. Làm tương tự với chọn số chẵn

i. Thiết lập button Kết thúc và sự kiện formClosing như những bài trước

Page 35: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 35/102

Bài 14:

Mục đích:

Tạo danh sách và đưa vào 2 list box

Di chuyển dữ liệu qua lại trên 2 list box này

Thao tác xóa dữ liệu trên 2 list box

Yêu cầu

Thiết kế form và thực hiện các chức năng sau

1. Quy định form hiễn thị giữa màn hình. Không cho người sử dụng thay đổi kích thước

form. (StartPosition/CenterScreen)

2. Quy định việc di chuyển Tab hợp lý. (menu View/Tab Order)

3. Các ListBox được phép chọn nhiều mục (kết hợp giữa phím Shift, Control và chuột)

(SelectionMode/MultiExtended)

4. Khi người sử dụng Click nút “Cập nhật” hoặc nhấn phím Enter (AcceptButton) thì mặt

định nhập tên sinh viên từ textbox vào danh sách lớp A (không chấp nhận dữ liệu rỗng).

Theo đó người sử dụng có thể chọn lớp để cập nhật từ combobox lớp.

5. Các nút “>” và “<” khi được Click sẽ di chuyển tất cả các mục đang chọn sang

ListBox bên kia tương ứng.

6. Các nút “>>” và “<<” khi được Click sẽ di chuyển toàn các mục sang Listbox bên kia

tương ứng.

7. Nút lệnh “Xóa lớp A”, “Xóa lớp B” cho phép xóa các mục đang chọn trong list hiện hành.

Hướng dẫn:

txtTen

lstLopB lstLopA

Page 36: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 36/102

4. Thiết lập cho button cập nhật, nếu user nhập dữ liệu rỗng, xuất MessageBox

báo lỗi, nếu ko thì truyền dữ liễu vào ListBox

if (txtTen.Text == "") { MessageBox.Show("Bạn ko được phép nhập dữ liệu rỗng!", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error); //đưa con nh|y v{o ô txtTen txtTen.Focus(); } else { //truyền dữ liệu v{o list box string strDuLieu = txtTen.Text; lstLopA.Items.Add(strDuLieu); //xóa nội dung trong ô txtTen v{ đưa con nh|y v{o ô n{y txtTen.Clear(); txtTen.Focus(); }

5. Thiết lập button “>”:

Tạo 1 hàm thực thi việc chuyển dữ liệu trong đó:

Dùng vòng lặp white() duyệt từ đầu đến cuối List Box

Nếu có phần tử nào được chọn thì xóa phần tử đó ở List Box A và thêm nó vào List

Box B

void chuyenDuLieu(ListBox lst1, ListBox lst2) { int i=0; while (i < lst1.Items.Count) if (lst1.GetSelected(i)) { string stDuLieu = lst1.Items[i].ToString(); lst2.Items.Add(stDuLieu); lst1.Items.RemoveAt(i); } else i++; }

Trong sự kiện Click của button “>”, nếu danh sách ko rỗng, thì hỏi xem user có thật

sự muốn chuyển dữ liệu hay ko. Nếu Yes thì gọi lại hàm chuyển dữ liệu. Nếu ds rỗng,

xuất hiện thông báo lỗi

DialogResult hoiChuyen; if (lstLopA.Items.Count > 0) { hoiChuyen = MessageBox.Show("Bạn có chắc chuyển những dữ liệu đang chọn ko?", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (hoiChuyen == DialogResult.Yes) chuyenDuLieu(lstLopA, lstLopB); } else MessageBox.Show("Danh s|ch hiện đang rỗng!", "Chú ý");

Làm tương tự với button “<”

Page 37: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 37/102

6. Thiết lập button “>>”:

Tạo 1 hàm để chuyển dữ liệu từ lớp A sang lớp B.

Cho vòng lặp white() chạy cho đến khi ko còn phần tử nào trong List Box Lop A

Mỗi lần lặp, ta chuyển phần tử đầu tiên của LopA sang LopB

Đồng thời xóa phần tử đầu tiên đó ở LopA

void chuyenToanBo(ListBox lst1, ListBox lst2) { while (lst1.Items.Count != 0) { string stDuLieu = lst1.Items[0].ToString(); lst2.Items.Add(stDuLieu); lst1.Items.RemoveAt(0); } }

Trong sự kiện click của button “>>”, ta kiểm tra xem danh sách LopA có rỗng hay ko,

nếu ko thì hỏi xem user thật sự muốn chuyển hay hay. Nếu Yes, gọi hàm

chuyenToanBo.

Nếu ds LopA rỗng, hiện bảng thong báo lỗi.

DialogResult hoiChuyen; if (lstLopA.Items.Count > 0) { hoiChuyen = MessageBox.Show("Bạn có chắc chuyển to{n bộ dữ liệu đang chọn ko?", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (hoiChuyen == DialogResult.Yes) chuyenToanBo(lstLopA, lstLopB); } else MessageBox.Show("Danh s|ch hiện đang rỗng!", "Chú ý");

Làm tương tự với button “<<”

7. Thiết lập button “Xóa Lớp A”

Ta phải dùng hàm white() để lặp từ đầu đến cuối danh sách, nếu phần tử được chọn

thì xóa (khi đó phần tử phía sau sẽ dồn lên chỗ phần tử vừa xóa), ko được chọn thì

cộng tiếp lên.

void xoaDuLieu(ListBox lst) { int i=0; while(i<lst.Items.Count) if(lst.GetSelected(i)) lst.Items.RemoveAt(i); else i++; }

Page 38: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 38/102

Trong sự kiện click của button xóa lớp A, gõ vào đoạn code bên dưới. Nếu danh sách

có >=1 phần tử, ta xuất hiện bảng hỏi xóa. Nếu user đồng ý, gọi lại hàm xoaDuLieu ở

trên. Nếu danh sách rỗng, hiện bảng thong báo lỗi

DialogResult hoiXoa; if (lstDanhSach.Items.Count > 0) { hoiXoa = MessageBox.Show("Bạn có chắc xóa những phần tử n{y?", "Chú ý", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (hoiXoa == DialogResult.Yes) xoaNhieuPtu(lstDanhSach); } else MessageBox.Show("Hiện danh s|ch đang rỗng!", "Chú ý");

Thiết lập button Kết thúc và sự kiện FormClosing như nhưng bài trước

Page 39: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 39/102

Bài 15:

Mục đích:

Sử dụng các control của Visual Studio

Yêu cầu

Step by step

Ex1: Using DomainUpDown and NumericUpDown Controls

Hướng dẫn:

private void dudColor_SelectedItemChanged(object sender, EventArgs e) { //Typecast the object to DomainUpDown DomainUpDown dudColor = (DomainUpDown)sender; //Change color of lblsampleText to selected color lblSampleText.ForeColor =Color.FromName(dudColor.Text); } private void nudSize_ValueChanged(object sender, EventArgs e) { //Typecast the object to NumericUpDown NumericUpDown nudSize = (NumericUpDown)sender; //Change the font of lblSampleText to selected font lblSampleText.Font = new Font(lblSampleText.Font.FontFamily,(float)nudSize.Value); }

Page 40: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 40/102

Ex2: The MonthCalendar and DateTimePicker Controls reference page

171

Ex3:The Timer, TrackBar, and ProgressBar Controls reference page 179

Ex4: Using TabControl Controls

Page 41: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 41/102

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình (Page 491)

Bài 16:

Mục đích:

Xây dựng hệ thống menu : MainMenu và ContextMenu(menu cảm ngữ

cảnh) (Page 498)

Yêu cầu

Step by Step

Ex: Creating a Main Menu for a Form

Ex : Creating a Context Menu for a Form

Page 42: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 42/102

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình(page 498)

Bài 17:

Mục đích:

Sử dụng menu

Yêu cầu

Thiết kế bổ sung hệ thống menu cho Bài tập số 14.

Page 43: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 43/102

- Các menu item sẽ thực hiện chức năng tương tự như các button của bài 14

- Menu “Thông tin” khi được Click sẽ xuất messageBox, cho biết thông tin của sinh viên

thức hiện chương trình.

Gợi ý:

Từ sự kiện của memu item gọi lại các sự kiện của Button đã xử lý

Hướng dẫn:

1. Dùng lại database bài 14, vào Toolbox, kéo component MenuStrip vào form.

2. Thiết lập menu như yêu cầu

3. Double click vào từng mục trong menu và copy code ở button tương ứng.

4. Ví dụ thiết lập cho phần “Chuyển phần tử chon sang lớp B”:

private void chuyểnPhầnTửChọnSangLớpBToolStripMenuItem_Click(object sender, EventArgs e) { //truyền button chuyển qua lớp B 1 phần tử cho dòng menu nay btnPhai1_Click(sender, e); }

5. Trong sự kiện click của Menu “Thông Tin” ta tạo 1 MesseageBox hiển thị thong

tin người thiết kế

Bài 18:

Mục đích:

Xây dựng ứng dụng đa form,

Sử dụng form MDI

Yêu cầu

Step by step

Creating an MDI Application (page 512)

Page 44: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 44/102

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình

Bài 19:

Mục đích:

Xây dựng ứng dụng kết hợp đối tượng statusBar

Yêu cầu

Step by step

Creating a Status Bar for a Form

Page 45: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 45/102

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình

Bài 20:

Mục đích:

Xây dựng ứng dụng liên kết nhiềm form

Yêu cầu

Step by step

Creating an MDI Application (Page 512)

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình

Bài 21:

Mục đích:

Tạo một ứng dụng liên kết các ứng dụng đã tạo ra từ các project trước.

Tạo form khởi động (form Flash)

Page 46: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 46/102

Tạo form About

Yêu cầu

Tổ chức form chính như mẫu

Gợi ý:

Thiết kế Form:

StartPosition thiết lập = CenterToScreen;

WindowState thiết lập = MaximumSize;

Liên kết các project đã có sẵn

Vào menu Project chọn <Add Existing Items>

Chọn File cần Add vào chương trình (*.cs)

Viết code để liên kết form

frmFormOld f = new frmFormOld();

f.MdiParent = this;

f.Show();

- Thiết kế Form Splash (frmFlashForm)

Hướng dẫn:

Page 47: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 47/102

Thiết kế Form:

FormBorderStyle thiết lập là None

StartPosition thiết lập là CenterToScreen

TopMost thiết lập = true

Thả vào form 1 đối tượng Timer để điều khiển việc đóng form tự động.

Thiết lập thuộc tính : Enabled=True và Interval = 10000

Trong sự kiện Timer_tick() gõ vào đoạn code

this.DialogResult = DialogResult.OK;

timer1.Enabled = false;

- Thay đổi code trong class Program.cs

Viết lại hàm main như sau

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

frmFlashForm f = new frmFlashForm();

f.ShowDialog();

if (f.DialogResult == DialogResult.OK)

{

Application.Run(new frmMain());

}

}

- Thiết kế Form About (tương tự form Splash)

Bài 22:

Mục đích:

Tạo thanh công cụ (toolBar) trên ứng dụng

Yêu cầu

Page 48: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 48/102

Step by step

creating aToolbar for a Form (page 503)

Gợi ý:

Xem hướng dẫn thực hiện trong giáo trình

Page 49: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 49/102

Module 3

Nội dung kiến thức thực hành:

+ Các kiểu dữ liệu trên C#

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

Mục đích:

Sử dụng thành thạo các kiểu dữ liệu, các cấu trúc điều khiển cơ bản trên C#.

Bài 1:

Thiết kế giao diện như hình vẽ

Yêu cầu:

Khi form thực thi

o Tất cả text boxes và labels đều rỗng.

o Đặt focus vào text box Tên Hàng và xác lập việc di chuyển Tab hợp lý (menu

View\Tab Order)

o Form hiễn thị giữa màn hình. (StartPosition =CenterScreen )

o Thiết lập nút Thanh Tóan nhận sự kiện phím Enter (AcceptButton), nút Tiếp

nhận sự kiện phím ESC (CancelButton)

o Thực hiện canh lề phải cho các đối tượng chứa dữ liệu là số (Text Align=Right)

Xử lý nút lệnh “Thanh Tóan”.

Page 50: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 50/102

o Các text box Số lượng, Đơn Giá buộc phải có giá trị và chỉ cho phép nhập số.

Thêm vào đó:

Số lượng >=0. (int)

Đơn giá >=0 (decimal)

Cung cấp các Message Box khác nhau để thông báo rõ ràng cho việc dữ liệu bị nhập sai.

o Tính toán cho mặt hàng hiện tại xuất kết quả ra label Thành Tiền.

Thành tiền = số lượng * đơn giá;

Nút Tiếp:

o Xóa nội dung các textbox và label

o Đặt focus vào textbox đầu tiên

Nút Kết Thúc:

o Phát sinh Messagebox hỏi lại việc đóng form có chính xác không, nếu người sử

dụng xác nhận bằng nút Yes thì cho thóat chương trình

Hướng Dẫn :

//bắt lỗi bằng try-catch try { int nSoLuong; decimal decDonGia, decThanhTien; //nếu user ko nhập số lượng if (txtSoLuong.Text == "") { MessageBox.Show("Chưa nhập số lượng!"); txtSoLuong.Focus(); } //nếu đ~ nhập sl nhưng chưa nhập đơn gi| else if (txtDonGia.Text == "") { MessageBox.Show("Chưa nhập gi| h{ng!"); txtDonGia.Focus(); } //nếu đ~ nhập sl v{ dg else { //chuyển sl v{ dg đ~ nhập sang kiểu số để xử lý nSoLuong = Convert.ToInt32(txtSoLuong.Text); decDonGia = Convert.ToDecimal(txtDonGia.Text); //nếu số lượng nhập v{o }m if (nSoLuong <= 0) { MessageBox.Show("Số lượng h{ng >0 !"); txtSoLuong.SelectAll(); txtSoLuong.Focus(); } //nếu sl ko }m nhưng đơn gi| }m else if (decDonGia <= 0) {

Page 51: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 51/102

MessageBox.Show("Đơn gi| phải >0 !"); txtDonGia.SelectAll(); txtDonGia.Focus(); } //nếu cả sl v{ dg đều ko }m else { //tính to|n v{ xuất dữ liệu tính đc ra lable decThanhTien = nSoLuong * decDonGia; lblThanhTien.Text = string.Format("{0:N} VND", decThanhTien); } } } catch (Exception ex) { //nếu có bất cứ sự sai xót n{o m{ phía trên ko đề cập //m|y sẽ hiện thông b|o lỗi của hệ thống MessageBox.Show(ex.Message, "Thông báo!"); }

Bắt lỗi text box Số Lượng ko được phép nhập số (vào sự kiện KeyPress của txtSoLuong)

if ((e.KeyChar >= 'A' && e.KeyChar <= 'Z') || (e.KeyChar >= 'a' && e.KeyChar <= 'z')) e.Handled = true;

Làm tương tự với text box Đơn Giá

Bắt lỗi text box Đơn Hàng ko được để dữ liệu rỗng (dùng errorProvider)

Vào ToolBox tìm component errorProvider và kéo vào form

Trong sự kiện Validating của TextBox, gõ đoạn code:

if (txtTenHang.Text == "") { errorProvider1.SetError(txtTenHang, "Bạn phải nhập tên h{ng!"); e.Cancel = true; } else errorProvider1.SetError(txtTenHang, "");

Thiết lập button Kết thúc và sự kiện formClosing như những bài trước

Bài 2:

Thiết kế và viết chương trình tính diện tích của hình chữ nhật. Phải kiểm tra dữ liệu nhập vào từ

bàn phím một cách chặt chẽ.

Bắt lỗi như bài 1

Thiết lập button tính diện tích:

Page 52: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 52/102

double dbDai = Convert.ToDouble(txtChieuDai.Text); double dbRong = Convert.ToDouble(txtChieuRong.Text); double dbDienTich = dbDai * dbRong; lblDienTich.Text = string.Format("{0:N2}", dbDienTich);

Bài 3:

Thiết kế và viết chương trình tính chu vi của hình tròn có bán kính R nhập vào từ bàn phím (lưu

ý kiểm tra dữ liệu chặt chẽ)(Chuvi=2*pi*R). Dùng hàm Math.PI

Bài 4

Thiết kế và xử lý chương trình giải phương trình bậc 1, 2. (hình tham khảo có thể thiết kế khác

sao cho hợp lý).

Page 53: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 53/102

Biện luận giải Pt bậc I và II: xem lại bài 9 module 1

H{m tính pt bậc I: void giaiPtBacI(int a, int b) { if (a == 0) { if (b == 0) lblKetQua.Text = "Pt co vo so nghiem!"; else lblKetQua.Text = "Pt vo nghiem!"; } else lblKetQua.Text = string.Format("Pt co nghiem x = {0:N2}", -b / (a * 1.0)); }

H{m tính pt bậc II void giaiPtBacII(int a, int b, int c) { if (a == 0) giaiPtBacI(b, c); else { double dbDelt = Math.Pow(b, 2) - 4 * a * c; if (dbDelt < 0) lblKetQua.Text = "Pt vo nghiem!"; else if (dbDelt == 0) lblKetQua.Text = string.Format("Pt co nghiem kep x= {0:N2}", -b / (2.0 * a)); else { double dbNghiem1 = (-b + Math.Sqrt(dbDelt)) / (2.0 * a); double dbNghiem2 = (-b - Math.Sqrt(dbDelt)) / (2.0 * a); lblKetQua.Text = string.Format("Pt co 2 nghiem phan biet \n\t x1 = {0:N2}\n\t x2 = {1:N2}", dbNghiem1, dbNghiem2); } } }

Trong các button tính toán, ta tạo biến, truyền dữ liệu vào biến rồi gọi hàm thực thi

Page 54: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 54/102

Bài 5:

Mục đích:

Sử dụng hằng số, biến toàn cục (module variable)

Yêu cầu

Thiết kế giao diện như hình bên dưới.

Yêu cầu:

1) Sinh viên tự thiết kế các đối tượng trên form cho phù hợp

2) Thiết đặt TabIndex cho hợp lý.

3) Nhấn nút Tính hoặc Enter thì tính và hiện thông tin lên các ô tương ứng.

4) Nhấn vào Exit hoặc Esc thì thoát chương trình.

Ghi chú: sử dụng biến toàn cục và hằng số cho hợp lý

Hướng dẫn:

Bắt lỗi bằng try-catch

Thiết lập button Tính

Page 55: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 55/102

// các bạn phải viết hàm và bắt lỗi cho chương trình (Provider ,try{catch},presskey…)

// hiển thị msgbox xác nhận khi thoát chương trình

Page 56: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 56/102

Bài 6:

Mục đích:

Sử dụng hằng số, biến toàn cục (module variable)

Yêu cầu

Thiết kế giao diện như hình bên dưới.

1. Khi chương trình vừa thực thi:

- Form được hiển thị giữa màn hình. Canh lề phải cho các control chứa dữ liệu là

số, thiết lập hệ thống Tab hợp lý.

- Thiết lập nút “Tính TT” nhận phím Enter hoặc cho sự kiện Click.

2. Yêu cầu cài đặt

Tên khách hàng không được phép rỗng.

Số lượng sách là số nguyên dương.

Mỗi quyển sách đều được bán với giá là 20000.

Nút “Tính TT”: tính thành tiền và xuất kết quả lên lable thành tiền

Thành tiền = Số lượng * Đơn Giá ;

Lưu ý: Nếu Khách hàng là SV thì được giảm 5% thành tiền.

Page 57: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 57/102

Nút “Tiếp”:

o Xóa nội dung các control trong groupbox “Hóa Đơn”

o Đặt focus cho Textbox “Tên Khách Hàng”

Nút “Thống Kê”: Tính và hiển thị kết quả trên các lable trong groupbox “Thống kê”

Nút “Kết Thúc”: Phát sinh messageBox hỏi lại người dùng có thật sự muốn đóng

ứng dụng hay không?

Hướng dẫn:

1.Viết hàm

// khai báo biến toàn cục

int mnTongKH = 0;

int mnTongKH_SV = 0; decimal mdTongDoanhThu; const decimal mdLUATGIAMGIA = 0.05M; const decimal mdGiaTien = 20000;//khai b|o hằng số // bắt lỗi không cho để trống tên khách hàng(provider) private void txtKhachHang_Validating(object sender, CancelEventArgs e) { if(txtKhachHang.Text=="") { errorProvider1.SetError(txtKhachHang, "Tên kh|ch h{ng ko được phép rỗng!"); e.Cancel = true; } else errorProvider1.SetError(txtKhachHang, ""); } // viết h{m tính decimal tinhTien(int sl, bool kt) { decimal decTT = sl * mdGiaTien;//thanh tien = sl * dongia if (kt)//neu checkbox giam gia dc check decTT -= decTT * mdLUATGIAMGIA; return decTT; } //viết h{m cho buttonTinh private void btnTinh_Click(object sender, EventArgs e) { try { int nSLSach; nSLSach = Convert.ToInt32(txtSLSach.Text); bool checkSV = chkSV.Checked; decimal decThanhTien = tinhTien(nSLSach,checkSV); mdTongDoanhThu += decThanhTien; if (chkSV.Checked == true) mnTongKH_SV++; else

Page 58: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 58/102

mnTongKH++; lblThanhTien.Text = string.Format("{0:N} VND", decThanhTien); } catch (Exception) { throw; } } //viết h{m cho button thống kê private void btnThongKe_Click(object sender, EventArgs e) { lblTongKH_SV.Text = mnTongKH_SV.ToString(); lblTongKH.Text = mnTongKH.ToString(); lblTongDoanhThu.Text = string.Format("{0:N} VND",mdTongDoanhThu); } private void btnThoat_Click(object sender, EventArgs e) { this.Close(); } // Xóa thông tin v{ l{m mới private void btnTiep_Click(object sender, EventArgs e) { txtKhachHang.Clear(); txtSLSach.Clear(); chkSV.Checked = false; lblThanhTien.Text = ""; txtKhachHang.Focus(); } //bắt lỗi không cho nhập chữ private void txtSLSach_KeyPress(object sender, KeyPressEventArgs e) { //cach 1

if (char.IsNumber(e.KeyChar) == false && e.KeyChar != 8)

e.Handled = true;

//cach 2

if (( e.KeyChar < 48 || e.KeyChar >57) && (e.KeyChar !=8))

e.Handled = true;

//cach 3

if ((char.IsDigit(e.KeyChar) == false) && (char.IsControl(e.KeyChar)

== false))

e.Handled = true;

} // khi đóng Form hiện thông b|o cho người dùng private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dl; dl = MessageBox.Show("Có chắc l{ bạn muốn đóng ứng dụng n{y ko?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (dl == DialogResult.No) e.Cancel=true; } // h{m tham khảo

Thiết lập hàm tính tiền:

Page 59: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 59/102

Bài 7:

Viết chương trình nhập vào năm dương lịch và xuất năm âm lịch tương ứng.

Mục đích: Sử dụng câu lệnh switch.

Switch

{

Case:…

}

Biết rằng : Năm Âm = Can + Chi;

Can = Năm dương % 10 :

0 1 2 3 4 5 6 7 8 9

Canh Tân Nhâm Quý Giáp Ất Bính Đinh Mậu Kỷ

Chi = dương lịch % 12 :

0 1 2 3 4 5 6 7 8 9 10 11

Thân Dậu Tuất Hợi Tý Sửu Dần Mẹo Thìn Tỵ Ngọ Mùi

//Khai bao bien

int intNamDuong;

string strCan="";

string strChi="";

Page 60: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 60/102

//1. kiem tra khac rong

//2. Gan Gia tri

//3. kiem tra số dương

//viết hàm tính can dựa theo cấu trúc sau

switch (intNamDuong % 10)

{

case 0:

strCan = "Canh";

break;

.

.

.

case 9:

strCan = "Kỷ";

break;

}

//viết hàm tính chi dựa theo cấu trúc sau

switch (intNamDuong % 12)

{

case 0:

strChi = "Thân";

break;

.

.

case 11:

strChi = "Mùi";

break;

}

//xuất kết quả ra label Gợi ý:

lblamLich.Text= GoihamCan(Nam) + Khoang trang + GoiHamChi(nam)

hàm can và hàm chi dựa cấu trúc switch trên.

Page 61: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 61/102

// Thoát Chương trình có thông báo

private void btnThoat_Click(object sender, EventArgs e) { DialogResult dl; dl = MessageBox.Show("Có chắc bạn muốn đóng ứng dụng?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dl == DialogResult.Yes) Close(); }

Bài 8:

Chương trinh quay số may mắn mục đích áp dụng đối tượng Timer và phát sinh số ngẫu

nhiên.

Thiết kế giao diện như hình trên

- Groupbox chứa 3 labe.

- 2 Label dùng để hiễn thị kết quả (canh lề pải)

- 3 button như hình vẽ.

Yêu cầu

Khi chương trình vừa bắt đầu

- 3 label sẽ hiễn thị 3 số 7.

- Máy tính có 100 đồng

- Người chơi có 100 đồng

Khi Click nút quay số

Luật chơi:

Mỗi lần quay số, người chơi phải trả trước 30 đồng, tương ứng là máy sẽ được cộng

thêm 30 đồng. Và nếu người chơi có số tiền ít hơn 30 đồng thì sẽ không được phép chơi tiếp

Nếu mỗi lần quay được số 7, người chơi sẽ được thưởng như sau

Page 62: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 62/102

- Nếu ô đầu tiên là số 7 (random từ 0 đến 8), được thưởng 100 đồng + 50% số tiền

của máy.

- Nếu ô số 2 là số 7(random từ 0 đến 9), người chơi được thưởng 30 đồng + 50%

tiền của máy.

- Nếu ô số 3 là số 7(random từ 0 đến 10), người chơi được thưởng 10 đồng;

(số tiền người chơi sẽ được cộng dồn nếu cả 3 ô cùng là số 7, tiền máy sẽ giảm đi phần

trăm tương ứng)

Nút game mới

Cho phép 1 lượt chơi mới hòan tòan (set lại tền ngươi chơi và tiền máy là 100)

Hướng dẫn:

//Khai báo biến

decimal tienmay = 100;

decimal tiennguoi = 100;

//Xử lý trên sự kiện của timer

private void timer1_Tick(object sender, EventArgs e)

{

decimal tienthuong;

int so;

int so3;

int so2;

timer1.Interval += 5;//tăng giá trị của timer

//tạo số ngẫu nhiên

Random ran = new Random();

so = ran.Next(0, 8);

Page 63: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 63/102

so2 = ran.Next(0, 9);

so3 = ran.Next(0, 10);

//xuất số ngẫu nhiên ra label

lblSo.Text = so.ToString();

lblSo2.Text = so2.ToString();

lblSo3.Text = so3.ToString();

//kiểm tra số ngẫu nhiên vừa tạo ra có phải lá số 7 hay không

if (timer1.Interval > 200) // điều kiện dừng của timer

{

timer1.Stop();

if (so == 7)

{

//tính tiền thưởng

//tính tiền người chơi nhận được

//tính tiền máy

tienthuong = 100 + (tienmay * 50) / 100;

tiennguoi = tiennguoi + tienthuong;

tienmay = tienmay - (tienmay * 50) / 100;

//xuất thông báo

MessageBox.Show("Bạn được thưởng " + tienthuong + " đồng", "Lucky

Seven !");

}

if (so2 == 7)

{

//tính tiền thưởng

//tính tiền người chơi nhận được

//tính tiền máy

Page 64: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 64/102

}

if (so3 == 7)

{

//tính tiền thưởng

//tính tiền người chơi nhận được

//tính tiền máy

}

//hiễn thị kết quả

lblTienNguoiChoi.Text = tiennguoi.ToString();

lblTienMay.Text = tienmay.ToString();

}

}

//xử lý nút quay số

private void btnQuaySo_Click(object sender, EventArgs e)

{

if (tiennguoi >= 30)//kiểm tra người chơi có đủ tiền không

{

timer1.Enabled = true;//kích hoạt timer

timer1.Interval = 2;//quy định thời gian tái kích hót timer

tienmay = tienmay + 30;//tăng tiền của MÁY

tiennguoi = tiennguoi - 30;//giảm tiền người chơi

//hiễn thị kết quả ra màn hình

}

Else//không còn đủ tiền: over Game

{

// Thông báo không thể chơi tiếp cho không đủ tiền

// Khóa timer

// khóa nút quay số

Page 65: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 65/102

}

}

Bài 9:

Viết chương trình cho phép phát sinh 1 số nguyên thuộc [0,9], sau đó cho người dùng

đoán số và chương trình sẽ hiện kết quả xem người dùng có đoán đúng số phát sinh

đó hay không.

HD: Dùng lớp Random để phát sinh số ngẫu nhiên.

Hướng dẫn:

1. nNguoiChon < 0 hay nNguoiChon > 9 //hiển thị thông b|o

nhắc nhở

2. nNguoiChon == nMayChon //hiển thị thông b|o chúc mừng

3. nNguoiChon != nMayChon //hiển thị thông b|o ko may mắn

4. bắt lỗi không nhập chữ textbox

5. đóng form có thông b|o

// Viết h{m cho Button KQ

private void btnKetQua_Click(object sender, EventArgs e)

{ int nNguoiChon, nMayChon;//khai bao 2 bien if (txtChonSo.Text == "") { MessageBox.Show("Bạn chưa chọn số!", "Warning");// thông báo khi TextBox rỗng txtChonSo.Focus(); } else { nNguoiChon = Convert.ToInt32(txtChonSo.Text);//truyen du lieu cho bien NguoiChon Random rand = new Random();//phat sinh so ngau nhien nMayChon = rand.Next(0, 10);//truyen du lieu cho bien MayChon if (nNguoiChon < 0 || nNguoiChon > 9) MessageBox.Show("Bạn ko được nhập số <0 hoặc >9", "Warning"); TB nếu nhập >9 else { if (nNguoiChon == nMayChon) {

Page 66: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 66/102

MessageBox.Show("Chúc mừng! Số bạn chọn trùng với số m|y chọn!", "Thông báo!"); msgBox thông b|o khi bạn chọn số trùng vs số của m|y txtChonSo.Clear(); // xóa thông tin textbox txtChonSo.Focus(); //con trỏ về ô text box } else { MessageBox.Show("Số m|y chọn l{ " + nMayChon.ToString() + ", số bạn chọn ko trùng với số m|y rồi!", "Thông báo!"); // thông b|o không trùng với số m|y txtChonSo.Clear();// xóa thông tin textbox txtChonSo.Focus();//con trỏ về ô text box } } } } //bắt lỗi không cho nhập chữ v{o textBox private void txtChonSo_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar >= 'A' && e.KeyChar <= 'Z') || (e.KeyChar >= 'a' && e.KeyChar <= 'z')) e.Handled = true; } //thông b|o xuất hiện khi đóng Form private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dl; dl = MessageBox.Show("Có chắc l{ bạn muốn đóng ứng dụng n{y ko?", "Thông báo!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (dl == DialogResult.No) Close(); else txtChonSo.Focus(); // nếu không đóng form thì con trỏ về textbox }

Bài 10:

Mục đích tạo các đối tượng và sự kiện động trong lúc runtime, nhiều đối tượng cùng chung một sự kiện (Event). Thiết kế giao diện trình bày sơ đồ các chỗ ngồi của một rạp chiếu phim giúp người sử dụng chọn vị trí muốn mua (xem hình bên dưới). Trên sơ đồ này cũng thể hiện những vị trí đã bán vé và những vị trí chưa bán vé bằng cách thể hiện màu khác nhau (ghế chưa bán vé màu trắng, ghế đã bán vé màu vàng, ghế đang chọn màu xanh).

Yêu Cầu:

Page 67: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 67/102

Khi khởi động, ứng dụng phải nằm giữa màn hình. Không cho phép người dùng thay đổi kích

thước form.

Các label từ 1->15 không thiết kế mà nó được tạo tự động khi load ứng dụng.

Khi người sử dụng nhấp chuột tại một vị trí trên sơ đồ thì:

o Nếu đây là vị trí chưa bán vé thì đổi màu của vị trí này sang màu xanh để cho biết đây là vị

trí đang chọn.

o Nếu đây là vị trí đang chọn (có màu xanh) thì đổi màu của vị trí này trở về màu trắng

o Nếu đây là một vị trí đã bán vé thì xuất hiện một thông báo cho người sử dụng biết thông

qua messageBox.

Sau khi đã chọn các vị trí người sử sụng có thể nhấn vào nút CHỌN hoặc HỦY BỎ.

Nếu click vào nút CHỌN (hoặc nhấn phím Enter) thì:

Đổi màu các vị trí đã chọn (màu xanh) trên sơ đồ sang màu vàng (cho biết vị trí đã bán vé) và

xuất lên label thành tiền phải trả cho số vé đã mua ( giả sử giá vé là 100đ/ghế)

Nếu click vào nút HỦY BỎ (hoặc nhấn phín ESC) thì:

Đổi màu các vị trí đã chọn (màu xanh) trên sõ ðồ sang màu trắng trở lại và xuất lên label thành

tiền giá trị 0

Hướng Dẫn:

// Cách Khởi tạo các label: void taoDongLable(int soGhe) { for (int i = 1; i <= soGhe; i++) { Label lbl = new Label();//khoi tai bien lbl kieu label lbl.Text = i.ToString(); lbl.BorderStyle = BorderStyle.Fixed3D; lbl.BackColor = Color.White; lbl.Width = 25; lbl.Height = 25; lbl.Name = "x" + i.ToString(); lbl.Click += new EventHandler(EventDong_Click);//truyen su kien cho bien fldmBanVe.Controls.Add(lbl);//them bien vao khung FlowLayoutPanel } }

//Hủy vé đã chọn

private void btnHuy_Click(object sender, EventArgs e) { foreach (Label lbl in fldmBanVe.Controls) if (lbl.BackColor == Color.Blue) lbl.BackColor = Color.White; // đổi m{u label xanh th{nh trắng lblThanhTien.Text = ""; // label tiền th{nh rỗng }

// đã chọn

Page 68: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 68/102

private void EventDong_Click(object sender, EventArgs e) { Label lbl = (Label)sender; if (lbl.BackColor == Color.White) lbl.BackColor = Color.Blue; // nếu trắng th{nh xanh else if (lbl.BackColor == Color.Blue) lbl.BackColor = Color.White; // nếu xanh th{nh trắng else MessageBox.Show("Ghế " + lbl.Text + " bạn đ~ chọn rồi.", "Chú ý");// msgbox thông báo }

//

private void btnChon_Click(object sender, EventArgs e) { int nTien = 0; foreach (Label lbl in fldmBanVe.Controls) { if (lbl.BackColor == Color.Blue) { lbl.BackColor = Color.Yellow; nTien += 100; } } lblThanhTien.Text = string.Format("{0} VND", nTien);/hiển thị thông tin trên

label

//Button Kết Thúc

This.Close();

Các bạn có thể dùng msgBox thông báo cho người dùng trước khi đóng chương trình:

Bài 11:

Hãy tạo một Project dùng để quản lý giờ thuê máy của một phòng máy có giao diện và yêu cầu như sau: o Khi form vừa load lên màn hình thì

các CheckBox Bắt đầu có Enabled=True các CheckBox Kết thúc có Enabled=False Các Label có Caption= rổng

o Khi người sử dụng Click vào ChechBox Bắt Đầu của một máy và nếu thuộc tính value của nó =1 thì:

Hiện Giờ hiện tại lên Label bắt đầu của máy tương ứng

Cho thuộc tính Enabled của CheckBox Bắt đằu =False

Cho thuộc tính Enabled của CheckBox Kết thúc =True

o Khi người sử dụng Click vào ChechBox Kết thúc của một máy và nếu thuộc tính value của nó =1 thì:

Hiện Giờ hiện tại lên Label Kết thúc của máy tương ứng Dựa vào Giờ và Phút (không cần quan tâm đến số giây) trên các label Bắt

đầu và Kết thúc tính ra số tiến phải trả, rồi dùng Msgbox để thông báo cho người sử dụng như hình bên (tiền thuê máy là 3000đ/giờ)

Page 69: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 69/102

Xóa nội dung trong các Label Bắt đầu và Kết thúc Cho thuộc tính Enabled của CheckBox Bắt đằu =True Cho thuộc tính Enabled của CheckBox Kết thúc =False Cho thuộc tính Value của CheckBox Bắt đằu =0 Cho thuộc tính Value của CheckBox Kết thúc =0

Khi người sử dụng Click vào nút Dừng chương trình thì kiểm tra nếu có máy đang thuê phải nhắc nhở người sử dụng bằng MsgBox, khi nào người sử dụng thật sự muốn kết thúc thì mới dừng chương trình.

Hướng Dẫn: //Các bạn thực hiện các dòng lệnh sau: chkKetThuc1.Enabled = false; chkKetThuc2.Enabled = false;

//Lưu ý các bạn có thể thay đổi thuộc tính CheckBox giống Button: Properties (checkbox)-> Appearance . đổi thành Button: //Xây Dựng Hàm cho CheckBox và thuộc tính Enable cho CheckBox Bắt Đầu: if (chkBatDau1.Checked == true) { lblBatDau1.Text = DateTime.Now.ToLongTimeString();//hien thi gio he thong // Thay đổi thuộc tính Enable cho CheckBox: chkBatDau1.Enabled = false; chkKetThuc1.Enabled = true; chkKetThuc1.Checked = false; } }

// Hàm quy đổi giờ và tính tiền if (chkKetThuc1.Checked == true) { lblKetThuc1.Text = DateTime.Now.ToLongTimeString(); DateTime batDau = Convert.ToDateTime(lblBatDau1.Text);//khai bao bien DateTime ketThuc = Convert.ToDateTime(lblKetThuc1.Text); TimeSpan soGioThue = ketThuc - batDau;//tinh thoi gian thue may double dbGio = soGioThue.TotalHours;//chuyen so gio thue sang kieu so double dbTien = dbGio * 3000L;//tinh tien MessageBox.Show("Số giờ thuê là: " + dbGio + " h" + "\n" + "Số tiền phải trả: " + dbTien + " VND","Thông báo máy 1!");//xuat thong bao //Xóa label

lblBatDau1.Text = "";//xóa thong tin o 2 label lblKetThuc1.Text = "";

// lệnh chuyển thuộc tính Enable , Value của CheckBox Bắt Đầu và Kết Thúc

chkKetThuc1.Enabled = false;//quy dinh viec hien thi chkBatDau1.Checked = false;//cac radio chkBatDau1.Enabled = true; chkKetThuc1.Checked = false;

// Hỏi dừng chương trình sử dụng MsgBox :

Page 70: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 70/102

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dl; dl = MessageBox.Show("Có chắc bạn muốn đóng ứng dụng?", "Thông báo!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (dl == DialogResult.No) e.Cancel = true; }

Lưu ý các bạn sử dụng event của Form (Formclosing) // thêm hỏi tắt chương trình (khi có 1 máy đang hoạt động) private void btnExit_Click(object sender, EventArgs e) { if (chkBatDau1.Checked == true || chkBatDau2.Checked == true)// nếu có thì làm MessageBox.Show("Có 1 m|y trong hệ thống vẫn chưa tính tiền, bạn h~y xem lại!", "Warming!", MessageBoxButtons.OK, MessageBoxIcon.Warning); Else // ko thì làm trong else this.Close(); }

Bài 12:

Hãy tạo một Project dùng để quản lý giờ thuê máy của một phòng máy có giao diện và yêu cầu như sau:

o Khi form vừa load lên màn hình thì

Các image trong khung máy 1 và máy 2 có picture là Máy tính Các Label có Text = rổng

o Khi người sử dụng click vào image của máy 1 hoặc máy 2 thì: Nếu là máy chưa thuê:

Đổi picture của image thành hình Đồng hồ Hiện giờ hiện tại vào label bắt đầu của máy (label phía trên)

Nếu là máy đang thuê: Hiện giờ hiện tại vào label Kết thúc của máy (label phía dưới) Dựa vào Giờ và Phút (không cần quan tâm đến số giây) trên các label Bắt đầu và Kết thúc tính ra số tiến phải trả, rồi dùng Msgbox để thông báo (tiền thuê máy là 3000đ/giờ) Đổi picture của image thành hình Máy tính Xóa nội dung trong các Label Bắt đầu và Kết thúc Khi người sử dụng Click vào nút Kết thúc thì kiểm tra nếu có máy đang thuê phải nhắc nhở người sử dụng bằng MsgBox, khi nào người sử dụng thật sự muốn kết thúc thì mới dừng chương

Page 71: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 71/102

trình. Hướng Dẫn:

//khi click vào picBatDau1

private void picBatDau1_Click(object sender, EventArgs e)

{ lblBatDau1.Text = DateTime.Now.ToLongTimeString();// chạy giờ hệ thống

picBatDau1.Visible = false;

} private void picKetThuc1_Click(object sender, EventArgs e) { lblKetThuc1.Text = DateTime.Now.ToLongTimeString(); // chạy giờ hệ thống DateTime batDau = Convert.ToDateTime(lblBatDau1.Text); //hiển thị giờ trên label DateTime ketThuc = Convert.ToDateTime(lblKetThuc1.Text); TimeSpan soGioThue = ketThuc - batDau; //tính số giờ đ~ sử dụng double dbGio = soGioThue.TotalHours; // h{m qui đổi th{nh giờ double dbTien = dbGio * 3000L; // h{m tính tiền if (dbTien < 1000) MessageBox.Show("Số giờ thuê l{: " + dbGio + " h" + "\n" + "Số tiền phải trả: 1000 VND", "Thông báo máy 1!"); else MessageBox.Show("Số giờ thuê l{: " + dbGio + " h" + "\n" + "Số tiền phải trả: " + dbTien + " VND", "Thông báo máy 1!"); picBatDau1.Visible = true; lblBatDau1.Text = "";//Xóa thông tin lblKetThuc1.Text = "";}

Page 72: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 72/102

Module 4

Nội dung kiến thức thực hành:

+ Xử lý ngọai lệ (Error Handling for the User Interface).

+ Xử lý lỗi khi nhập liệu (VALIDATING USER INPUT)

Bài 1 :

Mục đích:

Sử dụng lớp Exception đề bẩy lỗi chương trình.

Sử dụng MessageBox để hiển thị thông báo lỗi

Yêu cầu:

Viết chương trình tính số nhiên liệu tiêu thụ trung bình theo giao diện sau”

Phải bắt lỗi chặc chẽ các trường hợp sau:

- Số dặm đường, số gallon tiêu thụ là số dương.

- Lỗi tràn số

- Lỗi chia cho số 0

- …

Hướng dẫn :

Page 73: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 73/102

Giáo trình trang

Bài 3 :

Mục đích:

Sử dụng lớp Exception đề bẩy lỗi chương trình.

Sử dụng MessageBox để hiển thị thông báo lỗi

Yêu cầu:

Viết lại bài 1, nhưng sử dụng đối tượng ErrorProvider để hiệ thị các thông báo lỗi ngay

trên control

Bài 3 :

Mục đích:

Sử dụng lớp Exception đề bẩy lỗi chương trình.

Sử dụng finally Block

Yêu cầu:

Thiết kế giao diện như hình bên dưới. Khi người dùng Click nút “Save”, chương

trình sẽ lưu lại nội dung trong TextBox save với tên được nhập vào trừ textbox

name.

Lưu ý:

Chương trình phải thức hiện việc đóng file bất kẻ có xảy ra lỗi hay không.

Hương dẫn:

Giáo trình trang

Page 74: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 74/102

Bài 4 :

Mục đích:

Sử dụng Component ErrorProvider kết hợp kỷ thuật Validation trên các control

Yêu cầu:

Viết lại bài tập một nhưng sử dụng chặn lỗi người dùng bằng kỹ thuật

Validation.

Lưu ý: Khi có lỗi nhập liệu trên các Textbox thì chỉ giữ focus không cho thực hiện tính

tóan, nhưng vẫn phải cho người dùng Click nút đóng form.

Hướng dẫn:

Thiết lập thuộc tính CausesValidation của Form là False

Khai báo thêm một biến tòan cục để kiểm tra người dùng Click đóng form

private bool closingFlag = false;

Trong sự kiện đóng form bổ sung code

Xem thêm giáo trình trang

Page 75: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 75/102

Bài 5 :

Mục đích:

Lập trình với lớp Exception thuộc không gian System.IO.IOException

Sử dụng các component OpenFileDialog, SaveFileDialog, ColorDialog, and FontDialog.

Yêu cầu:

Lưu ý: để đọc/ghi file cần bổ sung không gian “using System.IO”

Xem giáo trình trang

Bài 6 :

Mục đích:

Sử dụng kỹ thuật Validating User Input.

Yêu cầu:

Thiết kế form login như hình bên dưới.

Xuất thông báo login hợp lệ nếu nội dung của 2 textbox “UserName” và “Password” là

khác rỗng và không có bất kỳ khỏang trắng nào bên trong. Ngược lại xuất thông báo lỗi

cụ thể thông qua ErrorProvider.

Cho phép người dùng đóng Form bằng nút “Cancle” ngay cả khi xảy ra lỗi trên bất kỳ

trường dữ liệu nào.

Xem thêm hướng dẫn trong giáo trình trang

Page 76: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 76/102

Bài 7 :

Mục đích:

Sử dụng lớp Exception đề bẫy lỗi chương trình

Sử dụng Component ErrorProvider kết hợp kỹ thuật Validation trên các control

Yêu cầu:

Thực hiện lại kiểm lỗi ở các bài tập thuộc Module3

Page 77: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 77/102

Module 5

Nội dung kiến thức thực hành:

+ Tạo ứng dụng trên consoleApplication và windows form.

+ Sử dụng Mảng và danh sách

Bài 1:

Mục đích:

Xây dựng mảng một chiều trên ConsoleApp

Yêu cầu:

Nhập một mảng 1 chiều có N phần tử (N<20) (các giá trị được phát sinh ngẫu nhiên trong [-

100, 100])

a. Tìm số lớn nhất, nhỏ nhất trong mảng. Xuất ra vị trí các giá trị này.

b. Đếm xem trong mảng có bao nhiêu số dương, bao nhiêu số âm, bao nhiêu số 0.

c. Nhập vào số nguyên x, kiểm tra xem x có trong mảng hay không.

d. Tìm số dương nhỏ nhất trong mảng, số âm lớn nhất trong mảng

e. In dãy giảm dần.

Bài 2:

Mục đích:

Xây dựng mảng một chiều trên ConsoleApp

Yêu cầu:

Nhập một mảng 2 chiều có N x N phần tử (N<20) (các giá trị được phát sinh ngẫu nhiên trong

[-100,100])

a. Tìm số lớn nhất, nhỏ nhất trong mảng. Xuất ra vị trí các giá trị này.

b. Đếm xem trong mảng có bao nhiêu số dương, bao nhiêu số âm, bao nhiêu số 0.

c. Đếm số dương, số âm, số 0 ở dưới đường chéo chính, chéo phụ.

Page 78: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 78/102

d. Tính tổng các phần tử trong đường chéo chính, chéo phụ.

e. Tính tổng các phần tử nằm bên dưới đường chéo chính, chéo phụ.

f. Tìm số lớn nhất trong từng dòng của mảng.

Bài 3:

Mục đích:

Sử dụng mảng một chiều

Yêu cầu:

Thiết kế Form như hình sau:

Trong đó 2 group box sẽ chứa 2 label, để hiễn thị mảng và kết quả xử lý trên các button tương

ứng.

Hướng dẫn :

1. khai báo mảng tòan cục, với kích thước mảng MAX_SIZE là 1 hằng số.

2. KHởi tạo mảng trong Form_Load

Page 79: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 79/102

3. Xây dựng các phương thức theo yêu cầu

4. Gọi sử dụng các phương thức tại các button.

Bài 4:

Mục đích:

Sử dụng mảng hai chiều trên ConsoleApp

Yêu cầu:

Page 80: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 80/102

Nhập một mảng 2 chiều có N x N phần tử (N<20) (các giá trị được phát sinh ngẫu nhiên trong

[-100,100]). Tìm số dương nhỏ nhất trong mảng.

Ví dụ:

-9 8 3

-3 5 0

1 -30 7

Số dương nhỏ nhất trong mảng là 1

Bài 4:

Mục đích:

Sử dụng mảng hai chiều trên ConsoleApp

Yêu cầu:

Nhập một mảng 2 chiều có N x N phần tử (N<20) (các giá trị được phát sinh ngẫu nhiên trong

[-100,100]). Hãy trích mảng này ra thành hai mảng con: một mảng chứa các số dương, một

mảng chứa các số âm (giữ nguyên thứ tự dòng)

Ví dụ:

9 8 3

-3 5 0

1 -30 7

Bài 5:

Mục đích:

Sử dụng Arraylist,

Yêu cầu:

Xây dựng từ điễn đơn giản như sau

Page 81: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 81/102

- Khi nhập vào combobox 1 từ cần tra thì chương trình sẽ dò tìm đến chữ nào khớp

với ký tự gần nhất

- Khi nhấn nút Enter hoặc Doubleclick vào từ cần tra thì nghĩa tương úng của từ sẽ

hiển thị vào textbox bên phải tương ứng.

- Danh sách các từ lưu sẵn vào object (word) Arraylist

Hướng Dẫn:

Bên trái là Combobox thể hiện dưới dạng Simple, chứa danh sách các từ cần tra cứu.

Bên phải là TextBox thể hiện dưới dạng MultiLine, ghi nghĩa của các từ được chọn bên

Combobox.

Bài 6:

Mục đích:

1) Lấy thông tin qua lại giữa 2 form.

2) Thao tác thêm các Item vào listview.

3) Thêm các thộng tin vào statusStrip (ngày hệ thống, thông tin khác lấy từ

các contron

4) Bẫy lỗi nhập liệu qua Regex.Match.

Page 82: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 82/102

Yêu cầu:

1) Khi chọn sản phẩm qua button … thì hiện form danh sách mặt hàng.

+ Nếu double click trên list danh sác sản phẩm hoặc chọn

button Ok thì lấy tên sản phẩm đang chọn đưa vào label sản phẩm.

2) Khi nhấn nút tính

a. Kiểm tra nhập đủ thông tin trên các textbox

Boolean BayNhapRong()

{

//học thêm cấu trúc LINQ

var emptyBox = from Control currentCTR in Controls

where currentCTR is TextBox

let box = currentCTR as TextBox

where string.IsNullOrEmpty(box.Text)

orderby box.TabIndex

select box;

if (emptyBox.Count() > 0)

{

MessageBox.Show("Hãy nhập đầy đủ thông tin", "Lỗi",

MessageBoxButtons.OK, MessageBoxIcon.Error);

emptyBox.First().Select();

return true;

}

return false;

}

b. Kiểm tra xem có nhập đúng số hay phần thập phân.

private bool ValidateInput(string strInput, string strTest, string strMess)

{//phải đưa thêm thư viên using System.Text.RegularExpressions;

Page 83: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 83/102

bool valid = Regex.Match(strInput, strTest).Success;

if (!valid)

MessageBox.Show(strMess, "Lỗi Nhập Liệu",

MessageBoxButtons.OK, MessageBoxIcon.Error);

return valid;

}

//cách gọi xem phần button tính.

c. Đưa dữ liệu vào listview qua các Item và đưa thêm thông tin vào

StatusStrip lấy từ listview.

private void btnTinh_Click(object sender, EventArgs e) {

//cac ban bat bay loi theo reg

if (BayNhapRong() == false)

{

//bẫy lỗi nhập số theo regulaexpression

//"^[0-9]*$ với ^so trùng bắt buộc các số từ 0->9, * có thể

nhiều số

//$ so tới cuối chuỗi

//"[0-9][.?]*" với [.?] có thể có . hoặc không

if (!ValidateInput(txtSl.Text, @"^[0-9]*$", "Lỗi Nhập Số

Lượng"))

txtSl.Select();

else if (!ValidateInput(txtDG.Text, "[0-9][.?]*", "Lỗi Nhập

Đơn Giá"))

txtDG.Select();

else

{

int sl, stt; ;

Decimal dg, ThanhTien;

sl = Convert.ToInt32(txtSl.Text);

dg = Convert.ToDecimal(txtDG.Text);

ThanhTien = sl * dg;

stt = lvwDSSP.Items.Count + 1;

//tạo ra một iTem

ListViewItem lvwItem = new ListViewItem();

lvwItem.Text = stt.ToString();

lvwItem.SubItems.Add(lblSanPham.Text);

lvwItem.SubItems.Add(txtSl.Text);

lvwItem.SubItems.Add(txtDG.Text);

lvwItem.SubItems.Add(ThanhTien.ToString());

//Them 1 item vao listvies

lvwDSSP.Items.Add(lvwItem);

TinhTongDuaVaoStatusStrip(lvwDSSP);

}

}

}

void TinhTongDuaVaoStatusStrip(ListView lvwds)

{

//duyệt các item trong Listview

int TongSL=0;

Decimal TongTien=0;

foreach(ListViewItem lvwitem in lvwds.Items )

{

//lấy giá trị từng subitem

TongSL += Convert.ToInt32(lvwitem.SubItems[2].Text);

TongTien += Convert.ToDecimal (lvwitem.SubItems[4].Text);

}

Page 84: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 84/102

//đưa vào statusStrip

statusStrip1.Items[1].Text = TongSL.ToString();

statusStrip1.Items[2].Text = TongTien.ToString();

}

3) Khi nhấn nút xoá xác nhận lại việc xoá Item trên list view

private void btnXoa_Click(object sender, EventArgs e)

{

//đảm bảo có đang chọn 1 tem

if (lvwDSSP.SelectedItems.Count > 0)

{

DialogResult hoixoa;

hoixoa = MessageBox.Show("Bạn chắc xoá?", "Thông báo",

MessageBoxButtons.YesNo, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button1);

if(hoixoa==DialogResult.Yes )

{

//lây ra items đầu tiên trong tập đang chọn

ListViewItem ItemChon = lvwDSSP.SelectedItems[0];

lvwDSSP.Items.Remove(ItemChon); //remove 1 item

}

}

Module 6

Nội dung kiến thức thực hành:

+ Tạo ứng dụng theo mô hình hướng đối tượng (OOP).

Bài 1:

Yêu cầu:

Thiết kế class Hóa Đơn đáp ứng yêu cầu xử lý của giao diện trên.

Page 85: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 85/102

Hướng dẫn:

Tạo và thiết lập đối tượng:

1) Right-click vào tên project chọn View Class Diagram.

2) Trong cửa sổ ClassDiagram right-click vào vùng trống bất kỳ, chọn Add/Class.

3) Sửa tên object trong phần Class Name

4) Thiết lập trong class vừa tạo

1. Tạo các field private:

Tên hàng, số lượng, đơn giá.

2. Tạo các field static (field vẫn lưu lại giá trị khi ta tắt object):

Số hóa đơn, doanh thu.

3. Tạo các property thông thường.

4. Tạo property ReadOnly (chỉ có get-lấy ra chứ ko có set-truyền dữ liệu vào) đối

với các Field static.

5. Tạo các Contructor (là method có tên trùng với tên class)

//contructor ko tham so

public clsThanhTien() { } //contructor co truyen tham so public clsThanhTien(string ten, int sl, decimal dongia) { this.TenHang = ten; this.SoLuong = sl; this.DonGia = dongia; }

Page 86: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 86/102

6. Tạo các phương thức tính thành tiền:

public decimal thanhTien() { //tạo biến chứa gi| trị th{nh tiền v{ truyền v{o gi| trị decimal tt; //g|n biến bằng gi| trị Property số lượng * Property đơn gi| tt = SoLuong * DonGia; //khi method được gọi, đồng thời tăng số hóa đơn lên 1 //v{ cộng dồn biến th{nh tiền v{o biến Tổng Doanh Thu nDemHD++; decTongDoanhThu += tt; //trả về gi| trị biến Th{nh Tiền return tt; }

Để cho dễ nhìn, ta có thể đặt phần Property và Method và 2 cặp lệnh, cho phép

ta thu, mở tùy ý

# region Phần properties # endregion "Kết thúc" # region Phần methods # endregion "Kết thúc"

Thiết lập các button trong phần Design

1. Thiết lập button Tính

private void btnTinh_Click(object sender, EventArgs e) { //gọi lại class đ~ tạo cùng c|c đối tượng trong nó clsThanhTien obj = new clsThanhTien(); //truyền dữ liệu cho c|c đối tượng obj.SoLuong = Convert.ToInt32(txtSoLuong.Text); obj.DonGia = Convert.ToDecimal(txtDonGia.Text); //gọi h{m th{nh tiền trong class v{ xuất ra lable lblThanhTien.Text = string.Format("{0:N0} VND", obj.thanhTien()); }

2. Thiết lập button Thống Kê

private void btnThongKe_Click(object sender, EventArgs e) { //gọi lại class đ~ tạo cùng c|c đối tượng trong nó clsThanhTien obj = new clsThanhTien(); //khi click vào button Tính ở trên, ta đ~ gọi ra h{m tính th{nh tiền //v{ mỗi khi h{m th{nh tiền được gọi thì biến đếm hóa đơn tăng 1 //v{ biến tổng doanh thu được cộng dồn //cuối cùng ta xuất ra gi| trị lưu trữ mới nhất của 2 biến n{y lblDemHD.Text = obj.DemHD.ToString(); lblTongDoanhThu.Text = string.Format("{0:N0} VND", obj.TongDoanhThu); }

3. Các button còn lại làm như các Module trước

Page 87: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 87/102

Bài 2:

Yêu cầu:

1. Thiết kế Form như hình sau:

2. Thiết kế class Hóa Đơn đáp ứng yêu cầu xử lý của giao diện trên.

Tạo các field private:

o Họ tên, địa chỉ, điện thoại, giá tiền, màu xe (kiểu boolean, quản lý

việc radio button Xe Đen có được check hay ko).

Tạo các field static:

Page 88: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 88/102

o Số khách hàng, số khách mua xe đen, tổng doanh thu.

Tạo các property thông thường.

Tạo property ReadOnly đối với các Field static.

Tạo các Contructor

//contructor ko tham số public clsThanhTien() { } //contructor có truyền tham số public clsThanhTien(string hoten, string diachi, string dienthoai, decimal giatien, bool muaxeden) { HoTen = hoten; DiaChi = diachi; DienThoai = dienthoai; GiaTien = giatien; MuaXeDen = muaxeden; }

Xây dựng các phương thức xử lý tính toán.

1. Tính phụ thu:

a. Nếu user check vào nút Xe Đen thì thu thêm 5% trên giá tiền

b. Nếu ko check thì trả về giá trị 0

c. Code:

public decimal phuThu() { if (MuaXeDen) return (GiaTien * 0.05M); else return 0; }

2. Tính thành tiền:

a. Thành tiền = giá tiền + phụ thu + đơn giá

b. Khi tính thành tiền, ta đồng thời tăng property tổng khách hàng lên 1

c. Và kiểm tra radio Xe Đen có được check hay ko, nếu có tăng property KH

mua xe đen lên 1

d. Và cộng dồn biến thành tiền và property tổng doanh thu

e. Code:

public decimal thanhTien() { decimal tt; tt = GiaTien + phuThu() + hamThue(); //mỗi lần method được gọi, property tổng kh tăng 1 TongKH++; //nếu radio Xe Đen được check

Page 89: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 89/102

//thì property Tổng kh mua xe đen tăng 1, ko thi giữ nguyên if (MuaXeDen) TongKHXeDen++; //cộng dồn biến th{nh tiền cừa tính được v{o property tổng doanh thu TongDoanhThu += tt; return tt; }

Xây dựng các button trong phần Design:

1. Thiết lập button Tính

private void btnTinh_Click(object sender, EventArgs e) { //dùng contructor có truyền tham số clsThanhTien obj = new clsThanhTien(txtHoTen.Text, txtDiaChi.Text, txtDienThoai.Text, Convert.ToDecimal(txtGiaTien.Text), radDen.Checked); //xuất c|c dối tượng ra label lblPhuThu.Text = string.Format("{0:N0} VND", obj.phuThu()); lblThue.Text = string.Format("{0:N0} VND", obj.hamThue()); lblThanhTien.Text = string.Format("{0:N0} VND", obj.thanhTien()); }

2. Thiết lập button Thống Kê

private void btnThongKe_Click(object sender, EventArgs e) { //gọi lại class đ~ tạo clsThanhTien obj = new clsThanhTien(); //xuất c|c đối tượng cần thiết trong class ra label //phải convert chúng sang kiểu string, nếu ko sẽ b|o lỗi lblTongKH.Text = obj.TongKH.ToString(); lblTongKHXeDen.Text = obj.TongKHXeDen.ToString(); lblTongDoanhThu.Text = string.Format("{0:N0} VND", obj.TongDoanhThu); }

3. Các button còn lại làm như các Module trước

Module 7

Nội dung kiến thức thực hành:

Thao tác xữ lý Chuỗi (String)

Page 90: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 90/102

Các Hàm Cơn Bản:

String.Length(): Trã Về Đội Dài Chuỗi String

String.ToUpper(): In Hoa Chuỗi String

String.ToLower(): In Thường Chuỗi String

String.IndexOf(„?‟): Trã về Vị Trí Của ? Trong Chuỗi String

String.Replace("?","?"): Thay Thế Chuỗi

String.Substring(?): Cắt Chuỗi String Từ Vị Trí ?

String.Trim(): Cắt Bỏ Tất Cả Khoản Trắng Dư Thừa ở Vị Trí Đầu và Cuối

Chuỗi String

Bài 1:

Viết chương trình có giao diện như sau:

Yêu Cầu:

1. Khi Chương Trình bắt đầu:

Các Controls Button Nhập Dữ Liệu và Button kết thúc chương trình được

thao tác Enable = true.

Các Controls còn lại bị mất hiệu lực Enable = false.

2. Khi Button Nhập Dữ Liệu được Click:

txtNhapLieu

btnNhapLieu

btnInHoa

txtKetQua

btnDemTu1

Dong

Page 91: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 91/102

Các Button Thao Tác chuỗi được được thao tác Enable = true.

Button Nhập Dữ Liệu được mất hiệu lực Enable = false.

Ta gọi hàm void KhoaHieuLucButton(? ?).

Xoá nội dung của Textbox Nhập Dữ Liệu và Textbox Kết Quả và đưa Trỏ

Chuột vào Textbox này.

3. Khi Các Buttons Thao Tác Chuỗi được Click:

Kết Quả sau khi xữ lý Chuỗi sẽ được xuất ra Textbox Kết Quả.

4. Khi Button Làm Mới được Click:

Xóa nội dung của 2 Textbox Nhập Dữ Liệu và Kết Quả.

Button Nhập Dữ Liệu được Enable và Các Button bị mất hiệu lực Enable =

false (Trừ Button Thoát).

5. Khi Button Thoát được Click:

Hiễn thị MessageBox hỏi người sử dụng có muốn đóng Chương Trình, Nếu

người sử dụng đồng ý thì Chương Trình sẽ được đóng.

Hướng Dẫn:

Xây Dựng Các Control:

2 TextBox cho phép hiễn thị nhiều dòng (gán property Multiline=true) gồm:

TextBox Nhập Dữ Liệu và TextBox Kết Quả

11 Buttons Lệnh.

Xây dựng Button Nhập Dữ Liệu:

Gợi Ý: Sử dụng thuộc tính Enable của Controls, ta truyền giá trị cho hàm là

true/false để xác định control nào có hiệu lực.

Viết Hàm Hiệu Lực Các Controls

void KhoaHieuLucButton(Boolean Giatri) {

txtchuoigoc.Enabled = Giatri;

txtChuoiKetQua.Enabled = Giatri;

//Đảo Ngược Giá Trị True và False

btnNhapDuLieu.Enabled = !Giatri;

btnLamMoi.Enabled = Giatri;

btnInHoaDauMoiTu.Enabled = Giatri;

btnInHoaDauMoiTu.Enabled = Giatri;

btnInHoa.Enabled = Giatri;

btnInThuong.Enabled = Giatri;

btnDemSoTu.Enabled = Giatri;

btnDemHoa.Enabled = Giatri;

btnInNguyenPhuAm.Enabled = Giatri;

btnDemKyTuThuong.Enabled = Giatri;

btnDemTuMoiDong.Enabled = Giatri;

}

Method cho Button Nhập Dữ Liệu

private void btnNhapDuLieu_Click(object sender, EventArgs e)

{

Page 92: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 92/102

//Truyền Tham Trị Cho Hàm KhoaHieuLucButton để bật các Button Lệnh

KhoaHieuLucButton(true);

//Đưa Trỏ Chuột Vào TextBox Nhập Dữ Liệu

txtchuoigoc.Focus();

}

Method cho Button Làm Mới

private void btnNhapDuLieu_Click(object sender, EventArgs e)

{

//Truyền Tham Trị Cho Hàm KhoaHieuLucButton để khóa các Button Lệnh

KhoaHieuLucButton(false); }

Xây dựng Button In Hoa Đầu Mỗi Từ, In Hoa Chuỗi, In Thường Chuỗi:

Gợi Ý: Ta sử dụng hàm xữ lý chuỗi và trã về giá trị kiểu chuỗi.

Sử dụng phương thức sau để đổi hoa đầu từ

System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTit

leCase(s.ToLower())

Viết Hàm In Hoa Đầu Mỗi Từ

string DoiChuoiInHoaDauMoiTu(string s)

{

//Sử Dụng Phương Thức Sau Để In Hoa Đầu Mỗi Từ

return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());

}

Method cho Button In Hoa Đầu Mỗi Từ

private void btnInHoaDauMoiTu_Click(object sender, EventArgs e)

{

//Tạo 1 Biến Để Chứa Chuỗi Gốc

//Ta Sử Dụng Biến này Để Không Làm Ảnh Hưởng Đến Chuỗi Gôc

string s = txtchuoigoc.Text;

//Ta Truyền Tham Biến Cho Hàm Để Lấy Trực Tiếp Kết Quả

//Gán Kết Quả Vào TextBox Kết Quả

txtChuoiKetQua.Text = DoiChuoiInHoaDauMoiTu(s);

}

Viết Hàm In Hoa Chuỗi

void DoiInHoaChuoi(string s)

{

//Sử Dụng Phương Thức ToUpper()

s = s.ToUpper();

}

Method cho Button In Hoa Chuỗi

private void btnInHoa_Click_1(object sender, EventArgs e)

{

//Tạo 1 Biến Để Chứa Chuỗi Gốc

//Ta Sử Dụng Biến này Để Không Làm Ảnh Hưởng Đến Chuỗi Gôc

string s = txtchuoigoc.Text;

//Ta Truyền Tham Biến Cho Hàm Để Lấy Trực Tiếp Kết Quả

DoiInHoaChuoi(s);

Page 93: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 93/102

//Gán Kết Quả Vào TextBox Kết Quả

txtChuoiKetQua.Text = s;

}

Tương tự xữ lý cho Button In Thưởng Chuỗi ta sử dụng phương thức

ToLower().

Xây dựng Button Đềm Số Từ Trong Chuỗi:

Gợi Ý:

Nếu ta có 1 chuỗi

“Cộng Hòa Xã Hội Chủ Nghĩa Việt Nam

Độc Lập Tự Do Hạnh Phúc”

Ta phải cắt hết những khoản trắng thừa ở vị trí đầu, giữa và cuối, dấu

xuống dòng “\r\n” của chuỗi.

string lamDepChuoi(? ?)

Sau khi cắt ta được 1 chuỗi mới với các mỗi từ cách nhau bởi 1 khoản

trắng.

Ta tiếp tục cắt từng từ của chuỗi cách nhau bởi khoản trắng, và gán từng

từ đó vào mãng chuỗi ta sử dụng phương thức chuoi.Split(' ')

Kết quả số từ có trong chuỗi sẽ bằng chiều dài của mãng chuỗi.

Viết Hàm cắt bỏ Khoản Trắng Thừa cho Chuỗi

string lamDepChuoi(string s)

{

//Cắt Bỏ Phần Thừa Ở Vị Trí Đầu và Cuối Chuỗi

s = s.Trim();

while (s.IndexOf(" ") > 0)

//Sử Dụng Phương Thức Replace

s = s.Replace(" ", " ");

//Xuất Kết Quả Chuỗi Đã Được Làm Gọn

return s;

}

Method cho Button Đếm Số Từ

private void btnDemTu_Click(object sender, EventArgs e)

{

//Tạo 1 Biến Để Chứa Chuỗi Gốc

//Ta Sử Dụng Biến này Để Không Làm Ảnh Hưởng Đến Chuỗi Gôc

string s = txtChuoiGoc.Text;

//Sử Dụng Hàm LamDepChuoi Để Cắt Bỏ Những Khoản Trắng

s = lamDepChuoi(s);

//Sử Dụng Phương Thức Replace Để Cắt Bỏ Dấu Xuống Dòng

s = s.Replace("\r\n", " ");

//Cắt Từng Từ Phân Cách Nhau Bởi Khoản Trắng

//Gán Từng Từ Đó Vào Mãng Chuỗi

string[] mangChuoi = s.Split(' ');

//Xuất Kết Quả Bằng Cách Đếm Độ Dài Của Mãng Chuỗi

txtChuoiKetQua.Text = "Có " + mangChuoi.Length + " từ trong chuỗi.";

}

Xây dựng Button Đềm Số Từ Trên Mỗi Dòng của Chuỗi:

Page 94: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 94/102

Gợi Ý:

Nếu ta có 1 chuỗi

“Cộng Hòa Xã Hội Chủ Nghĩa Việt Nam

Độc Lập Tự Do Hạnh Phúc”

Ta phải cắt hết những khoản trắng thừa ở vị trí đầu, giữa và cuối, dấu

xuống dòng “\r\n” của chuỗi.

Ta cắt từng dòng của chuỗi gán vào 1 mãng chuỗi gốc

Sau đó ta duyệt từng phần từ của mãng chuỗi gốc, mỗi phần từ của mãng

chuỗi chính là mỗi dòng, do đó là tiếp tục cắt từng từ trong mỗi phần tử của

mãng chuỗi phân cách bởi khoản trắng gán vào 1 chuỗi kết quả.

Độ dài của chuỗi Kết Quả là số Ký Tự, số Dòng là số phần tử của mãng

chuỗi gốc.

Ta Sử Dụng Lại Hàm cắt bỏ Khoản Trắng Thừa cho Chuỗi

string lamDepChuoi(string s)

Method cho Button Đếm Số Từ

private void btnDemTuMoiDong_Click(object sender, EventArgs e)

{

//Tạo 1 Biến Để Chứa Chuỗi Gốc

//Ta Sử Dụng Biến này Để Không Làm Ảnh Hưởng Đến Chuỗi Gôc

string s = txtChuoiGoc.Text;

//Tạo 1 Biến Để Chứa Kết Quả và 1 Biến Để Đếm Số Dòng

string ketQua = "", motDong="";

//Sử Dụng Hàm LamDepChuoi Để Cắt Bỏ Những Khoản Trắng

s = lamDepChuoi(s);

//Tạo 1 Mãng Chuỗi Để Chứa Giá Trị \r\n Đại Diện Cho Xuống Dòng

string[] chuanTach = new string[] { "\r\n" };

//Cắt Từng Dòng Trong Chuỗi Phân Cách Nhau Bởi Dấu Xuống Dòng

//Gán Từng Dòng Vào Từng Item Trong Mãng Chuỗi Line

string[] lines = s.Split(chuanTach,StringSplitOptions.RemoveEmptyEntries);

//Chạy Từ Đầu Đến Cuối Mãng Chuỗi

for (int i = 0; i < lines.Length; i++)

{

//Sử Dụng Hàm LamDepChuoi Để Cắt Bỏ Những Khoản Trắng Cho Item Thứ i Của Mãng Chuỗi

Lines

motDong = lamDepChuoi(lines[i]);

//Cắt Từng Từ Trong Chuỗi Phân Cách Nhau Bởi Khoản Trắng

//Gán Từng Dòng Vào Từng Item Trong Mãng Chuỗi mangChuoi

string[] mangChuoi = motDong.Split(' ');

//Xuất Kết Quả

//Số Từ Trên 1 Dòng sẽ Là Độ Dài Của Mãng Chuỗi mangChuoi

ketQua += "Dòng thứ " + (i + 1).ToString() + " có số từ là " + mangChuoi.Length +

Environment.NewLine;

}

//Xuất Kết Quả ra TextBox Kết Quả

txtChuoiKetQua.Text = ketQua;

}

Xây dựng Button Đềm Số Ký Tự Hoa, Đếm Số Ký Tự Thường

Gợi Ý: Ta duyệt từng phần tử từ đầu chuỗi đến cuối chuỗi

Nếu đếm Ký Tự Hoa ta ràng buộc điều kiện

Page 95: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 95/102

if (chuoi[i] >= 'A' && chuoi[i] <= 'Z')

{

//Nếu Ký Tự Trong Khoản A-Z Hoa Trong Bảng ASCII

//Đếm Số Ký Tự Hoa Thêm 1

dem++;

}

Nếu đếm Ký Tự Thường ta ràng buộc điều kiện

if (chuoi[i] >= 'A' && chuoi[i] <= 'Z')

{

//Nếu Ký Tự Trong Khoản a-z Thường Trong Bảng ASCII

//Đếm Số Ký Tự Hoa Thêm 1

dem++;

}

Nếu từng phần tử được duyệt dung với điều kiện thì ta tăng biến đếm

thêm 1

Xữ lý cho Button Số Ký Tự Hoa

Ta Sử Dụng Hàm

int demkytuhoa(string chuoi)

{

//Khai Báo Biến Đếm Số Ký Tự Hoa

int dem = 0;

for (int i = 0; i < chuoi.Length; i++)

{

if (chuoi[i] >= 'A' && chuoi[i] <= 'Z')

{

//Nếu Ký Tự Trong Chuỗi Nằm Trong Khoản A-Z Hoa Trong Bảng ASCII

//Đếm Số Ký Tự Hoa Thêm 1

dem++;

}

}

//Trã Về Số Ký Tự Hoa Có Trong Chuỗi

return dem;

}

Tương tự xữ lý cho Button Số Ký Tự Thưởng

Ta Sử Dụng Hàm

int demkytuthuong(string chuoi)

{

//Khai Báo Biến Đếm Số Ký Tự Hoa

int dem = 0;

for (int i = 0; i < chuoi.Length; i++)

{

if (chuoi[i]>='a' && chuoi[i]<='z')

{

//Nếu Ký Tự Trong Chuỗi Nằm Trong Khoản a-z Thường Trong Bảng ASCII

//Đếm Số Ký Tự Hoa Thêm 1

dem++;

}

}

//Trã Về Số Ký Tự Thường Có Trong Chuỗi

return dem;

Page 96: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 96/102

}

Xây dựng Button Đềm Số Nguyên Âm Phụ Âm

Gợi Ý: Ta duyệt từng phần tử từ đầu chuỗi đến cuối chuỗi

Nếu đếm Ký Tự là nguyên âm “a e i o u”

if (chuoi[i] == 'a' || chuoi[i] == 'e' || chuoi[i] == 'i' || chuoi[i] == 'o' ||

chuoi[i] == 'u')

{

demnguyenam++;

}

Các trường hợp còn lại là phụ âm.

Nếu từng phần tử được duyệt dung với điều kiện thì ta tăng biến đếm

thêm 1

Tương tự xữ lý cho Button Đềm Số Nguyên Âm Phụ Âm

Ta viết Hàm Đếm Số Nguyên Âm Phụ Âm

string innguyenamphuam(string chuoi)

{

//Ta Đổi Tất Cả Các Phần Tử Của Chuỗi Thành In Thường

DoiInThuongChuoi(ref chuoi);

//Khai Báo Biến Đếm Nguyên Âm và Đếm Phụ Âm

int demnguyenam = 0, demphuam = 0;

//Khai Báo Biến Để Chứa Kết Quả

string ketqua = null;

//Duyệt Từng Phần Tử Từ Đầu Đến Cuối Chuỗi

for (int i = 0; i < chuoi.Length; i++)

{

//Nếu Phần Tử Đang Duyệt Là Ký Tự Chữ

if (chuoi[i] >= 'a' && chuoi[i] <= 'z')

{

//Nếu Phần Tử Đang Duyệt Là 1 Trong 5 Nguyên âm "a e i o u"

if (chuoi[i] == 'a' || chuoi[i] == 'e' || chuoi[i] == 'i' || chuoi[i] == 'o' || chuoi[i] == 'u')

{

//Số Nguyên Âm + 1

demnguyenam++;

}

//Nếu Phần Tử Đang Duyệt Là Phụ Âm

else

{

//Số Phụ Âm + 1

demphuam++;

}

}

}

//Xuất Kết Quả

ketqua = "Có " + demnguyenam + " Nguyên Âm Trong Chuỗi" + Environment.NewLine + "Có " +

demphuam + " Phụ Âm Trong Chuỗi";

return ketqua;

}

Page 97: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 97/102

Bài 2:

Viết chương trình có giao diện như sau:

Yêu Cầu:

1. Khi Chương Trình bắt đầu:

Các Controls Button Nhập Dữ Liệu và Button kết thúc chương trình được

thao tác Enable = true.

Các Controls còn lại bị mất hiệu lực Enable = false.

2. Khi Button Nhập Dữ Liệu được Click:

Button Đếm Số Từ có Trong Chuỗi được thao tác Enable = true.

Button Nhập Dữ Liệu được mất hiệu lực Enable = false.

Ta gọi hàm void KhoaHieuLucButton(? ?).

Xoá nội dung của Textbox Nhập Dữ Liệu và Textbox Kết Quả và đưa Trỏ

Chuột vào Textbox này.

3. Khi Các Buttons Đếm Số Từ Có Trong Chuỗi Được Click:

Xuất Kết Quả “Có ?? Từ Trong Chuỗi”

4. Khi Button Làm Mới được Click:

Xóa nội dung của 2 Textbox Nhập Dữ Liệu và Kết Quả.

Button Nhập Dữ Liệu được Enable và Các Button bị mất hiệu lực Enable =

false (Trừ Button Thoát).

5. Khi Button Thoát được Click:

Hiễn thị MessageBox hỏi người sử dụng có muốn đóng Chương Trình, Nếu

người sử dụng đồng ý thì Chương Trình sẽ được đóng.

Hướng Dẫn

Xây dựng Button Đềm Số Từ Trong Chuỗi:

Gợi Ý:

Nếu ta có 1 chuỗi

“Cộng Hòa Xã Hội Chủ Nghĩa Việt Nam

Độc Lập Tự Do Hạnh Phúc”

Page 98: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 98/102

Ta phải cắt hết những khoản trắng thừa ở vị trí đầu, giữa và cuối, dấu

xuống dòng “\r\n” của chuỗi.

string lamDepChuoi(? ?)

Sau khi cắt ta được 1 chuỗi mới với các mỗi từ cách nhau bởi 1 khoản

trắng.

Ta tiếp tục cắt từng từ của chuỗi cách nhau bởi khoản trắng, và gán từng

từ đó vào mãng chuỗi ta sử dụng phương thức chuoi.Split(' ')

Kết quả số từ có trong chuỗi sẽ bằng chiều dài của mãng chuỗi.

Viết Hàm cắt bỏ Khoản Trắng Thừa cho Chuỗi

string lamDepChuoi(string s)

{

//Cắt Bỏ Phần Thừa Ở Vị Trí Đầu và Cuối Chuỗi

s = s.Trim();

while (s.IndexOf(" ") > 0)

//Sử Dụng Phương Thức Replace

s = s.Replace(" ", " ");

//Xuất Kết Quả Chuỗi Đã Được Làm Gọn

return s;

}

Method cho Button Đếm Số Từ Có Trong Chuỗi

private void btnDemTu_Click(object sender, EventArgs e)

{

//Tạo 1 Biến Để Chứa Chuỗi Gốc

//Ta Sử Dụng Biến này Để Không Làm Ảnh Hưởng Đến Chuỗi Gôc

string s = txtChuoiGoc.Text;

//Sử Dụng Hàm LamDepChuoi Để Cắt Bỏ Những Khoản Trắng

s = lamDepChuoi(s);

//Sử Dụng Phương Thức Replace Để Cắt Bỏ Dấu Xuống Dòng

s = s.Replace("\r\n", " ");

//Cắt Từng Từ Phân Cách Nhau Bởi Khoản Trắng

//Gán Từng Từ Đó Vào Mãng Chuỗi

string[] mangChuoi = s.Split(' ');

//Xuất Kết Quả Bằng Cách Đếm Độ Dài Của Mãng Chuỗi

txtChuoiKetQua.Text = "Có " + mangChuoi.Length + " từ trong chuỗi.";

}

Page 99: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 99/102

Bài 3:

Bài 3:

Viết chương trình có giao diện như sau:

Bước 1: Nhập Liệu

Bước 2: Tìm Kiếm Và Thay Thế

Bước 3: Hoàn Tất Thay Thế

Page 100: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 100/102

Yêu Cầu:

6. Khi Chương Trình bắt đầu:

Các Controls Button Nhập Dữ Liệu và Button kết thúc chương trình được

thao tác Enable = true.

Các Controls còn lại bị mất hiệu lực Enable = false.

7. Khi Button Nhập Dữ Liệu được Click:

Buttom Tìm Kiếm và Thay Thế được thao tác Enable = true.

Button Nhập Dữ Liệu được mất hiệu lực Enable = false.

Ta gọi hàm void KhoaHieuLucButton(? ?).

Xoá nội dung của Textbox Nhập Dữ Liệu và Textbox Kết Quả và đưa Trỏ

Chuột vào Textbox này.

8. Khi Các Buttons Tìm Kiếm và Thay Thế Được Click:

Form Tìm Kiếm Thay Thế Được Bật Lên

Trong Form có 2 TextBox Tìm Kiếm và TextBox Thay Thế

Khi Đóng Form, Gọi Hàm Tìm Kiếm và Thay Thế Chuỗi Trong TextBox Tìm

Kiếm Bằng Chuỗi Trong TextBox Thay Thế

Xuất Kết Quả Ra TextBox Kết Quả

9. Khi Button Làm Mới được Click:

Xóa nội dung của 2 Textbox Nhập Dữ Liệu và Kết Quả.

Button Nhập Dữ Liệu được Enable và Các Button bị mất hiệu lực Enable =

false (Trừ Button Thoát).

10. Khi Button Thoát được Click:

Hiễn thị MessageBox hỏi người sử dụng có muốn đóng Chương Trình, Nếu

người sử dụng đồng ý thì Chương Trình sẽ được đóng.

Hướng Dẫn

Xây dựng Button Tìm Kiếm Và Thay Thế:

Gợi Ý:

Mở Form Tìm Kiếm và Thay Thế

Nhập Chuỗi Cần Tìm Kiếm vào TextBox Tìm Kiếm

Nhập Chuỗi Cần Thay Thế vào TextBox Thay Thế

Lấy 2 Giá Trị Tìm Kiếm và Thay Thế Gán vào 1 Biến

Viết Hàm Tìm Kiếm và Thay Thế Truyền vào 2 Giá Trị Đó

void timKiemThayThe(string chuoiGoc, string chuoiTimKiem, string chuoiThayThe)

{

//Tìm Kiếm Và Thay Thế Chuỗi

bool ketQua = chuoiGoc.Contains(chuoiTimKiem);

if (ketQua)

{

//Nếu Tìm Thấy

//Dùng Hàm Replace Thay Thế Chuỗi

chuoiGoc = chuoiGoc.Replace(chuoiTimKiem, chuoiThayThe);

//Xuất Kết Quả Sau Khi Đã Thay Thế

txtChuoiKetQua.Text = chuoiGoc;

Page 101: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 101/102

}

else

//Nếu Tìm Thấy Thì Xuất Kết Quả Không Tìm thấy

txtChuoiKetQua.Text = "Ko tìm thấy " + chuoiTimKiem + " trong chuỗi gốc.";

}

Method cho Button Tìm Kiếm và Thay Thế

private void btnTimKiem_Click(object sender, EventArgs e)

{

//Mở Form Tìm Kiếm và Thay Thế

frmTimKiemThayThe tktt = new frmTimKiemThayThe();

tktt.ShowDialog();

//Khai Báo Biến Chứa Chuỗi Gốc

string strChuoiGoc = txtChuoiGoc.Text;

//Khai Báo Biến Chứa Chuỗi Tìm Kiếm

string strChuoiTimKiem = tktt.txtTimKiem.Text;

//Khai Báo Biến Chứa Chuỗi Tìm Kiếm

string strChuoiTimKiemThayThe = tktt.txtTimKiem1.Text;

//Khai Báo Biến Chứa Chuỗi Thay Thế

string strChuoiThayThe = tktt.txtThayThe1.Text;

if (tktt.DialogResult == DialogResult.OK)

//Xuất Kết Quả Tìm Kiếm Chuỗi

timKiem(strChuoiGoc, strChuoiTimKiem);

else

//Xuất Kết Quả Thay Thế Chuỗi

timKiemThayThe(strChuoiGoc, strChuoiTimKiemThayThe, strChuoiThayThe);

}

Bài 4:

Viết chương trình có giao diện như sau:

GroupBox

Số

Label

Số

GroupBox

Chữ Label

Chữ

Label

Kết Quả

Page 102: Khối: Cao Đẳ Năm 2012 - · PDF fileNhững sinh viên chưa hòan ... F5 được kết quả mong muốn không đổi như bài ... toán học và nhập dữ liệu từ

Hướng dẫn thực hành - Lập trình Windows 1

Trang 102/102

Yêu Cầu:

1. Khi Chương Trình bắt đầu:

Xoá nội dung của Label Nhập Dữ Liệu.

2. Khi Có Sự Kiện Key-Down Trên Form:

Đổi Màu Nền và Màu Chữ Của Label Trùng Với Phím Được Nhấn

Gán Giá Trị Của Nút Được Nhấn Và Label Kết Quả

3. Khi Có Sự Kiện Key-Up Trên Form:

Đổi Màu Nền và Màu Chữ Của Label Trùng1 Với Phím Được Thả Trở Lại

Bình Thường

Hướng Dẫn

Xây Dựng Các Control:

Label Chữ và Số Chứa Giá Trị Chữ và Giá Trị Số

Lable Kết Quả, Chứ Kết Quả.

Xây dựng Sự Kiện Key-Down của Form:

Gợi Ý:

Duyệt tất cả các Control Label trong Group Số và Chữ

Nếu Label.Text Trùng với e.KeyCode thì ta thực hiện đổi màu Nền và màu

Chữ của Label đó

foreach (Label lbl in groupBox1.Controls)

{

//Duyệt Tất Cả Các Label Trong Group Box Số

if (lbl.GetType().ToString() == "System.Windows.Forms.Label")

if (lbl.Text == Convert.ToString((char)e.KeyCode))

{

//Nếu label.text trùng với e.KeyCode

//Đổi Màu Nền và Chữ của Label

lbl.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;

lbl.BackColor = Color.Yellow;

lbl.ForeColor = Color.Red;

}

}

Sau đó ta sử dụng phương thức Append để thêm giá trị của e.KeyCode và

Chuỗi Kết Quả, Gán chuỗi Kết Quả vào Label Kết Quả

//Nếu Nhấn Phím Thì Ép Kiểu char cho e.KeyCode và Chèn Vào Biến Kết Quả

kq.Append((char)e.KeyCode);

//Gán Kết Quả Vào Label Kết Quả

lblKetQua.Text = kq.ToString();

Tương Tự, Key-Down ta Xây Dựng Cho Key-Up của Form. Nhưng chỉ gán tất cả các

thuộc tính của Label trỡ lại Bình Thường.