You are on page 1of 76

Bài tập lập trình Windows

MỤC LỤC
Bài tập 1 .................................................................................................................................................. 2
Bài tập 2 .................................................................................................................................................. 3
Bài tập 3 .................................................................................................................................................. 4
Bài tập 4 .................................................................................................................................................. 5
Bài tập 5 .................................................................................................................................................. 8
Bài tập 6 .................................................................................................................................................. 9
Bài tập 7 ................................................................................................................................................ 10
Bài tập 8 ................................................................................................................................................ 11
Bài tập 9 ................................................................................................................................................ 13
Bài tập 10 .............................................................................................................................................. 14
Bài tập 11 .............................................................................................................................................. 15
Bài tập 12 .............................................................................................................................................. 16
Bài tập 13 .............................................................................................................................................. 17
Bài tập 14 .............................................................................................................................................. 25
Bài tập 15 .............................................................................................................................................. 27
Bài tập 16 .............................................................................................................................................. 30
Bài tập 17 .............................................................................................................................................. 37
Bài tập 18 .............................................................................................................................................. 40
Bài tập 19 .............................................................................................................................................. 45
Bài tập 20 .............................................................................................................................................. 48
Bài tập 21 .............................................................................................................................................. 54
Bài tập 22 .............................................................................................................................................. 58
Bài tập 23 .............................................................................................................................................. 60
Bài tập 24 .............................................................................................................................................. 62
Bài tập 25 .............................................................................................................................................. 68

Nguyễn Sanh Cường Trang 1


Bài tập lập trình Windows
Bài tập 1
Thiết kế giao diện và xử lý chương trình có dạng sau

Chương trình yêu cầu sau


 Nếu Click vào Button Nút nhấn thì xuất ra hộp thông báo

 Nếu Click vào Form thì xuất ra hộp thông báo

 Nếu Click vào nút đóng Form trên Form thì xuất ra hộp thông báo

Giao diện gồm có


Điều khiển Mô tả
Với Button nút nhấn Name: btnNutNhan
Name: Nút nhấn
Với Form giao diện Name: frmBaiTap
Text: Bài tập 1

Chương trình gồm xử lý các sự kiện sau: btnNutNhan_Click; frmBaiTap_Click;


frmBaiTap_FromClosing

private void btnNutNhan_Click(object sender, EventArgs e) {


MessageBox.Show("Bạn đã Click Button Nút nhấn", "Thông báo" );
}

Nguyễn Sanh Cường Trang 2


Bài tập lập trình Windows

private void frmBaiTap_Click(object sender, EventArgs e) {


MessageBox.Show("Bạn Click vào Form","Thông báo");
}

private void frmBaiTap_FormClosing(object sender, FormClosingEventArgs e){


MessageBox.Show("Bạn Click nút đóng Form", "Thông báo");
}

Bài tập 2
Thiết kế giao diện và xử lý chương trình có dạng sau

Chương trình yêu cầu sau: Khi Click vào nút nhấn Đóng Form hay vào nút đóng trên
Form thì xuất ra hộp thông báo

Giao diện gồm có


Điều khiển Mô tả
Với Button nút nhấn đóng Name: btnDongForm
Form Name: Đóng Form
Với Form giao diện Name: frmBaiTap
Text: Bài tập 2

Chương trình gồm xử lý các sự kiện sau: btnDongForm_Click;


frmBaiTap_FromClosing

private void btnDongForm_Click (object sender, EventArgs e) {


this.Close();
}

private void frmBaiTap_FormClosing(object sender, FormClosingEventArgs e) {


DialogResult tb= MessageBox.Show("Bạn đóng Form?",
"Thông báo đóng Form",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question);

Nguyễn Sanh Cường Trang 3


Bài tập lập trình Windows

if (tb == DialogResult.Cancel) e.Cancel = true;


}

Bài tập 3
Thiết kế giao diện và xử lý chương trình có dạng sau

Chương trình yêu cầu sau


 Xử lý sự kiện khi nhấn nút Chào
o Nếu chưa nhập họ và tên thì xuất ra thông báo cho người dùng biết với
nội dung như sau.

o Nếu đã nhập họ và tên thì xuất ra thông báo với nội dung như sau

o Chú ý: ô nhập họ và tên chỉ cho phép nhập chuỗi ký tự

 Xử lý sự kiện khi nhấn nút Đóng Form thì chương trình đóng Form hiện hành.

Giao diện gồm có

Điều khiển Mô tả
Với TextBox nhập họ và tên Name: txtHoTen
Text: để trống
Với Button Chào Name: btnChao
Name: Chào
Với Button đóng form Name: btnDongForm
Text: Đóng Form

Các xử lý sự kiện gồm có: txtHoTen_KeyPress; btnChao_Click;


btnDongForm_Click như sau

Nguyễn Sanh Cường Trang 4


Bài tập lập trình Windows
private void txtHoTen_KeyPress(object sender, KeyPressEventArgs e) {
if (char.IsNumber(e.KeyChar) || char.IsPunctuation(e.KeyChar) ||

char.IsSymbol(e.KeyChar))
e.Handled = true;
}

private void btnDongForm_Click (object sender, EventArgs e) {


this.Close();
}

private void button1_Click(object sender, EventArgs e) {


if (txtHoTen.TextLength == 0) {
MessageBox.Show("Bạn ơi! sao lại quên nhập họ tên.",
"Thông
báo");
txtHoTen.Focus();
return;
}
MessageBox.Show("Chào bạn "+txtHoTen.Text+"
đến với ngôn ngữ C#","Xin chào");
txtHoTen.Clear();
}

Bài tập 4
Thiết kế giao diện và xử lý chương trình có dạng sau

Hình 1
Chương trình yêu cầu sau
 Xử lý sự kiện khi nhấn vào nút nhập thông tin thì sự kiện được xử lý như
hình(Chú ý khi dữ liệu hợp lệ)

Nguyễn Sanh Cường Trang 5


Bài tập lập trình Windows
 Xử lý sự kiện khi nhấn vào nút nhập tiếp thì giao diện như hình 1
 Xử lý sự kiện khi nhấn vào nút thoát thì thoát chương trình

Giao diện gồm có


Điều khiển Mô tả
Với TextBox nhập họ và tên Name: txtHoTen
Text: để trống
Với TextBox nhập năm sinh Name: txtNamSinh
Text: để trống
Với TextBox nhập lớp Name: txtLop
Text: để trống
Với CheckBox Name: chkDuLich, chkCauLong, chkBongDa
Text: Du lịch, Cầu lông, Bóng đá
Với radioButton Name: radNam, radNu
Text: Nam, Nữ
Với Label xuất thông tin Name: lblXuat
Text: để trống
Với Button nhập thông tin Name: btnNhapThong Tin
Name: Nhập thông tin
Với Button nhập tiếp Name: btnNhapTiep
Name: Nhập tiếp
Với Button thoát Name: btnThoát
Text: Thoát
Các xử lý sự kiện gồm có: txtHoTen_KeyPress; txtNamSinh_KeyPress;
txtLop_KeyPress; btnNhapThongTin_Click; btnNhapTiep_Click; btnThoat_Click như
sau
private void txtHoTen_KeyPress(object sender, KeyPressEventArgs e) {
if (char.IsNumber(e.KeyChar) || char.IsPunctuation(e.KeyChar)
||
char.IsSymbol(e.KeyChar))
e.Handled = true;
}

private void txtNamSinh_KeyPress(object sender, KeyPressEventArgs e) {


if (char.IsPunctuation(e.KeyChar) || char.IsSymbol(e.KeyChar) ||
char.IsLetter(e.KeyChar) ||
char.IsWhiteSpace(e.KeyChar))
e.Handled = true;
}

private void txtLop_KeyPress(object sender, KeyPressEventArgs e) {


if (char.IsPunctuation(e.KeyChar) ||
char.IsSymbol(e.KeyChar))
e.Handled = true;
}

Nguyễn Sanh Cường Trang 6


Bài tập lập trình Windows

private void btnNhapThongTin_Click(object sender, EventArgs e) {


if (txtHoTen.TextLength == 0) {
MessageBox.Show("Thiếu họ và tên");
txtHoTen.Focus();
return;
}
if (txtNamSinh.TextLength == 0) {
MessageBox.Show("Thiếu năm sinh");
txtNamSinh.Focus();
return;
}
if (txtLop.TextLength == 0) {
MessageBox.Show("Thiếu nhập lớp");
txtLop.Focus();
return;
}

string choose="";
foreach(Control grp in this.Controls) {
if(grp is GroupBox)
foreach(Control chk in grp.Controls)
if (chk is CheckBox) {
if (((CheckBox)chk).Checked == true)
choose += chk.Text + ", ";
}
}
choose = choose.Substring(0, choose.Length - 2);

lblXuat.Text = "Họ và tên: " + txtHoTen.Text +


"\nNăm sinh: " + txtNamSinh.Text +
"\nPhái: " + (radNam.Checked ? "Nam" : "Nữ") +
"\nLớp: " + txtLop.Text +
"\nSở thích: " + choose;
}

private void btnNhapTiep_Click(object sender, EventArgs e) {


txtHoTen.Clear();
txtLop.Clear();
txtNamSinh.Clear();
radNam.Checked = true;
chkBongDa.Checked = false;
chkCauLong.Checked = false;
chkDuLich.Checked = false;
txtHoTen.Focus();
}

Nguyễn Sanh Cường Trang 7


Bài tập lập trình Windows

private void btnThoat_Click(object sender, EventArgs e) {


Application.Exit();
}

Bài tập 5
Thiết kế và viết chương trình xử lý Form đăng nhập có dạng sau

Có các yêu cầu


 Nếu nhập User Name, Password giống nhau và có số ký tự lớn hơn 4 thì xuất
thông báo.

 Ngược lại nếu nhập User Name, Password không giống nhau hay có số ký tự
nhỏ hơn 4 thì xuất thông báo

 Nếu đăng nhập sai quá 3 lần thông báo và thoát chương trinh.

 Nếu chọn trong ô checkBox hiện Pass thì dòng Password sẽ hiện đúng
Password người dùng nhập vào.

Nguyễn Sanh Cường Trang 8


Bài tập lập trình Windows
Bài tập 6
Thiết kế và viết chương trình xử lý Form khi thực thi có dạng dạng mặc đinh
ban đầu sau

Có các yêu cầu sau


 Khi chọn thức uống trong ComboBox thức uống thì đơn giá tương ứng xuất
vào ô đơn giá.

Thức uống Đơn giá


Café đen 10000
Café đá 15000
Pepsi Cola 7000
Coca Cola 7500
7Up 6000
Sting 8000
Number One 6500

 Nếu nhập số lượng vào ô số lượng đồng thời nhấn nút thanh toán thì kết quả
thành tiền xuất vào ô thành tiền với cách tính
Thành tiền= số lượng x đơn giá

Ngược lại nếu chưa nhập số lượng thì xuất thông báo

Nguyễn Sanh Cường Trang 9


Bài tập lập trình Windows
 Nếu nhấn nút tiếp tục thì trở về mặc định ban đầu.
 Nếu nhấn nút thống kê thì tính tổng các lần vừa bán vào ô tổng thu.

 Nếu nhấn nút thoát thì thoát hẳn chương trình.

Bài tập 7
Thiết kế và xây dựng chương trình Vé số tự chọn 6/55 và sau khi thực thi có
dạng mặc định như hình bên dưới

Có các chức năng sau


 Khi thực thi chương trình có dạng mặc định ban đầu như hình trên.
 Khi nhấn nút thoát thì thoát hẳn chương trình
 Khi nhấn nút “Vòng quay mới” thì các ô số xóa và trở về mặc định ban đầu
 Khi nhấn nút bắt đầu quay số thì nút “Bắt đầu quay số” sẽ có dạng “Quay số
thứ 1” tương ứng cho ô thứ nhất bên trái, hoàn toàn tương tự các ô kế tiếp.(Chú
ý các số kết quả phải khác nhau) như hình dưới.

Nguyễn Sanh Cường Trang 10


Bài tập lập trình Windows
Bài tập 8
Thiết kế và xây dựng chương trình Tính sao hạn và sau khi thực thi có dạng mặc định
như hình bên dưới

Có các chức năng sau


 Khi thực thi chương trình có dạng mặc định ban đầu như hình trên
 Nhập năm sinh vào ô năm sinh, chọn phái. Sau đó nhấn nút “Tính sao hạn” thì
ở Group sao hạn xuất hiện hình và lý giải sao hạn phù hợp tương ứng.
 Khi nhấn nút “Tính mới” thì giao diện chương trinh như ở bên dưới

 Khi nhấn menu “Thoát chương trình” thì thoát hẳn chương trình

Cách tính sao chiếu mệnh theo tuổi

Tính sao chiếu mệnh dựa theo tuổi giúp bạn biết trước sao hạn chiếu mệnh ở từng
độ tuổi cụ thể trong tương lai. Vì thế, việc này rất quan trọng khi giúp bạn xác
định năm tuổi nào gặp sao chiếu xấu để chuẩn bị cách hóa giải hoặc biết năm nào
sao tốt chiếu để tranh thủ thời cơ phát triển.

Được biết sao chiếu mệnh là những tinh đẩu có thật trong vũ trụ, vậy để xem sao
hạn theo tuổi âm lịch chúng ta dựa vào bảng tính Sao Hạn sau đây:

Nguyễn Sanh Cường Trang 11


Bài tập lập trình Windows

Bảng tính sao chiếu mệnh theo tuổi hằng năm:

Bảng thể hiện cách tính sao hạn hàng năm để bạn tiện theo dõi cho mình

Tìm hiểu tính chất sao Cửu Diệu để biết sao nào đang ảnh hưởng đến tuổi hiện tại
của mình như thế nào:

- La Hầu: khẩu thiệt tinh, chủ về ăn nói thị phi, hay liên quan đến công quyền,
nhiều chuyện phiền muộn, bệnh tật về tai mắt, máu huyết.

Nam rất kỵ, nhưng nếu người vợ có thai thì trong năm đó lại gặp may, làm ăn được
phát đạt mà người vợ sanh sản cũng được bình an.

Đặc biệt là nữ giới dễ gặp họa. Người nào mạng Kim và Mộc thì chịu ảnh hưởng
nặng hơn mạng khác vì sao này thuộc Mộc.

Kỵ tháng giêng, tháng 7.

- Kế Đô:

Chủ về ám muội, thị phi, đau khổ, hao tài tốn của, họa vô đơn chí; trong gia đình
có việc mờ ám, đi làm ăn xa lại có tài lộc mang về.

Kỵ tháng 3 và tháng 9 nhất là nữ giới.

- Thái Dương: Thái dương tinh (măt trời) tốt vào tháng sáu, tháng mười, nhưng
không hợp nữ giới. Chủ về an khang thịnh vượng, nam giới gặp nhiều tin vui, tài
lộc còn nữ giới lại thường gặp tai ách.

- Thái Âm: Chủ dương tinh (mặt trăng), tốt cho cả nam lẫn nữ vào tháng chín
nhưng kỵ tháng mười. Nữ có bệnh tật, không nên sinh đẻ̉ e có nguy hiểm. Chủ về
danh lợi, hỉ sự.

Nguyễn Sanh Cường Trang 12


Bài tập lập trình Windows
- Mộc Đức (Mộc tinh): Triều ngươn tinh, chủ về hôn sự, nữ giới đề phòng tật
bệnh phát sinh nhất là máu huyết, nam giới coi chừng bệnh về mắt. Tốt vào tháng
mười và tháng chạp.

- Vân Hớn (Hỏa tinh): Tai tinh, chủ về tật ách, xấu vào tháng hai và tháng tám.
Nam gặp tai hình, phòng thương tật, bị kiện thưa bất lợi; nữ không tốt về thai sản.

- Thổ Tú (Thổ tinh): Ách Tinh, chủ về tiểu nhân, xuất hành đi xa không lợi, có kẻ
ném đá giấu tay sinh ra thưa kiện, gia đạo không yên, chăn nuôi thua lỗ. Xấu tháng
tư, tháng tám.

- Thái Bạch (Kim tinh): Triều dương tinh, sao này xấu cần giữ gìn trong công
việc kinh doanh, có tiểu nhân quấy phá, hao tán tiền của, đề phòng quan sự. Xấu
vào tháng năm và kỵ màu trắng quanh năm.

- Thủy Diệu (Thủy tinh): Phúc lộc tinh, tốt nhưng cũng kỵ tháng tư và tháng tám.
Chủ về tài lộc hỉ. Không nên đi sông biển, giữ gìn lời nói (nhất là nữ giới) nếu
không sẽ có tranh cãi, lời tiếng thị phi đàm tiếu.

Bài tập 9
Thiết kế và xây dựng chương trình và sau khi thực thi có dạng mặc định như hình bên
dưới

Có các chức năng sau


 Khi thực thi chương trình có dạng mặc định ban đầu như hình trên
 Nếu thêm một loại trái cây mới và đồng thời nhấn nút thêm thì
o Nếu loại trái cây thêm vào đã có thì thông báo trùng.
o Ngược lại trái cây mới thêm vào ListBox các loại trái cây, đồng thời ô
số loại trái cây hiện có tăng lên 1 đơn vị.

Nguyễn Sanh Cường Trang 13


Bài tập lập trình Windows
 Khi chọn 1 dòng trong ListBox các loại trái cây và đồng thới nhấn nút xóa
đồng thời ô số loại trái cây giảm xuống 1 đơn vị.
 Nếu nhập loại trái cây cần tìm vào ô tìm kiếm đồng thời nhấn nút
o Nếu loại trái cây cần tìm không có trong danh sách thì xuất thông báo
không tìm thấy vào ô bên dưới.
o Ngược lại tìm thấy xuất thông báo tìm thấy loại trái cây này vào ô bên
dưới.
 Viết các sự kiện cho các nút di chuyển |< , < , > , >| .
 Nếu nhấn nut thoát thì thoát hẳn chương trình.

Bài tập 10
Dùng Class, thiết kế và xây dựng chương trình như hình dưới

Có các chức năng xử lý


- Thêm dữ liệu vào danh sách khi dữ liệu ô nhập là hợp lệ.
o Nếu trùng tên mặt hàng đã có trong danh sách thì cộng dồn vào số lượng
hàng đã có.
o Nếu không trùng tên mặt hàng đã có thì thêm vào.
- Thêm mới xóa trắng các ô nhập liệu
- Xóa hàng dữ liệu trong ListBox danh sách các mặt hàng.
- Sửa đổi dữ liệu 1 dòng nào đó khi chọn vào danh sách các mặt hàng, chú ý không
được phép trùng tên mặt hàng đã có.
- Xuất hàng
o Cho phép xuất mặt hàng khi tìm thấy với điều kiện số lượng xuất nhỏ hơn
hay bằng số lượng đã có.

Nguyễn Sanh Cường Trang 14


Bài tập lập trình Windows
 Nếu số lượng xuất bằng số lượng đã có thì xóa tên mặt hàng đó
trong danh sách
 Nếu số lượng nhỏ hơn số lượng đã có thì tên mặt hàng trong danh
sách không xóa và số lượng còn lại là số lượng ban đầu trừ đi số
lượng xuất
o Không xuất hàng được khi không tìm thấy tên mặt hàng có trong danh
sách.

Bài tập 11
Thiết kế và viết chương trình xử lý khi thực thi chương trinh có dạng mặc định
sau

Có các chức năng xử lý


- Thêm món: Nếu nhập món ăn mới vào ô món ăn đồng thời nhấn nút Thêm món
thì món ăn được thêm vào :ListBox Món ăn dinh dưỡng. Ngược lại thong báo
cho người dùng nhập món ăn.
- Xoá món: có chức năng xoá món ăn trong ListBox món ăn dinh dưỡng. Nếu đã
chọn món ăn trong ListBox món ăn dinh dưỡng và đồng thời nhấn nút Xoá
món thì món ăn này xoá trong danh sách ListBox món ăn dinh dưỡng. Ngược
lại thong báo cho người dung bạn chưa chọn món ăn cần xoá.
- Sửa món: có chức năng sửa tên món ăn. Nếu chọn tên món trong ListBox món
ăn dinh dưỡng thì món ăn này xuất lên ô Món ăn cho phép sửa lại tên món.
Nếu đồng thới nhấn nút Sửa món thì món ăn này được cập nhật lại tên mới
ngay tại vị trí của dòng chọn.
- Chọn món: Nếu các món ăn được chọn trong ListBox món ăn dinh dưỡng và
đồng thời nhấn nút chọn món thì các món ăn này được sao chép sang ListBox
dinh dưỡng của bạn.

Nguyễn Sanh Cường Trang 15


Bài tập lập trình Windows
- Trả món: Nếu món ăn được chọn trong ListBox dinh dưỡng của bạn và đồng
thời nhấn nút Trả món thì các món ăn này được xoá khỏi danh sách dinh dưỡng
của bạn. Ngược lại xuất thông báo bạn chưa chọn món ăn cần trả.
- Test dinh dưỡng: Nhấn nút này thì
o Nếu trong ListBox dinh dưỡng của bạn có số món ít hơn 4 món hoặc có
4 món không thoả điều kiện ở dưới thì xuất thông báo không đủ dinh
dưỡng
o Nếu trong ListBox dinh dưỡng có đủ 4 món thoả điều kiện: 1 Canh, 1
Kho, 1 Xào và 1 món tráng miệng nào đó thì xuất thông báo bạn chọn
vừa đủ dinh dưỡng.
o Nếu trong ListBox dinh dưỡng của bạn có 5 trở lên thì xuất thong báo
bạn chọn quá thừa dinh dưỡng.
- Menu Thoát chương trình: khi chọn mục này thì thoát hẳn chương trình.

Bài tập 12
Thiết kế và viết chương trình xử lý khi thực thi chương trinh có dạng mặc định
sau

Có các yêu cầu sau


 Ràng buộc dữ liệu nhập các ô cho đúng ngữ cảnh
 Hội đồng thi gồm có
o Lý Tự Trọng
o Nguyễn Thượng Hiền
o Nguyễn Văn Trỗi
 Khi nhấn nút tiếp nhận
o Nếu dữ liệu không hợp lệ thì thông báo đúng ô thiếu dữ liệu theo tuần
tự.
o Nếu dữ liệu hợp lệ thì thí sinh đó được lưu vào danh sách thí sinh, đồng
thời ô tổng số thí sinh tăng lên 1 đơn vị.
 Khi nhấn nút thêm mới trở về mặc định ban đầu như hình trên.

Nguyễn Sanh Cường Trang 16


Bài tập lập trình Windows
 Khi chọn 1 dỏng trong danh sách thí sinh thì tất cả thông tin thí sinh tái hiện lại
trên các ô nhập liệu tương ứng

 Khi nhấn nút loại bỏ


o Nếu đã chọn 1 dòng trong danh sách thí sinh thì xuất ra thông báo hỏi có
xóa không. Nếu đồng ý thì xóa thí sinh đã chọn đồng thời ô tổng số thí
sinh giảm đi 1.
o Nếu chưa chọn thì thông báo chưa chọn thí sinh cần xóa.
 Khi nhấn nút sửa đổi
o Nếu đã chọn 1 dòng trong danh sách thí sinh và thay đổi thì thông tin
lưu lại ngay tại vị trí của thí sinh đó.
o Ngược lại chưa chọn thì thông báo phải chọn 1 dòng trong danh sách thí
sinh.
 Khi nhấn nút thoát thì xuất thông báo hỏi trước khi thoát.

Bài tập 13
Thiết kế giao diện chương trình sau khi chạy chương trình như sau

Nguyễn Sanh Cường Trang 17


Bài tập lập trình Windows
Nếu người dùng Click chọn trên ô CheckBox:  Hiển thị theo Group loại hàng
thì giao diện chương trình sẽ có dạng sau

Nếu Click huỷ chọn trong ô checkBox:  Hiển thị theo Group loại hàng thì giao
diện chương trình sẽ có dạng như ban đầu
Gồm có:
 Bốn TextBox cho phép nhập Mã hàng, Tên hàng, Số lượng, Đơn giá.
 Một ComboBox loại hàng.
 Một điều khiển MenuStrip dùng để thoát chương trình.
 Một ListView để chứa dữ liệu.
 Các nút lệnh (Button) để thực hiện các yêu cầu tương ứng cho tiêu đề nút
nhấn.
 Các GroupBox để nhóm các chức năng.
Thiết đặt các Properties:
Đặt tên cho các đối tượng như sau:
Các điều khiển Thuộc tính
Với TextBox Mã Name: txtMaHang
hàng MaxLength: 100
Với TextBox Tên Name: txtTenHang
hàng MaxLength: 100
Với TextBox Số Name: txtSoLuong
lượng MaxLength: 100
Với TextBox Đơn Name: txtDonGia
giá MaxLength: 100
Với GroupBox Dùng để nhóm các chức năng
Với CheckBox hiển Name: chkGroupList
thị/không hiển thị Text: Hiển thị theo Group loại hàng
Group loại hàng

Nguyễn Sanh Cường Trang 18


Bài tập lập trình Windows
Với Button Thanh Name: btnThanhToan
toán Text: Thanh toán
Với Button Tiếp tục Name: btnTiepTuc
Text: Tiếp tục
Với Button Xoá Name: btnXoa
Text: Xoá
Với Button Sửa đổi Name: btnSuaDoi
Text: Sửa đổi
Với MenuStrip Name: mnuThoat
Text: Thoát chương trình
Với ListView Name: lwHang
FullRowSelect: True
View: Details
Columns: Thiết lập các cột trong ListView

Items: Nhập các dòng dữ liệu ban đầu cho ListView

ShowGroups: False
Với ComboBox loại Name: cboLoaiHang
hàng Items: Nhập các dòng chọn trong ComboBox

DropDownStyle: DropDownList
Cài đặt các sự kiện các điều khiển
Khai báo biến của chương trình
ListViewItem dong;

Nguyễn Sanh Cường Trang 19


Bài tập lập trình Windows
string MaHang;
Hàm chuyển các dòng trong ListView thành group theo loại hàng

private void chuyenGroup(){


lwHang.ShowGroups = true;
for (int i = 0; i < cboLoai.Items.Count; i++) {
ListViewGroup group = new ListViewGroup(cboLoai.Items[i].ToString(),
cboLoai.Items[i].ToString());
lwHang.Groups.Add(group);

for (int j = 0; j < lwHang.Items.Count; j++)


if (lwHang.Items[j].SubItems[2].Text == cboLoai.Items[i].ToString())
lwHang.Items[j].Group =
lwHang.Groups[cboLoai.Items[i].ToString()];
}
}

Sự kiện CheckedChanged điều khiển CheckBox

private void chkGroupList_CheckedChanged(object sender, EventArgs e){


if (chkGroupList.Checked == true) chuyenGroup();
else lwHang.ShowGroups = false;
}

Sự kiện nút Tiếp tục

private void btnTiepTuc_Click(object sender, EventArgs e){


txtDonGia.Clear();
txtMaHang.Clear();
txtTenHang.Clear();
txtSoLuong.Clear();
cboLoai.SelectedIndex = 2;
txtMaHang.Focus();
}

Hàm kiểm tra trùng mã hàng

private int KTungMa(ListView lw, string ma)


{
for (int i = 0; i < lw.Items.Count; i++)

Nguyễn Sanh Cường Trang 20


Bài tập lập trình Windows
if (lw.Items[i].SubItems[0].Text == ma) return i;
return -1;
}

Sự kiện nút Thanh toán

private void btnThanhToan_Click(object sender, EventArgs e) {


if (txtMaHang.TextLength == 0){
MessageBox.Show("Vui lòng nhập mã hàng","Thông báo");
txtMaHang.Focus();
return;
}
if (txtTenHang.TextLength == 0) {
MessageBox.Show("Vui lòng nhập tên hàng", "Thông báo");
txtTenHang.Focus();
return;
}
if (txtSoLuong.TextLength == 0) {
MessageBox.Show("Vui lòng nhập số lượng","Thông báo");
txtSoLuong.Focus();
return;
}
if (txtDonGia.TextLength == 0) {
MessageBox.Show("Vui long nhập đơn giá", "Thông báo");
txtDonGia.Focus();
return;
}
int vt=KTungMa(lwHang, txtMaHang.Text);
if (vt == -1) {
dong = new ListViewItem(txtMaHang.Text);
dong.SubItems.Add(txtTenHang.Text);
dong.SubItems.Add(cboLoai.Text);
dong.SubItems.Add(txtSoLuong.Text);
dong.SubItems.Add(txtDonGia.Text);

Nguyễn Sanh Cường Trang 21


Bài tập lập trình Windows
dong.SubItems.Add((int.Parse(txtSoLuong.Text) *
int.Parse(txtDonGia.Text)).ToString());
lwHang.Items.Add(dong);
chuyenGroup();
}
else {
MessageBox.Show("Trùng mã hàng","Thông báo");
txtMaHang.Focus();
txtMaHang.SelectAll();
}
}

Sự kiện SelectedIndexChanges ListView

private void lwHang_SelectedIndexChanged(object sender, EventArgs e){


if (lwHang.SelectedIndices.Count == 1) {
txtMaHang.Text = lwHang.FocusedItem.SubItems[0].Text;
MaHang = txtMaHang.Text;
txtTenHang.Text = lwHang.FocusedItem.SubItems[1].Text;
cboLoai.Text = lwHang.FocusedItem.SubItems[2].Text;
txtSoLuong.Text = lwHang.FocusedItem.SubItems[3].Text;
txtDonGia.Text = lwHang.FocusedItem.SubItems[4].Text;
return;
}
btnTiepTuc_Click(sender, e);
}

Sự kiện Load Form

private void Form1_Load(object sender, EventArgs e) {


btnTiepTuc_Click(sender,e);
}

Sự kiện nút Xoá

private void btnXoa_Click(object sender, EventArgs e) {


if (lwHang.SelectedIndices.Count > 0)

Nguyễn Sanh Cường Trang 22


Bài tập lập trình Windows
{
DialogResult tb = MessageBox.Show("Bạn xoá dữ liệu?",
"Cảnh
báo",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning);

if(tb==DialogResult.OK) {
while(lwHang.SelectedIndices.Count>0)
lwHang.Items.RemoveAt(lwHang.SelectedIndices[0]);
}
lwHang.SelectedIndices.Clear();
return;
}
MessageBox.Show("Chưa chọn dữ liệu xoá?","Thông báo");
}

Sự kiện nút Sửa đổi

private void btnSuaDoi_Click(object sender, EventArgs e) {


if(lwHang.SelectedIndices.Count==1)
{
if (txtMaHang.TextLength == 0) {
MessageBox.Show("Mã hàng bị xoá. Vui lòng nhập lại", "Thông báo");
txtMaHang.Focus();
return;
}
if (txtTenHang.TextLength == 0) {
MessageBox.Show("Tên hàng bị xoá. Vui lòng nhập lại", "Thông báo");
txtTenHang.Focus();
return;
}
if (txtSoLuong.TextLength == 0) {
MessageBox.Show("Số lượng bị xoá. Vui lòng nhập lại", "Thông báo");
txtSoLuong.Focus();

Nguyễn Sanh Cường Trang 23


Bài tập lập trình Windows
return;
}
if (txtDonGia.TextLength == 0) {
MessageBox.Show("Đơn giá bị xoá. Vui lòng nhập lại", "Thông báo");
txtDonGia.Focus();
return;
}
int vt = KTungMa(lwHang, txtMaHang.Text);
if (vt == -1 || txtMaHang.Text == MaHang) {
lwHang.FocusedItem.SubItems[0].Text = txtMaHang.Text;
lwHang.FocusedItem.SubItems[1].Text = txtTenHang.Text;
lwHang.FocusedItem.SubItems[2].Text = cboLoai.Text;
lwHang.FocusedItem.SubItems[3].Text = txtSoLuong.Text;
lwHang.FocusedItem.SubItems[4].Text = txtDonGia.Text;
lwHang.FocusedItem.SubItems[5].Text=(int.Parse(txtSoLuong.Text)*

int.Parse(txtDonGia.Text)).ToString();
btnTiepTuc_Click(sender, e);
}
MessageBox.Show("Trùng mã hàng không cập nhật được","Thông báo");
txtMaHang.Focus();
txtMaHang.SelectAll();
}
}

Ràng buộc ô TextBox Mã hàng

private void txtMaHang_KeyPress(object sender, KeyPressEventArgs e) {


if (char.IsPunctuation(e.KeyChar) || char.IsWhiteSpace(e.KeyChar)
|| char.IsSymbol(e.KeyChar)) e.Handled = true;
}

Ràng buộc ô TextBox Tên hàng

private void txtTenHang_KeyPress(object sender, KeyPressEventArgs e){


if (char.IsNumber(e.KeyChar) || char.IsSymbol(e.KeyChar)

Nguyễn Sanh Cường Trang 24


Bài tập lập trình Windows
|| char.IsPunctuation(e.KeyChar)) e.Handled = true;
}

Ràng buộc ô TextBox Số lượng

private void txtSoLuong_KeyPress(object sender, KeyPressEventArgs e) {


if (char.IsLetter(e.KeyChar) || char.IsWhiteSpace(e.KeyChar)
|| char.IsPunctuation(e.KeyChar) || char.IsSymbol(e.KeyChar))
e.Handled = true;
}

Ràng buộc ô TextBox Đơn giá

private void txtDonGia_KeyPress(object sender, KeyPressEventArgs e) {


if (char.IsLetter(e.KeyChar) || char.IsWhiteSpace(e.KeyChar)
|| char.IsPunctuation(e.KeyChar) || char.IsSymbol(e.KeyChar))
e.Handled = true;
}

Sự kiện Thoát chương trình

private void mnuThoat_Click(object sender, EventArgs e) {


Application.Exit();
}

Bài tập 14
Thiết kế và viết chương trình xử lý khi thực thi chương trình có dạng mặc định
sau

Với các yêu cầu sau

Nguyễn Sanh Cường Trang 25


Bài tập lập trình Windows
 Khi Click chọn số ghế trong sơ đồ chọn chổ ngồi từ trạng thái ghế trống chuyển
sang biểu tượng ghế đã bán đồng thời số vé thay đổi tương ứng theo số ghế đã
chọn(nếu số ghế còn trống)
 Sau khi Click chọn chổ ngồi đồng thời nhấn nút Tính thì xuất ra ô Tiền thanh
toán với cách tính sau:
Tiền thanh toán=Số vé * đơn giá
 Khi nhấn nút tiếp ô số vé, tiền thanh toán trong nhóm bán ra trở về mặc định là
0, đồng thời số vé bán ra trong nhóm thống kê số vé và tổng thu cộng dồn các
mục tương ứng trong nhóm bán ra.
 Menu Reset có chức năng đưa trạng thái toàn bộ chổ ngồi trở về trạng thái ghế
trống.
 Menu Thoát chương trình khi chọn chức năng này thì thoát chương trình.

Code mẫu của chương trình tuỳ theo yêu cầu đặt code đúng cho các sự kiện
private void mnuThoat_Click(object sender, EventArgs e) {
Application.Exit();
}

private void btnThanhToan_Click(object sender, EventArgs e) {


if (lblSoVe.Text == "") {
MessageBox.Show("Bạn chưa chọn số ghế","Kiểm tra số ghế");
return;
}
lblThanhToan.Text = (int.Parse(lblSoVe.Text) *
int.Parse(lblDonGia.Text)).ToString();

lblTongVe.Text = (soghe + int.Parse(lblTongVe.Text)).ToString();


soghe = 0;
}

int soghe=0;
private void lwGhe_SelectedIndexChanged(object sender, EventArgs e) {
if (lwGhe.SelectedIndices.Count > 0) {
int i=0;
while (i < lwGhe.SelectedIndices.Count) {
if (lwGhe.Items[lwGhe.SelectedIndices[i]].ImageIndex == 1) {
lwGhe.Items[lwGhe.SelectedIndices[i]].ImageIndex = 0;
soghe++;
}
i++;
}
lblSoVe.Text = soghe.ToString();
}
}

Nguyễn Sanh Cường Trang 26


Bài tập lập trình Windows

private void MnuReset_Click(object sender, EventArgs e){


int i = 0;
while (i < lwGhe.Items.Count) {
if (lwGhe.Items[i].ImageIndex ==0)
lwGhe.Items[i].ImageIndex = 1;
i++;
}
lblTongVe.Text = "0";
lblTongThu.Text = "0";
lblThanhToan.Text = "0";
lblSoVe.Text = "0";
}

private void Form1_Load(object sender, EventArgs e) {


lwGhe.SelectedIndices.Clear();
}

private void btnTiep_Click(object sender, EventArgs e){


lblTongThu.Text = (int.Parse(lblTongThu.Text) +
int.Parse(lblThanhToan.Text)).ToString();
lblSoVe.Text = "";
lblThanhToan.Text = "0";
lwGhe.FocusedItem = null;
lwGhe.SelectedIndices.Clear();
}

Bài tập 15
Thiết kế và viết chương trình xử lý khi thực thi chương trinh có dạng mặc định
sau

Nguyễn Sanh Cường Trang 27


Bài tập lập trình Windows
Với các yêu cầu sau
 Viết sự kiện nút thêm bàn. Nhập bàn số và đồng thời nhấn nút thêm bàn thì
thêm bàn đó vào trong sơ đồ bàn(Chú ý không cho phép trùng bàn đã có).
 Khi chọn 1 bàn trong sơ đồ bàn thì biểu tượng bàn thay đổi từ bàn trống sang
bàn có khách.
 Khi chọn 1 bàn có khách xuất hộp thông báo hỏi thanh toán hay thay đổi bàn
o Nếu chọn Yes là thanh toán thì group thanh toán mở khoá và cho phép
nhập số lượng vào các ô. Khi nhấn nút Tính thì kết quả đưa vào ô thành
tiền và cộng dồn vào ô tổng thu(khi đã nhập liệu đầy đủ) đồng thời khoá
nhóm thanh toán.
o Nếu chọn No thì biểu tượng bàn thay đổi từ trạng thái có khách sang
trạng thái trống.

Code mẫu của chương trình tuỳ theo yêu cầu đặt code đúng cho các sự kiện
private void lwBan_SelectedIndexChanged(object sender, EventArgs e) {
if (lwBan.SelectedIndices.Count==1) {
if (lwBan.Items[lwBan.SelectedIndices[0]].ImageIndex==0) {

lwBan.Items[lwBan.SelectedIndices[0]].ImageIndex = 1;
return;
}
if (lwBan.Items[lwBan.SelectedIndices[0]].ImageIndex == 1) {
DialogResult tb = MessageBox.Show("Thanh toán/huỷ bàn?","Cảnh
báo",
MessageBoxButtons.YesNo,MessageBoxIcon.Question);

if (tb == DialogResult.Yes) {
grpThanhToan.Enabled = true;
}
lwBan.Items[lwBan.SelectedIndices[0]].ImageIndex = 0;
}
}
}

private void txtBan_KeyPress(object sender, KeyPressEventArgs e) {


if (char.IsLetter(e.KeyChar) || char.IsWhiteSpace(e.KeyChar) ||
char.IsPunctuation(e.KeyChar)
|| char.IsSymbol(e.KeyChar))
e.Handled = true;
}
ListViewItem dong;
private void btnThemBan_Click(object sender, EventArgs e) {
if (txtBan.TextLength == 0) {
MessageBox.Show("Bạn muốn thêm bàn?","Thông báo");
Nguyễn Sanh Cường Trang 28
Bài tập lập trình Windows
txtBan.Focus();
return;
}
dong = new ListViewItem("Số " + txtBan.Text);
dong.ImageIndex = 0;
lwBan.Items.Add(dong);
}

private void Form1_Load(object sender, EventArgs e) {


grpThanhToan.Enabled = false;
}

private void button1_Click(object sender, EventArgs e) {


if (txtCafeSL.TextLength != 0 && txtNuocNgotSL.TextLength != 0 &&
txtDiemTamSL.TextLength != 0) {
lblThanhTien.Text = (int.Parse(txtCafeSL.Text) *
int.Parse(lblCafeTT.Text) +
int.Parse(txtNuocNgotSL.Text) *
int.Parse(lblNuocNgotTT.Text)+
int.Parse(txtDiemTamSL.Text) *
int.Parse(lblDiemTamTT.Text)).ToString();
DialogResult tb = MessageBox.Show("Bạn Tính/Huỷ","Kiểm tra",

MessageBoxButtons.OKCancel,MessageBoxIcon.Question );

if (tb == DialogResult.OK) {
lblTongThu.Text=(int.Parse(lblTongThu.Text)+
int.Parse(lblThanhTien.Text)).ToString();
lblThanhTien.Text = "0";
txtCafeSL.Text = "0";
txtNuocNgotSL.Text = "0";
txtDiemTamSL.Text = "0";
grpThanhToan.Enabled = false;
return;
}
lblThanhTien.Text = "0";
txtCafeSL.Text = "0";
txtNuocNgotSL.Text = "0";
txtDiemTamSL.Text = "0";
grpThanhToan.Enabled = false;
}
}

Nguyễn Sanh Cường Trang 29


Bài tập lập trình Windows
Bài tập 16
Thiết kế và xử lý khi thực thi chương trình mặc định có dạng sau

 Menu hệ thống bao gồm 2 chức năng


o Đăng nhập
o Thoát

Khi chọn chức năng đăng nhập thì hộp thoại đăng nhập xuất hiện như hình
dưới

Nếu đăng nhập đúng thì mở khoá cho phép nhập thông tin, đồng thời chức
năng Đăng nhập trở thành chức năng Đăng xuất.
Khi chọn chức năng Thoát, yêu cầu phải đăng xuất trước khi thoát. Nếu đăng
xuất thì trở về mặc định ban đầu.

Nguyễn Sanh Cường Trang 30


Bài tập lập trình Windows
Khi chọn nút … thì xuất ra hộp thoại chọn tour du lịch như hình bên dưới chp phép
chọn Tour, phương tiện, đơn giá.
- Sau khi chọn đủ 3 thông tin trên đồng thời nhấn nút đồng ý thì các thông tin
trên được đưa vào Form đăng ký ở các mục tương ứng.

- Nếu chọn nút huỷ chọn thì không đưa các thông tin vào Form đăng ký.

Viết sự kiện các nút với yêu cầu sau


 Viết sự kiện nút nhấn Chấp nhận. Khi nhấn nút này dữ liệu được đưa vào
ListView nếu dữ liệu hợp lệ. Ngược lại thông báo rõ dữ liệu nào thiếu và
đưa con trỏ vào ô nhập tương ứng.
 Viết sự kiện cho nút Thêm mới. khi nhấn nút này các dữ liệu trên ô nhập
liệu trở về trạng thái mặc định ban đầu.
 Viết sự kiện nút Loại bỏ. khi nhấn nút này xuất thông báo hỏi có xoá(nếu có
chọn dòng dữ liệu muốn xoá) YesNo. Chọn Yes xoá các dòng đã chọn,
ngược lại không xoá. Nếu chưa chọn dòng cần xoá thì thông báo bạn chưa
chọn dòng dữ liệu cần xoá.
 Khi chọn 1 dòng dữ liệu trên ListView thì thong tin được tái hiện lại trên
các ô nhập tương ứng.
 Viết sự kiện nút Lưu sửa đổi. Nếu đã chọn 1 dòng dữ liệu và có sự chỉnh
sửa cần thiết đồng thời nhấn nút Lưu sửa đổi thì mọi thông tin được sửa đổi
ngay tại vị trí dòng đó.

Code mẫu của chương trình tuỳ theo yêu cầu đặt code đúng cho các sự kiện
private void frmDangKy_Load(object sender, EventArgs e) {
grpdangky.Enabled = false;
lsttour.Enabled = false;
grpthaotac.Enabled = false;
btnsua.Enabled = false;
}

ListViewItem item;

private int Ktmadk(ListView lv, string ma){


for (int i = 0; i < lv.Items.Count; i++)
if (lv.Items[i].SubItems[0].Text == ma) return i;

Nguyễn Sanh Cường Trang 31


Bài tập lập trình Windows
return -1;
}

private void btnChapNhan_Click(object sender, EventArgs e) {


if (lblTour.Text!="" && txtHoTen.TextLength != 0 &&
txtMaDK.TextLength != 0 && txtSoNguoi.TextLength != 0) {
if (radTapThe.Checked && int.Parse(txtSoNguoi.Text)<=1) {
MessageBox.Show("Vì đăng ký tập thể nên số người phải lớn hơn
1",
"Cảnh
báo");
txtSoNguoi.Focus();
txtSoNguoi.SelectAll();
return;
}
if (DateTime.Now.DayOfYear >= dtpngay.Value.DayOfYear &&
DateTime.Now.Year>=dtpngay.Value.Year) {
MessageBox.Show("Ngày đi phải sau ngày hiện tại", "Cảnh báo");
return;
}
if (Ktmadk(lsttour, txtMaDK.Text) != -1) {
MessageBox.Show("Trùng mã đăng ký","Cảnh báo");
txtMaDK.Focus();
txtMaDK.SelectAll();
return;
}
item = new ListViewItem(txtMaDK.Text);
item.SubItems.Add(txtHoTen.Text);
item.SubItems.Add(radCaNhan.Checked ? "Cá nhân" : "Tập thể");
item.SubItems.Add(txtSoNguoi.Text);
item.SubItems.Add(dtpngay.Value.ToString());
item.SubItems.Add(lblTour.Text);
item.SubItems.Add(lblPhuongtien.Text);
item.SubItems.Add(lbldongia.Text);
item.SubItems.Add(lblThanhTien.Text);
lsttour.Items.Add(item);
btnThemMoi_Click(sender, e);
}
else {
if (txtMaDK.TextLength == 0) {
MessageBox.Show("Vui lòng nhập mã đăng ký", "Cảnh báo");
txtMaDK.Focus();
return;
}
if (txtHoTen.TextLength == 0) {

Nguyễn Sanh Cường Trang 32


Bài tập lập trình Windows
MessageBox.Show("Vui lòng nhập họ tên/Công ty", "Cảnh báo");
txtHoTen.Focus();
return;
}
if (txtSoNguoi.TextLength == 0) {
MessageBox.Show("Vui lòng nhập lại số người", "Cảnh báo");
txtSoNguoi.Focus();
return;
}
if (lblTour.Text == ""){
MessageBox.Show("Vui lòng chọn Tour Du lịch", "Cảnh báo");
btnchontour.Focus();
return;
}
}
}

string s = "ĐĂNG KÝ DU LỊCH LỮ HÀNH";


int i = 0;

private void gio_Tick(object sender, EventArgs e){


if (i >= s.Length){
i = 0;
lbltieude.Text = "";
}
lbltieude.Text += s[i];
i++;
}

private void txtHoTen_KeyPress(object sender, KeyPressEventArgs e) {


if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar))
e.Handled = true;
}

private void BtnLoaiBo_Click(object sender, EventArgs e) {


Application.Exit();
}

private void txtdgia_KeyPress(object sender, KeyPressEventArgs e) {


if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
e.Handled = true;
}

private void txtSoNguoi_KeyPress(object sender, KeyPressEventArgs e){


if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
Nguyễn Sanh Cường Trang 33
Bài tập lập trình Windows
e.Handled = true;
}

private void btnThemMoi_Click(object sender, EventArgs e) {


radCaNhan.Checked = true;
txtSoNguoi.Text = "1";
txtMaDK.Clear();
txtHoTen.Clear();
dtpngay.Text = DateTime.Now.ToString();
lbldongia.Text="";
lblTour.Text = "";
lblPhuongtien.Text="";
lblThanhTien.Text="";
txtMaDK.ReadOnly = false;
btnChapNhan.Enabled = true;
btnsua.Enabled = false;
}

private void btnchontour_Click(object sender, EventArgs e) {


Form frm = new frmtour();
frm.ShowDialog();
if (frm.Controls["button1"].Text == "thuchien") {
lblTour.Text = frm.Controls["lstTour"].Text;
lblPhuongtien.Text = frm.Controls["cbophuongtien"].Text;
lbldongia.Text = frm.Controls["txtdongia"].Text;
}
else {
lblTour.Text = "";
lblPhuongtien.Text = "";
lbldongia.Text = "";
}
}

private void lbldongia_TextChanged(object sender, EventArgs e) {


if (lbldongia.Text != "")
lblThanhTien.Text = (int.Parse(txtSoNguoi.Text) *
(float.Parse(lbldongia.Text))).ToString();
else lblThanhTien.Text = "";
}

private void txtSoNguoi_TextChanged(object sender, EventArgs e) {


if (lbldongia.Text != "" && txtSoNguoi.Text != "") {
lblThanhTien.Text = (int.Parse(txtSoNguoi.Text) *
(int.Parse(lbldongia.Text))).ToString();
if (int.Parse(txtSoNguoi.Text) > 1) radTapThe.Checked = true;
}

Nguyễn Sanh Cường Trang 34


Bài tập lập trình Windows
else lblThanhTien.Text = "";
}

private void btnxoa_Click(object sender, EventArgs e) {


if(lsttour.FocusedItem!=null) {
DialogResult y = MessageBox.Show("Bạn chắc chắn loại bỏ dữ liệu
này?",
"Cảnh báo",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);

if (y == DialogResult.Yes) {
int i = lsttour.FocusedItem.Index;
lsttour.Items.RemoveAt(i);
}
}
}

private void btnsua_Click(object sender, EventArgs e) {


if (lblTour.Text != "" && txtHoTen.TextLength != 0 &&
txtSoNguoi.TextLength != 0) {
if (radTapThe.Checked && int.Parse(txtSoNguoi.Text) <= 1) {
MessageBox.Show("Vì đăng ký tập thể nên số người phải lớn hơn 1",
"Cảnh
báo");
txtSoNguoi.Focus();
txtSoNguoi.SelectAll();
return;
}

if (DateTime.Now.Day >= dtpngay.Value.Day) {


MessageBox.Show("Ngày đi phải sau ngày hiện tại", "Cảnh báo");
return;
}
lsttour.FocusedItem.SubItems[1].Text = txtHoTen.Text;
lsttour.FocusedItem.SubItems[2].Text =radCaNhan.Checked? "Cá nhân"
:
"Tập
thể";
lsttour.FocusedItem.SubItems[3].Text = txtSoNguoi.Text;
lsttour.FocusedItem.SubItems[4].Text= dtpngay.Value.ToString();
lsttour.FocusedItem.SubItems[5].Text=lblTour.Text ;
lsttour.FocusedItem.SubItems[6].Text=lblPhuongtien.Text;
lsttour.FocusedItem.SubItems[7].Text=lbldongia.Text;
lsttour.FocusedItem.SubItems[8].Text=lblThanhTien.Text;
btnThemMoi_Click(sender, e);
btnsua.Enabled = false;
btnChapNhan.Enabled = true;

Nguyễn Sanh Cường Trang 35


Bài tập lập trình Windows
}
else {
if (txtHoTen.TextLength == 0) {
MessageBox.Show("Vui lòng nhập họ tên/Công ty", "Cảnh báo");
txtHoTen.Focus();
return;
}
if (txtSoNguoi.TextLength == 0) {
MessageBox.Show("Vui lòng nhập lại số người", "Cảnh báo");
txtSoNguoi.Focus();
return;
}
if (lblTour.Text == "") {
MessageBox.Show("Vui lòng chọn Tour Du lịch", "Cảnh báo");
btnchontour.Focus();
return;
}
}
}

private void lsttour_SelectedIndexChanged(object sender, EventArgs e){


if (lsttour.FocusedItem != null) {
txtMaDK.Text = lsttour.FocusedItem.SubItems[0].Text;
txtHoTen.Text = lsttour.FocusedItem.SubItems[1].Text;
radCaNhan.Checked=lsttour.FocusedItem.SubItems[2].Text==
"Cá nhân"?
true:false;
radTapThe.Checked = !radCaNhan.Checked;
txtSoNguoi.Text = lsttour.FocusedItem.SubItems[3].Text;
dtpngay.Text = lsttour.FocusedItem.SubItems[4].Text;
lblTour.Text = lsttour.FocusedItem.SubItems[5].Text;
lblPhuongtien.Text = lsttour.FocusedItem.SubItems[6].Text;
lbldongia.Text = lsttour.FocusedItem.SubItems[7].Text;
lblThanhTien.Text = lsttour.FocusedItem.SubItems[8].Text;
txtMaDK.ReadOnly = true;
btnChapNhan.Enabled = false;
btnsua.Enabled = true;
}
}

private void mnuthoat_Click(object sender, EventArgs e) {


if (mnudangnhap.Text == "Đăng xuất"){
MessageBox.Show("Vui lòng đăng xuất", "Thông báo");
return;
}

Nguyễn Sanh Cường Trang 36


Bài tập lập trình Windows
Application.Exit();
}

private void mnudangnhap_Click(object sender, EventArgs e) {


if (mnudangnhap.Text == "Đăng nhập") {
Form frm = new frmdangnhap();
frm.ShowDialog();
if (frm.Controls["txtuser"].Text ==
frm.Controls["txtmatma"].Text
&& frm.Controls["txtuser"].Text != "") {
grpdangky.Enabled = true;
lsttour.Enabled = true;
grpthaotac.Enabled = true;
mnudangnhap.Text = "Đăng xuất";
}
}
else {
grpdangky.Enabled = false;
lsttour.Enabled = false;
grpthaotac.Enabled = false;
mnudangnhap.Text = "Đăng nhập";
}
}

Bài tập 17
Thiết kế giao diện và viết chương trình xử lý trò chơi Oẳn tù tì trong dân gian.
Khi thực thi chương trình giao diện mặc định như hình sau

Với các yêu cầu


 Bạn Click chọn một trong 3 biểu tượng Kéo, Búa và Bao tương ứng thì hình
tương ứng cũng xuất hiện trong ô ảnh của bạn ở trong nhóm so sánh đối kháng
như hình, đồng thời nút nhấn Chơi mở khoá.

Nguyễn Sanh Cường Trang 37


Bài tập lập trình Windows

 Nhấn nút Chơi thì xuất ra chuỗi nói của trò chơi, đồng thời nút nhấn Chơi bị
khoá, nút nhấn Lật được mở khoá.

 Khi nhấn nút Lật xuất hình của máy chọn trong ô Máy ra và cho kết quả của trò
chơi xuất ra ở ô kết quả, đồng thời hai nút Chơi, Lật bị khoá

 Khi nhấn nút Chơi tiếp trở về mặc định ban đầu.
 Khi nhấn nút kết thúc thì kết thúc chương trình.

Code mẫu của chương trình tuỳ theo yêu cầu đặt code đúng cho các sự kiện
int ichisoBan;
Random Rn=new Random();
int ichiso;
string tieude = "Oẳn tù tì, ra cái gì, ra cái nào?";
Nguyễn Sanh Cường Trang 38
Bài tập lập trình Windows
int i = 0;
string[] nhan = {"Kéo","Búa","Bao" };

private void picKeo_Click(object sender, EventArgs e) {


picBan.Image = imglst.Images[0];
ichisoBan = 0;
btnChoi.Enabled = true;
lblBan.Text = "Kéo";
}

private void picBua_Click(object sender, EventArgs e) {


picBan.Image = imglst.Images[1];
ichisoBan = 1;
btnChoi.Enabled = true;
lblBan.Text = "Búa";
}

private void picBao_Click(object sender, EventArgs e) {


picBan.Image = imglst.Images[2];
ichisoBan = 2;
btnChoi.Enabled = true;
lblBan.Text = "Bao";
}

private void frmTroChoi_Load(object sender, EventArgs e) {


btnTiep_Click(sender, e);
}

private void btnChoi_Click(object sender, EventArgs e) {


tmChoi.Start();
}

private void tmChoi_Tick(object sender, EventArgs e){


if (i == tieude.Length-1){
tmChoi.Stop();
ichiso = Rn.Next(0, 3);

btnLat.Enabled = true;
btnChoi.Enabled = false;
}
lblTieuDe.Text += tieude[i];
i++;
}

private void btnLat_Click(object sender, EventArgs e) {


picMay.Image = imglst.Images[ichiso];
Nguyễn Sanh Cường Trang 39
Bài tập lập trình Windows
btnLat.Enabled = false;
lblMay.Text = nhan[ichiso];

if (ichisoBan == ichiso) lblKetQua.Text = "Kết quả hoà";


if ((ichisoBan == 0 && ichiso == 1) ||
(ichisoBan == 1 && ichiso == 2) ||
(ichisoBan == 2 && ichiso == 0)) lblKetQua.Text = "Bạn thua rồi";
if ((ichisoBan == 0 && ichiso == 2) ||
(ichisoBan == 1 && ichiso == 0) ||
(ichisoBan == 2 && ichiso == 1)) lblKetQua.Text = "Bạn thắng
rồi";
}

private void btnTiep_Click(object sender, EventArgs e) {


picBan.Image = imglst.Images[3];
picMay.Image = imglst.Images[3];

lblBan.Text = "";
lblMay.Text = "";
lblKetQua.Text = "";

btnLat.Enabled = false;
btnChoi.Enabled = false;
}

private void btnKetThuc_Click(object sender, EventArgs e) {


Application.Exit();
}

Bài tập 18
Viết chương trình trò chơi lắc bầu cua đơn giản. có giao diện thiết kế khi thực
hiện chạy chương trình như sau.

Nguyễn Sanh Cường Trang 40


Bài tập lập trình Windows
Khi đặt ván trong ô nhập liệu Đặt ván, đồng thời nhấn nút quay thì giao diện chương
trình như sau

Gồm có:
 Một TextBox cho phép nhập đặt ván.
 Ba PictureBox dùng để hiển thị ảnh.
 Hai điều khiển Timer dùng để bật/tắt đồng hồ hệ thống.
 Một ImageList chứa ảnh
 Các nút lệnh (Button) để thực hiện các yêu cầu tương ứng cho tiêu đề nút
nhấn.
Giao diện thiết kế

Thiết đặt các Properties:


Đặt tên cho các đối tượng như sau:

Các điều khiển Thuộc tính

Với TextBox đặt ván Name: txtDatVan

Nguyễn Sanh Cường Trang 41


Bài tập lập trình Windows
MaxLength: 100

Với ba PictureBox Name: pic1, pic2, pic3


SizeMode: StretchImage

Với ImageList Name: Imglst


ColorDepth: Depth32Bit
ImageSize: 100,100
Images: chèn các ảnh cần thiết

Với Timer Name: tmDongho1, tmDongho2


Enable: False
Interval: lần lượt 30, 6000 cho Dongho1 và Dongho2

Với GroupBox Dùng đển nhóm các chức năng

Với Label Name: lblTienThuong


Text: để trống

Với Button quay Name: btnQuay


Text: Quay

Với Button chơi tiếp Name: btnTiep


Text: Chơi tiếp

Với Button thoát Name: btnThoat


Text: Thoát

Cài đặt các sự kiện các điều khiển


Khai báo các biến cần sử dụng
Random rnd = new Random();// biến dùng random
//Mảng tên
string[] tendat = { "Bầu", "Cua", "Tôm", "Cá", "Nai", "Gà" };
Nguyễn Sanh Cường Trang 42
Bài tập lập trình Windows
string str1, str2, str3;
//dùng lấy chỉ số ảnh trong ImageList
int cs1, cs2, cs3;
int iDem=0,TienThuong=0;

Code mẫu của chương trình tuỳ theo yêu cầu đặt code đúng cho các sự kiện
Sự kiện Load Form

private void Form1_Load(object sender, EventArgs e){


btnTiep_Click(sender,e);
}

Sự kiện Dongho1 Tick

private void tmDongho1_Tick(object sender, EventArgs e) {


cs1 = rnd.Next(0, 6);
cs2 = rnd.Next(0, 6);
cs3 = rnd.Next(0, 6);
pic1.Image = imglst.Images[cs1];
pic2.Image = imglst.Images[cs2];
pic3.Image = imglst.Images[cs3];
str1 = tendat[cs1];
str2 = tendat[cs2];
str3 = tendat[cs3];
}
Sự kiện Dongho2 Tick
private void tmDongho2_Tick(object sender, EventArgs e) {
tmDongho1.Stop();
tmDongho2.Stop();
iDem = 0;
if (txtDatVan.Text.ToLower().IndexOf(str1.ToLower()) != -1) iDem++;
if (txtDatVan.Text.ToLower().IndexOf(str2.ToLower()) != -1) iDem++;
if (txtDatVan.Text.ToLower().IndexOf(str3.ToLower()) != -1) iDem++;
TienThuong = iDem * 100;
if (iDem > 0) {

Nguyễn Sanh Cường Trang 43


Bài tập lập trình Windows
LbTienThuong.Text = "Bạn nhận được " +
TienThuong.ToString("#,##0
VNĐ");
}
else LbTienThuong.Text = "Chúc may mắn lần sau";
}

Sự kiện nút nhấn Quay

private void btnQuay_Click(object sender, EventArgs e) {


if (txtDatVan.TextLength != 0) {
tmDongho1.Start();
tmDongho2.Start();
return;
}
MessageBox.Show("Vui lòng đặt ván nhé!", "Kiểm tra đặt ván");
}

Sự kiện nút nhấn Chơi tiếp

private void btnTiep_Click(object sender, EventArgs e) {


pic1.Image = imglst.Images[6];
pic2.Image = imglst.Images[6];
pic3.Image = imglst.Images[6];

txtDatVan.Clear();
LbTienThuong.Text = "";
}

Sự kiện nút nhấn Thoát

private void btnThoat_Click(object sender, EventArgs e) {


Application.Exit();
}

Sự kiện KeyPress trên ô nhập đặt ván

private void txtDatVan_KeyPress(object sender, KeyPressEventArgs e) {


if(char.IsNumber(e.KeyChar) || char.IsSymbol(e.KeyChar)

Nguyễn Sanh Cường Trang 44


Bài tập lập trình Windows
|| char.IsPunctuation(e.KeyChar))
e.Handled=true;
}

Bài tập 19
Thiết kế giao diện và viết chương trình, khi thực hiện có dạng mặc định sau

Có các yêu cầu sau


 Viết sự kiện nút Reset trở về trạng thái mặc định ban đầu.
 Khi Click chọn 1 máy trong sơ đồ thì số náy tương ứng và thời gian bắt đầu sẽ
cập nhật trong ListView bên trái như hình bên dưới chuyển từ trạng thái máy
trống sang máy bận.

 Khi chọn 1 dòng trong listView bên phải thì nút trả máy mở khoá. Nếu nhấn
nút trả máy thì thong tin giờ kết thúc sẽ điền giờ kết thúc vào cột giờ kết thúc ở
ListView bên phải đồng thời máy bận ở trạng thái máy bận chuyển sang trạng
thái máy rảnh.

Nguyễn Sanh Cường Trang 45


Bài tập lập trình Windows

Code mẫu của chương trình tuỳ theo yêu cầu đặt code đúng cho các sự kiện
private void lwSoDo_SelectedIndexChanged(object sender, EventArgs e) {
if(lwSoDo.SelectedIndices.Count==1) {
if (lwSoDo.Items[lwSoDo.SelectedIndices[0]].ImageIndex == 0){
lwSoDo.Items[lwSoDo.SelectedIndices[0]].ImageIndex = 1;
// btnThueMay.Enabled = true;
dong = new
ListViewItem(lwSoDo.Items[lwSoDo.SelectedIndices[0]].Text);
dong.SubItems.Add(DateTime.Now.ToShortTimeString());
dong.SubItems.Add("");
dong.SubItems.Add("");
lwTinh.Items.Add(dong);
}
}
}

private void Form1_Load(object sender, EventArgs e) {


btnTraMay.Enabled = false;
}

ListViewItem dong;
private void btnThueMay_Click(object sender, EventArgs e) {
dong = new ListViewItem(lwSoDo.Items[lwSoDo.SelectedIndices[0]].Text);
dong.SubItems.Add(DateTime.Now.ToShortTimeString());
dong.SubItems.Add("");
lwTinh.Items.Add(dong);
}

private int TimMay(ListView lw, string sTim) {


for (int i = 0; i < lw.Items.Count; i++)
if (sTim == lw.Items[i].SubItems[0].Text) return i;
return -1;
}

Nguyễn Sanh Cường Trang 46


Bài tập lập trình Windows

private void btnTraMay_Click(object sender, EventArgs e) {


if (lwTinh.SelectedIndices.Count == 1) {
string stim = lwTinh.Items[lwTinh.SelectedIndices[0]].SubItems[0].Text;

int i = TimMay(lwSoDo, stim);


lwTinh.FocusedItem.SubItems[2].Text =
DateTime.Now.ToShortTimeString();
lwTinh.FocusedItem.SubItems[3].Text
=(Convert.ToDateTime(DateTime.Now.ToShortTimeString()) -
Convert.ToDateTime(lwTinh.FocusedItem.SubItems[1].Text)).ToString();
//lwSoDo.Focus();
lwSoDo.Items[i].Focused = true;
lwSoDo.Items[i].Selected = true;

lwSoDo.Items[i].ImageIndex = 0;

btnTraMay.Enabled = false;
}
}

private void btnKetThuc_Click(object sender, EventArgs e){


for (int i = 0; i < lwSoDo.Items.Count; i++)
lwSoDo.Items[i].ImageIndex = 0;

lwTinh.Items.Clear();
}

private void lwTinh_SelectedIndexChanged(object sender, EventArgs e) {


if (lwTinh.SelectedIndices.Count == 1)
btnTraMay.Enabled = true;
else btnTraMay.Enabled = false;
}

private void mnuThoat_Click(object sender, EventArgs e) {


Application.Exit();
}

Nguyễn Sanh Cường Trang 47


Bài tập lập trình Windows
Bài tập 20
Thiết kế và viết chương trình sau khi thực thi co giao diện mặc định như hình 1
dưới đây.

Hình 1
Yêu cầu chương trình
 Viết sự kiện cho lệnh Thoát chương trình, khi chọn lệnh này trên Menu thì xuất
ra thông báo hỏi có đồng ý thoát chương trình không
o Nếu chọn Yes thoát chương trình
o Nếu chọn No không thoát chương trình
 Viết sự kiện cho nút Tiếp, khi nhấn nút này các ô nhập liệu trong nhóm thông
tin bệnh nhân trở về mặc định như hình 1.
 Viết sự kiện cho nút Lưu, khi nhấn nút này
o Nếu dữ liệu hợp lệ thì các thông tin được lưu vào trong ListView
o Ngược lại thì thông báo cho người dùng biết thiếu dữ liệu nào và đồng
thời di chuyển con trỏ nhập đến ngay vị trí ô nhập liệu đó.
 Viết sự kiện nút Xóa, khi nhấn nút này
o Nếu đã chọn 1 dòng trong ListView thì xóa dòng đó ra khỏi ListView.
o Nếu chưa chọn trong ListView thì thông báo cho người dùng biết bạn
chưa chọn dòng dữ liệu cần xóa.
 Viết sự kiện khi chọn 1 dòng trong ListView thì các dữ liệu tái hiện lại trên các
ô nhập liệu tương ứng như hình 2.

Nguyễn Sanh Cường Trang 48


Bài tập lập trình Windows

Hình 2
Code mẫu của chương trình tuỳ theo yêu cầu đặt code đúng cho các sự kiện
private void txtSoBHXH_KeyPress(object sender, KeyPressEventArgs e) {
if (char.IsWhiteSpace(e.KeyChar) || char.IsPunctuation(e.KeyChar) ||
char.IsSymbol(e.KeyChar))
e.Handled = true;
}

private void txtBenhNhan_KeyPress(object sender, KeyPressEventArgs e)


{
if (char.IsNumber(e.KeyChar) || char.IsPunctuation(e.KeyChar) ||
char.IsSymbol(e.KeyChar))
e.Handled = true;
}

private void txtNamSinh_KeyPress(object sender, KeyPressEventArgs e) {


if (char.IsWhiteSpace(e.KeyChar) || char.IsPunctuation(e.KeyChar) ||
char.IsSymbol(e.KeyChar) || char.IsLetter(e.KeyChar))
e.Handled = true;
}

private void btnTiep_Click(object sender, EventArgs e) {


txtBenhNhan.Clear();
txtDiaChi.Clear();
txtSoBHXH.Clear();
txtTienSu.Clear();
txtNamSinh.Text = DateTime.Now.Year.ToString();
radNam.Checked = true;
huyCheck()
}

Nguyễn Sanh Cường Trang 49


Bài tập lập trình Windows
private void Form1_Load(object sender, EventArgs e) {
btnTiep_Click(sender,e);
}

private void btnXoa_Click(object sender, EventArgs e) {


if (lwDanhSach.SelectedIndices.Count > 0) {
DialogResult tb = MessageBox.Show("Đồng ý xoá dữ liệu này?","Cảnh
báo",
MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (tb == DialogResult.Yes) {
while (lwDanhSach.SelectedIndices.Count > 0)
lwDanhSach.Items.RemoveAt(lwDanhSach.SelectedIndices[0]);
}
lwDanhSach.SelectedIndices.Clear();
btnTiep_Click(sender, e);
return;
}
MessageBox.Show("Bạn chưa chọn dòng dữ liệu xoá","Thông báo");
}

private void lwDanhSach_SelectedIndexChanged(object sender, EventArgs e)


{
if (lwDanhSach.SelectedIndices.Count == 1) {
txtSoBHXH.Text = lwDanhSach.FocusedItem.SubItems[0].Text;
SoBHXH = txtSoBHXH.Text;
txtBenhNhan.Text = lwDanhSach.FocusedItem.SubItems[1].Text;
radNam.Checked = lwDanhSach.FocusedItem.SubItems[2].Text ==
"Nam" ?
true :
false;
radNu.Checked = !radNam.Checked;
txtNamSinh.Text = lwDanhSach.FocusedItem.SubItems[3].Text;
txtDiaChi.Text = lwDanhSach.FocusedItem.SubItems[4].Text;
txtTienSu.Text = lwDanhSach.FocusedItem.SubItems[5].Text;
string chuoi = lwDanhSach.FocusedItem.SubItems[6].Text;
getCheck(chuoi);

return;
}
btnTiep_Click(sender, e);
}

string SoBHXH;
private int timSoBHXH(ListView lw, string ma) {
for (int i = 0; i < lw.Items.Count; i++)
if (lw.Items[i].SubItems[0].Text == ma) return i;

Nguyễn Sanh Cường Trang 50


Bài tập lập trình Windows
return -1;
}

private void btnSua_Click(object sender, EventArgs e) {


if (lwDanhSach.SelectedIndices.Count == 1) {
if (txtSoBHXH.TextLength == 0) {
MessageBox.Show("Nhập lại số BHYT", "Thông báo");
txtSoBHXH.Focus();
return;
}
if (txtBenhNhan.TextLength == 0) {
MessageBox.Show("Nhập lại họ tên bệnh nhân", "Thông báo");
txtBenhNhan.Focus();
return;
}
if (txtNamSinh.TextLength == 0) {
MessageBox.Show("Nhập lại Năm sinh", "Thông báo");
txtNamSinh.Focus();
return;
}
if (txtDiaChi.TextLength == 0) {
MessageBox.Show("Nhập lại địa chỉ bệnh nhân", "Thông báo");
txtDiaChi.Focus();
return;
}
if (txtTienSu.TextLength == 0) {
MessageBox.Show("Nhập lại tiền sử bệnh nhân", "Thông báo");
txtTienSu.Focus();
return;
}
int vt=timSoBHXH(lwDanhSach,txtSoBHXH.Text);
if (txtSoBHXH.Text == SoBHXH || vt == -1){
lwDanhSach.FocusedItem.SubItems[0].Text = txtSoBHXH.Text;
lwDanhSach.FocusedItem.SubItems[1].Text = txtBenhNhan.Text;
lwDanhSach.FocusedItem.SubItems[2].Text = radNam.Checked ?
"Nam" :

"Nữ";
lwDanhSach.FocusedItem.SubItems[3].Text = txtNamSinh.Text;
lwDanhSach.FocusedItem.SubItems[4].Text = txtDiaChi.Text;
lwDanhSach.FocusedItem.SubItems[5].Text = txtTienSu.Text;

btnTiep_Click(sender, e);
}
if (vt != -1 && vt!=timSoBHXH(lwDanhSach,SoBHXH)){
MessageBox.Show("Trùng số BHXH, vui lòng sửa lại.", "Cảnh báo");

Nguyễn Sanh Cường Trang 51


Bài tập lập trình Windows
txtSoBHXH.Focus();
txtSoBHXH.SelectAll();
return;
}
}
}

public void huyCheck() {


foreach (Control grp in this.Controls) {
if (grp is GroupBox) {
foreach (Control chk in grp.Controls)
if (chk is CheckBox) ((CheckBox)chk).Checked = false;
}
}
}

public void getCheck(string s) {


foreach (Control grp in this.Controls) {
if (grp is GroupBox) {
foreach (Control chk in grp.Controls)
if (chk is CheckBox) ((CheckBox)chk).Checked = false;
foreach (Control chk in grp.Controls)
if (chk is CheckBox)
if (s.IndexOf(chk.Text) != -1) ((CheckBox)chk).Checked = true;
}
}
}

//lay chuoi trong chi dinh


public string getChuoi() {
string choose = "";
foreach(Control grp in this.Controls){
if (grp is GroupBox) {
foreach(Control chk in grp.Controls)
if (chk is CheckBox)
CheckBox)chk).Checked == true) choose += chk.Text +
", ";
}
}
choose = choose.Substring(0, choose.Length - 2);
return choose;
}

ListViewItem dong;

Nguyễn Sanh Cường Trang 52


Bài tập lập trình Windows
private void btnLuu_Click(object sender, EventArgs e) {
if (lwDanhSach.SelectedIndices.Count == 0) {
if (txtSoBHXH.TextLength == 0) {
MessageBox.Show("Nhập số BHYT", "Thông báo");
txtSoBHXH.Focus();
return;
}
if (txtBenhNhan.TextLength == 0) {
MessageBox.Show("Nhập họ tên bệnh nhân", "Thông báo");
txtBenhNhan.Focus();
return;
}
if (txtNamSinh.TextLength == 0) {
MessageBox.Show("Nhập Năm sinh", "Thông báo");
txtNamSinh.Focus();
return;
}
if (txtDiaChi.TextLength == 0) {
MessageBox.Show("Nhập địa chỉ bệnh nhân", "Thông báo");
txtDiaChi.Focus();
return;
}
if (txtTienSu.TextLength == 0) {
MessageBox.Show("Nhập tiền sử bệnh nhân", "Thông báo");
txtTienSu.Focus();
return;
}
int vt = timSoBHXH(lwDanhSach, txtSoBHXH.Text);

if (vt != -1) {
MessageBox.Show("Trùng số BHXH, vui lòng xem lại số BHYT.",
"Cảnh báo");
txtSoBHXH.Focus();
txtSoBHXH.SelectAll();
return;
}
dong = new ListViewItem(txtSoBHXH.Text);
dong.SubItems.Add(txtBenhNhan.Text);
dong.SubItems.Add(radNam.Checked ? "Nam" : "Nữ");
dong.SubItems.Add(txtNamSinh.Text);
dong.SubItems.Add(txtDiaChi.Text);
dong.SubItems.Add(txtTienSu.Text);
dong.SubItems.Add(getChuoi());

lwDanhSach.Items.Add(dong);
btnTiep_Click(sender, e);

Nguyễn Sanh Cường Trang 53


Bài tập lập trình Windows
return;
}
MessageBox.Show("Bạn đang sửa dữ liệu","Cảnh báo");
}

private void mnuThoat_Click(object sender, EventArgs e) {


Application.Exit();
}

private void Form1_FormClosing(object sender, FormClosingEventArgs


e) {
DialogResult tb = MessageBox.Show("Bạn thoát chương trình?.",
"Cảnh báo",MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning);

if (tb == DialogResult.Cancel) e.Cancel = true;


}

Bài tập 21
Giả sử ta có hai chương trình có giao diện thiết kế như hình 1 và 2 dưới đây

Hình 1

Hình 2

Nguyễn Sanh Cường Trang 54


Bài tập lập trình Windows
Giao diện thiết kế hình 1 là một chương trình nhập chuỗi dữ liệu bằng một
dòng lệnh thông qua lệnh Send gởi dữ liệu cho 2 ô nhập liệu là hàng nhập và số lượng
nhập đến chương trình có giao diện thiết kế ở hình 2.
Ở giao diện thiết kế hình 2 ta cài đặt sự kiện KeyDown cho ô nhập hàng nhập và số
lượng nhập di chuyển bằng phím Tab.
- Khi nhập dòng lệnh ở ô Test String với chuỗi như hình.

- Chờ cho thanh chạy chạy hết, thì chuỗi dữ liệu ở trên sẽ được điền lần lượt
vào ô hàng nhập và số lượng nhập.(Chú ý phải Active cho chương trình
ListBox Control)

Giao diện thiết kế hình 1. Gồm có


 Một TextBox dùng nhập chuỗi dữ liệu
 Một thanh ProgressBar dùng để làm chậm thời gian Send.
 Một Timer
 Ba Button thực hiện lệnh.
Thiết đặt các Properties:
Đặt tên cho các đối tượng như sau:

Nguyễn Sanh Cường Trang 55


Bài tập lập trình Windows

Các điều khiển Thuộc tính

Với TextBox Test String Name: txtTestString


MaxLength: 100

Với Button Test Name: btnTestSend


Sendkeys Text: Test SenKeys

Với Button Test Name: btnTestSendContinues


Sendkeys continues Text: Test Sendkeys continues

Với Button Exit Name: btnExit


Text: Exit
Code mẫu của chương trình tuỳ theo yêu cầu đặt code đúng cho các sự kiện
Code cho chương trình thiết kế ở hình 1
Sự kiện cho nút Test Senkeys continues

private void btnTestSendContinues_Click(object sender, EventArgs e){


progressBar1.Value = 0;
SendKeys.Flush();
txtTest.Clear();
}

Sự kiện cho nút Exit

private void btnExit_Click(object sender, EventArgs e){


Application.Exit();
}

Sự kiện cho nút Test SendKeys

private void btnTestSend_Click(object sender, EventArgs e){


timer1.Start();
}

Sự kiện timer1 Tick

private void timer1_Tick(object sender, EventArgs e){


if (progressBar1.Value == 100{
timer1.Stop();

Nguyễn Sanh Cường Trang 56


Bài tập lập trình Windows
string[] separator = { "|" }; // separator
var msgList = txtTestString.Text.Split(separator,
System.StringSplitOptions.RemoveEmptyEntries);
foreach (var item in msgList) SendKeys.SendWait(item);
return;
}
progressBar1.Value += 1;
}

Ngoài thiết kế và viết code thông thường cho chương trình ở hình 2.
Thiết đặt các Properties:
Đặt tên cho các đối tượng như sau:

Các điều khiển Thuộc tính

Với TextBox Hàng nhập Name: txtHangNhap


MaxLength: 100

Với TextBox Số lượng Name: txtSoLuong


nhập MaxLength: 100

Ta cần phải cài đặt thêm cho các điền khiển sự kiện keyDown cho hai ô nhập liệu hàng
nhập và số lương nhập như sau.

private void txtNhapHang_KeyDown(object sender, KeyEventArgs e){


if (e.KeyCode == Keys.Tab) txtSoLuongNhap.Focus();
}
private void txtSoLuongNhap_KeyDown(object sender, KeyEventArgs e){
if (e.KeyCode == Keys.Tab) btnNhap.Focus();
}

Nguyễn Sanh Cường Trang 57


Bài tập lập trình Windows
Bài tập 22
Viết chương trình quản lý thuê máy, với giao diện thiết kế và thực thi chương
trình với mặc định ban đầu như sau

Hình 1

Yêu cầu các chức năng


 Khi Click vào hình ảnh của từng máy
o Nếu hình ảnh đang ở trạng thái chưa thuê. Khi Click vào hình của máy
thì trạng thái như hình 2 và trạng thái máy chuyển sang trạng thái đang
thuê.

Hình 2

o Nếu hình ảnh đang ở trạng thái đang thuê. Khi Click vào hình của máy
thì trạng thái như hình 3. Nhấn OK thì trạng thái máy tương ứng chuyển
sang trạng thái chưa thuê.

Nguyễn Sanh Cường Trang 58


Bài tập lập trình Windows

Hình 3

 Nhấn nút kết thúc


o Nếu tất cả các máy chưa thuê thì kết thúc chương trình
o Nếu còn có một máy đang thuê thì xuất thông báo và không kết thúc
chương trình.
Các hình ảnh của các trạng thái tương ứng được Add vào Resources trong thuộc tính
Solution của chương trình. Các sự kiện được cài đặt như sau
bool may1=false, may2=false;

private void btnketthuc_Click(object sender, EventArgs e) {


if (may1 == true || may2 == true) {
MessageBox.Show("Còn máy đang thuê không thể kết thúc được",
"Thông báo kết thúc");
return;
}
Application.Exit();
}

Hàm nhận trạng thái thuê máy


private void BatDauThueMay(TextBox txt, PictureBox pic, ref bool may) {
pic.Image = Properties.Resources.CLOCK051;
may = true;
txt.Text = DateTime.Now.ToShortTimeString();
}

Hàm nhận trạng thái kết thúc thuê máy


private void KetThucThueMay(TextBox txt1, TextBox txt2, PictureBox pic,
ref bool may, int somay) {
txt2.Text = DateTime.Now.ToShortTimeString();
DialogResult tinh = MessageBox.Show("Tính tiền",

Nguyễn Sanh Cường Trang 59


Bài tập lập trình Windows
"Thông báo thuê
máy"+somay.ToString());
if (tinh == DialogResult.OK) {
pic.Image = Properties.Resources.MONITR011;
may = false;
txt1.Clear();
txt2.Clear();
}
}

private void pichinhmay1_Click(object sender, EventArgs e) {


if (may1 == false)
BatDauThueMay(txtbdmay1, pichinhmay1, ref may1);
else
KetThucThueMay(txtbdmay1,txtktmay1,pichinhmay1,ref
may1,1);
}

private void pichinhmay2_Click(object sender, EventArgs e) {


if (may1 == false)
BatDauThueMay(txtbdmay2, pichinhmay2, ref may2);
else
KetThucThueMay(txtbdmay2,txtktmay2,pichinhmay2,ref
may2,2);
}

Bài tập 23
Thiết kế giao diện, sau khi thực thi chương trình có giao diện mặc đinh như sau

Yêu cầu các chức năng. Khi chọn Node trên TreeView thì
Nguyễn Sanh Cường Trang 60
Bài tập lập trình Windows
 Khi chọn 1 Node trên cây TreeView thì tên Node tái hiện lại trên ô tên Node.
 Nếu nhập vào ô tên Node đồng thời nhấn nút thêm Node thì tên Node được tạo
là Node con của Node đang được chọn trên TreeView.
 Nếu nhập vào ô tên Node đồng thời nhấn nút chèn Node thì Node được tạo
cùng cấp với Node đang được chọn và chèn đúng ngay vị trị của Node đang
được chọn.
 Nếu nhấn vào nút Xóa Node thì xóa Node đang được chọn trên treeView.
 Nếu Node được chọn dữ liệu tên Node xuất vào ô tên Node và ô tên Node
được cập nhật lại tên mới đồng thời nhấn nút sửa Node thì Node đang được
chọn được sửa lại tên mới.

Thiết đặt các Properties:


Đặt tên cho các đối tượng như sau:

Các điều khiển Thuộc tính

Với TreeView Name: trvKhoa

Với ô TextBox tên Node Name: txtTenNode

Với nút nhấn Thêm Node Name: btnThemNode

Với nút nhấn Xóa Node Name: btnXoaNode

Với nút nhấn Chèn Node Name: btnChenNode

Với nút nhấn Sửa Node Name: btnSuaNode

Các sự kiện cài đặt như sau


private void trvKhoa_AfterSelect(object sender, TreeViewEventArgs e) {
if (trvKhoa.SelectedNode != null)
txtTenNode.Text = trvKhoa.SelectedNode.Text;
}

private void btnThemNode_Click(object sender, EventArgs e) {


if (trvKhoa.SelectedNode != null) {
trvKhoa.SelectedNode.Nodes.Add(txtTenNode.Text);
trvKhoa.ExpandAll();
}
else trvKhoa.Nodes[0].Nodes.Add(txtTenNode.Text);

private void btnXoaNode_Click(object sender, EventArgs e) {


if (trvKhoa.SelectedNode != null) {

Nguyễn Sanh Cường Trang 61


Bài tập lập trình Windows
trvKhoa.Nodes.Remove(trvKhoa.SelectedNode);
trvKhoa.SelectedNode = null;
return;
}
MessageBox.Show("Bạn chưa chọn Node cần xóa", "Thông báo
xóa");
}

private void btnSuaNode_Click(object sender, EventArgs e) {


if (trvKhoa.SelectedNode != null) {
trvKhoa.SelectedNode.Text = txtTenNode.Text;
return;
}
MessageBox.Show("Bạn chưa chọn Node để sửa", "Thông báo Sửa");
}

private void btnChenNode_Click(object sender, EventArgs e) {


if (trvKhoa.SelectedNode != null && trvKhoa.SelectedNode.Parent !=
null){

trvKhoa.SelectedNode.Parent.Nodes.Insert(trvKhoa.SelectedNode.Index,
txtTenNode.Text);
trvKhoa.ExpandAll();
return;
}
trvKhoa.Nodes.Insert(trvKhoa.SelectedNode.Index, txtTenNode.Text);
}

Bài tập 24
Thiết kế giao diện, sau khi thực thi chương trình có giao diện mặc đinh như sau

Yêu cầu các chức năng

Nguyễn Sanh Cường Trang 62


Bài tập lập trình Windows
 Khi chọn các mục xe số, se tay ga, số sàn, số tự động thì xuất ra các chi tiết loại
xe vào ListView chi tiết loại xe tương ứng như hình bên dưới.

 Khi chọn một loại xe ở trong ListView và đồng thời nhập dữ liệu thông tin chủ
sở hữu.
o Nếu số lượng bằng 0 thì ô thành tiền 0
o Nếu số lượng khác 0 thì ô thành tiền thay đổi theo với công thức

Thành tiền = Số lượng x Giá tiền tương ứng khi chọn loại xe

 Sau khi điền đầy đủ thông tin đồng thời nhấn nút xuất bán thì xuất ra
MessageBox thông báo như sau

Nguyễn Sanh Cường Trang 63


Bài tập lập trình Windows

Thiết đặt các Properties:


Đặt tên cho các đối tượng như sau:

Các điều khiển Thuộc tính

Với TreeView Name: trvXe

Với ListView Name: lwThongSo

Với TextBox chủ sở hữu Name: txtChuSoHuu

Với NumricUpDown số lượng Name: numSoLuong

Với DomainUpDown phương thức Name: dmPhuongThuc

Với TextBox thành tiền Name: txtThanhTien

Với Button xuất bán Name: btnXuatBan


Các hàm khai báo và sự kiện được cài đặt như sau
Tạo Class ClsXe
class ClsXe {
string shang;
public string Hang {
get { return shang; }
set { shang = value; }
}
int inamsanxuat;
public int Namsanxuat {
get { return inamsanxuat; }
set { inamsanxuat = value; }
}
int idongco;
public int Dongco {
get { return idongco; }
set { idongco = value; }
}
int igia;
public int Gia {

Nguyễn Sanh Cường Trang 64


Bài tập lập trình Windows
get { return igia; }
set { igia = value; }
}
public ClsXe(string hang, int namsanxuat, int dongco, int gia) {
this.shang = hang;
this.inamsanxuat = namsanxuat;
this.idongco = dongco;
this.igia = gia;
}
}

public void khoitao() {


trvXe.ExpandAll(); // bung hết cây ra
dmPhuongThuc.SelectedIndex = 0;
//Tạo mảng 2 chiều cho xe máy và xe ô tô
ClsXe[,] xemay = new Xe[,] {
{ new ClsXe("Honda", 2013, 125, 20000),
new ClsXe("Honda", 2003, 110, 20000),
new ClsXe("Yamaha", 2013, 110,
20000)},
{ new ClsXe("Honda", 2013, 150, 80000),
new ClsXe("Yamaha", 2013, 110, 32000),
new ClsXe("Suzuki", 2013, 125, 27000)
}};
ClsXe[,] xeoto = new ClsXe[,] {
{ new ClsXe("Toyota", 2003, 200,
650000),
new ClsXe("Kia", 2007, 250, 350000),
new ClsXe("Suzuki", 2007, 250, 300000)
},
{ new ClsXe("Toyota", 2019, 300,
1080000),
new ClsXe("Mazda", 2016, 250, 750000) ,
new ClsXe("Honda", 2016, 350, 550000)
}};
trvXe.BeginUpdate();
//Cập nhật xe máy
for (int i = 0; i < trvXe.Nodes[0].Nodes.Count; i++)
for (int j = 0; j < trvXe.Nodes[0].Nodes[i].Nodes.Count; j++)
trvXe.Nodes[0].Nodes[i].Nodes[j].Tag = xemay[i, j];
//Cập nhật xe ô tô
for (int i = 0; i < trvXe.Nodes[0].Nodes.Count; i++)
for (int j = 0; j < trvXe.Nodes[0].Nodes[i].Nodes.Count; j++)
trvXe.Nodes[1].Nodes[i].Nodes[j].Tag = xeoto[i, j];
trvXe.EndUpdate();
}

Nguyễn Sanh Cường Trang 65


Bài tập lập trình Windows

ClsXe itemp;
private void trvXe_AfterSelect(object sender, TreeViewEventArgs e) {
numSL.Value = 0;
txtThanhTien.Text = "0";
lblHieu.Text = "";
if (twXe.SelectedNode != null && twXe.SelectedNode.Parent != null) {
lwThongSo.Items.Clear();
//Nếu Node dang chọn có Node con
if (twXe.SelectedNode.Nodes.Count > 1) {
for (int i = 0; i < twXe.SelectedNode.Nodes.Count; i++) {
itemp = (Xe)twXe.SelectedNode.Nodes[i].Tag;
item = new ListViewItem(twXe.SelectedNode.Nodes[i].Text);
item.SubItems.Add(itemp.Hang);
item.SubItems.Add(itemp.Namsanxuat.ToString());
item.SubItems.Add(itemp.Dongco.ToString());
item.SubItems.Add(itemp.Gia.ToString());
lwThongSo.Items.Add(item);
}
return;
}
//Nếu Node đang chọn không có Node con
itemp = (Xe)twXe.SelectedNode.Tag;
item = new ListViewItem(twXe.SelectedNode.Text);
item.SubItems.Add(itemp.Hang);
item.SubItems.Add(itemp.Namsanxuat.ToString());
item.SubItems.Add(itemp.Dongco.ToString());
item.SubItems.Add(itemp.Gia.ToString());
lwThongSo.Items.Add(item);
return;
}
//Nếu là Node gốc
lwThongSo.Items.Clear();
}

private void numSoLuong_ValueChanged(object sender, EventArgs e) {


if (lwThongSo.FocusedItem != null) {
if (numSL.Value == 0) txtThanhTien.Text = "0";
else txtThanhTien.Text = (numSL.Value *
int.Parse(lwThongSo.FocusedItem.SubItems[4].Text)).ToString();
return;
}
numSL.Value = 0;
txtThanhTien.Text = "0";
}

Nguyễn Sanh Cường Trang 66


Bài tập lập trình Windows
private void btnXuatBan_Click(object sender, EventArgs e) {
if (lwThongSo.SelectedIndices.Count == 1 ) {
if (txtChuSoHuu.TextLength == 0) {
MessageBox.Show("Vui lòng nhập chủ sở hữu", "Thông báo xuất
bán");
txtChuSoHuu.Focus();
return;
}
if (numSL.Value == 0) {
MessageBox.Show("Vui lòng chọn số lượng", "Thông báo xuất bán");
numSL.Focus();
return;
}
string thongtin = "Thông tin bán xe\n" + "Chủ sở hữu: "
+txtChuSoHuu.Text
+"\nHiệu xe: " +
lwThongSo.FocusedItem.SubItems[0].Text
+"\nSố lượng: " + numSL.Value.ToString()
+"\nPhương thức: " + dmPhuongThuc.Text
+"\nThành tiền: " + txtThanhTien.Text;
MessageBox.Show(thongtin, "Thanh toán");
return;
}
MessageBox.Show("Bạn chưa chọn xe cần mua.", "Thông báo xuất bán");
}

private void mnuThoat_Click(object sender, EventArgs e) {


Application.Exit();
}

private void Form1_Load(object sender, EventArgs e) {


khoitao();
}

Nguyễn Sanh Cường Trang 67


Bài tập lập trình Windows
Bài tập 25
Thiết kế giao diện, sau khi thực thi chương trình có giao diện mặc đinh như sau

Có các yêu cầu sau


 Khi chọn 1 dòng trong TreeView thì thông tin sẽ xuất
o Nếu dòng đó là hội đồng thi thì xuất tất cả danh sách vào ListView như
hình dưới đây.

o Ngược lại nếu là 1 thí sinh thì xuất dữ liệu vào các Control tương ứng
trong nhóm nhập thông tin điểm tuyển sinh như hình dưới đây.

Nguyễn Sanh Cường Trang 68


Bài tập lập trình Windows

 Nếu nhập thông tin đầy đủ trong và đồng thời nhấn nút tiếp nhận thì thông tin
được cập nhật vào TreeView của hội đồng thi tương ứng. Ngược lại thông báo
thiếu dữ liệu.
 Nếu nhấn nút thêm mới thì trở về mặc đinh ban đầu.
 Khi chọn 1 dòng trong TreeView và đồng thời nhấn nút loại bỏ.
o Nếu dòng chọn là hội đồng thi thì thông báo không thể loại bỏ như
thông báo dưới đây

o
o Ngược lại nếu dòng chọn là 1 thí sinh thì loại bỏ thí sinh đó như thông
báo dưới đây.

 Khi chọn 1 dòng thí sinh trên treeView và đồng thời nhấn nút sửa đổi thì thông
tin sửa đổi ngay tại vị trí đang chọn như hình bên dưới.

Nguyễn Sanh Cường Trang 69


Bài tập lập trình Windows

Khi nhấn nút sửa đổi thì giống như hình bên dưới

Các cài đặt sự kiện


ListViewItem it;
ClassThiSinh temp;

private void trvDanhSach_AfterSelect(object sender, TreeViewEventArgs e)


{
if (trvDanhSach.SelectedNode != null &&
trvDanhSach.SelectedNode.Parent == null) {
KhoiTaoDau(grpDiem);
KhoiTaoDau(grpThongTin);
radNam.Checked = true;
txtSBD.Focus();

Nguyễn Sanh Cường Trang 70


Bài tập lập trình Windows
lwDanhSach.Items.Clear();
if (trvDanhSach.SelectedNode.Nodes.Count > 0) {
for (int i = 0; i < trvDanhSach.SelectedNode.Nodes.Count; i++) {
temp = (ClassThiSinh)trvDanhSach.SelectedNode.Nodes[i].Tag;
it = new ListViewItem(temp.SBD);
it.SubItems.Add(temp.HoTen);
it.SubItems.Add(temp.NamSinh.ToString());
it.SubItems.Add(temp.Phai == 1 ? "Nữ" : "Nam");
it.SubItems.Add(temp.DiaChi);
it.SubItems.Add(trvDanhSach.SelectedNode.Text);
it.SubItems.Add(temp.DiemToan.ToString());
it.SubItems.Add(temp.DiemHoa.ToString());
it.SubItems.Add(temp.DiemLy.ToString());

lwDanhSach.Items.Add(it);
}
}
return;
}
if (trvDanhSach.SelectedNode != null &&
trvDanhSach.SelectedNode.Parent != null) {
KhoiTaoDau(grpDiem);
KhoiTaoDau(grpThongTin);
radNam.Checked = true;
txtSBD.Focus();
lwDanhSach.Items.Clear();

temp = (ClassThiSinh)trvDanhSach.SelectedNode.Tag;
txtSBD.Text= temp.SBD;
txtHoTen.Text=temp.HoTen;
txtNamSinh.Text= temp.NamSinh.ToString();
radNam.Checked= temp.Phai==0? true:false ;
radNu.Checked = !radNam.Checked;
txtDiaChi.Text= temp.DiaChi;
cboHDThi.SelectedIndex=temp.HDThi;
txtToan.Text= temp.DiemToan.ToString();
txtHoa.Text=temp.DiemHoa.ToString();
txtLy.Text=temp.DiemLy.ToString();
}
}

private void btnSua_Click(object sender, EventArgs e) {


if (trvDanhSach.SelectedNode != null &&
trvDanhSach.SelectedNode.Parent != null) {
if (KTHopLe() == false) {

Nguyễn Sanh Cường Trang 71


Bài tập lập trình Windows
ThongBaoLoi("Chưa đủ thông tin để tiếp nhận, xin kiểm tra lại");
return;
}
else
{
ts = new ClassThiSinh(txtSBD.Text, txtHoTen.Text,
int.Parse(txtNamSinh.Text), radNam.Checked == true ? 1 : 0,
txtDiaChi.Text, cboHDThi.SelectedIndex,
int.Parse(txtToan.Text),
int.Parse(txtLy.Text), int.Parse(txtHoa.Text));

int vt = trvDanhSach.SelectedNode.Index;
trvDanhSach.SelectedNode.Parent.Nodes[vt].Text = ts.HoTen;
trvDanhSach.SelectedNode.Parent.Nodes[vt].Tag = ts;

btnThemMoi_Click(sender, e);
}
return;
}
MessageBox.Show("Vui lòng chọn dòng dữ liệu chỉnh sửa",
"Thông báo chỉnh sửa");
}

private void btnLoaiBo_Click(object sender, EventArgs e) {


if (trvDanhSach.SelectedNode != null) {
if (trvDanhSach.SelectedNode.Parent != null) {
DialogResult tb = MessageBox.Show("Bạn có chắc chắn xóa?",
"Thông báo loại bỏ", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (tb == DialogResult.Yes)

trvDanhSach.SelectedNode.Nodes.Remove(trvDanhSach.SelectedNode);
trvDanhSach.SelectedNode = null;
return;
}
MessageBox.Show("Không được loại bỏ thư mục này nhé",
"Cảnh báo loại bỏ");
trvDanhSach.SelectedNode = null;
return;
}
MessageBox.Show("Vui lòng chọn dòng loại bỏ", "Thông báo loại bỏ");
}

private void mnuThoat_Click(object sender, EventArgs e) {


Application.Exit();
}

Nguyễn Sanh Cường Trang 72


Bài tập lập trình Windows

public void KhoiTao()


{

ClassThiSinh[] hdtltt = new ClassThiSinh[]{ new


ClassThiSinh("0001","Nguyễn Ánh Tuyết",1980,1,"Tp.HCM",0,6,7,5),
new ClassThiSinh("0002","Trần Anh
Quốc",1990,0,"Long An",0,8,6,3),
new ClassThiSinh("0003","Lê Tổ
Ấm",1993,0,"Đồng Nai",0,9,3,6)};

for (int i = 0; i < 3; i++) {


trvDanhSach.Nodes[0].Nodes.Add(hdtltt[i].HoTen);
trvDanhSach.Nodes[0].Nodes[i].Tag = hdtltt[i];
}

ClassThiSinh[] hdtngt = new ClassThiSinh[]{ new


ClassThiSinh("0100","Văn Thị Phép",1983,1,"Vũng Tàu",3,6,7,5),
new ClassThiSinh("0101","Trần Quốc
Anh",1991,0,"Bình Phước",3,8,6,3),
new ClassThiSinh("0103","Lê Quốc
Tổ",1998,0,"Bình Thuận",3,9,3,6)};

for (int i = 0; i < 3; i++) {


trvDanhSach.Nodes[3].Nodes.Add(hdtngt[i].HoTen);
trvDanhSach.Nodes[3].Nodes[i].Tag = hdtngt[i];
}

trvDanhSach.ExpandAll();
}

Nguyễn Sanh Cường Trang 73


Bài tập lập trình Windows
public void KhoiTaoDau(GroupBox grp){
foreach (Control b in grp.Controls) {
if (b is TextBox) ((TextBox)b).Clear();
if (b is ComboBox) ((ComboBox)b).SelectedIndex = 0;
}
}

private void frmBangDiem_Load(object sender, EventArgs e) {


KhoiTao();
btnThemMoi_Click(sender, e);
trvDanhSach.SelectedNode = null;
}

private void btnThemMoi_Click(object sender, EventArgs e) {


KhoiTaoDau(grpDiem);
KhoiTaoDau(grpThongTin);
radNam.Checked = true;
txtSBD.Focus();
lwDanhSach.Items.Clear();
trvDanhSach.SelectedNode = null;
}

private bool KTHopLe() {


if (txtSBD.TextLength == 0 || txtSBD.Text.Trim() == ""
|| txtHoTen.Text.Trim() == "" || txtHoTen.TextLength == 0
|| txtDiaChi.Text.Trim() == "" || txtDiaChi.TextLength == 0){
return false;
}
return true;
}

private void ThongBaoLoi(string ChuoiTB) {


MessageBox.Show(ChuoiTB);
txtSBD.SelectAll();
txtSBD.Focus();
}

Nguyễn Sanh Cường Trang 74


Bài tập lập trình Windows
private void btnTiepNhan_Click(object sender, EventArgs e){
if (KTHopLe() == false) {
ThongBaoLoi("Chưa đủ thông tin để tiếp nhận, xin kiểm tra lại");
return;
}
else
{
ts = new ClassThiSinh(txtSBD.Text,txtHoTen.Text,
int.Parse(txtNamSinh.Text),radNam.Checked == true ? 1 : 0,

txtDiaChi.Text,cboHDThi.SelectedIndex,int.Parse(txtToan.Text),
int.Parse(txtLy.Text) ,int.Parse(txtHoa.Text));

for (int i = 0; i < trvDanhSach.Nodes.Count;i++ )


if (i == ts.HDThi) {
trvDanhSach.Nodes[i].Nodes.Add(ts.HoTen);
trvDanhSach.Nodes[i].Tag = ts;
}

ThayDoi = true;
}
}

private void txtNamSinh_KeyPress(object sender, KeyPressEventArgs e) {


if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) {
e.Handled = true;
}
}

private void txtToan_KeyPress(object sender, KeyPressEventArgs e) {


if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) {
e.Handled = true;
}
}

private void txtLy_KeyPress(object sender, KeyPressEventArgs e) {


if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) {
e.Handled = true;
}
}

private void txtHoa_KeyPress(object sender, KeyPressEventArgs e) {


if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar)) {
e.Handled = true;
}
}

Nguyễn Sanh Cường Trang 75


Bài tập lập trình Windows

private void txtNamSinh_Validating(object sender, CancelEventArgs e) {


if (txtNamSinh.TextLength < 4) {
MessageBox.Show("Năm sinh phải đủ 4 chữ số", "Kiểm tra dữ liệu");
e.Cancel = true;
}
}

private void txtToan_Validating(object sender, CancelEventArgs e) {


if (txtToan.TextLength == 0 || int.Parse(txtToan.Text) < 0 ||
int.Parse(txtToan.Text) > 10) {
MessageBox.Show("Điểm không hợp lệ", "Kiểm tra dữ liệu");
txtToan.Select(0, 2);
e.Cancel = true;
}
}

private void txtLy_Validating(object sender, CancelEventArgs e) {


if (txtLy.TextLength == 0 || int.Parse(txtLy.Text) < 0 ||
int.Parse(txtLy.Text) > 10) {
MessageBox.Show("Điểm không hợp lệ", "Kiểm tra dữ liệu");
txtLy.Select(0, 2);
e.Cancel = true;
}
}

private void txtHoa_Validating(object sender, CancelEventArgs e) {


if (txtHoa.TextLength == 0 || int.Parse(txtHoa.Text) < 0 ||
int.Parse(txtHoa.Text) > 10) {
MessageBox.Show("Điểm không hợp lệ", "Kiểm tra dữ liệu");
txtHoa.Select(0, 2);
e.Cancel = true;
}
}

Nguyễn Sanh Cường Trang 76

You might also like