• Yêu cầu của bài tập có các thao tác xử lý trên phân số, do vậy cần phải xây dựng lớp phân số để xử lý các tính toán.. • Lớp phân số nên tạo độc lập riêng với bài tập nhằm có thể sử dụn
Trang 1HƯỚNG DẪN THỰC HIỆN BÀI TẬP
XỬ LÝ TRÊN FORM CƠ BẢN
Mục tiêu: Giúp sinh viên hiểu và nắm bắt một số vấn đề:
1 Hiểu được nguyên tắc thiết kế lớp đối tượng cơ bản
2 Sử dụng được lớp có sẵn trong bài tập lập trình có giao diện
3 Một số thao tác xử lý sự kiện cơ bản trên Form
Bài tập: Hãy thiết kế giao diện theo Hình 1 và cài đặt xử lý tương ứng theo yêu cầu
Trang 2• Yêu cầu của bài tập có các thao tác xử lý trên phân số, do vậy cần phải xây dựng lớp phân số để xử lý các tính toán
• Lớp phân số nên tạo độc lập riêng với bài tập nhằm có thể sử dụng cho các bài tập khác (nên đặt chung trong cùng solution với bài tập để dễ dàng quản lý và viết code)
• Lớp phân số là lớp tiện ích bao gồm các thao tác xử lý tính toán nên chỉ cần tạo ứng
dụng dạng Console
2 Các bước thực hiện
(Các minh họa được thực hiện trên công cụ MS Visual Studio 2015, ngôn ngữ C#)
Bước 1 Nếu đã có Solution (ví dụ có sẵn Solution với tên là CSharpForWindows) thì chỉ
cần tạo thêm Project mới để tạo lớp Phân số (PhanSo) vào trong Solution đã có (Hình 3) Nếu chưa có sẵn Solution thì chuyển sang Bước 2
1 Click phải vào Solution CSharpForWindows trong cửa sổ Solution Explorer
(menu View\Solution Explorer)
2 Chọn Add\New Project… (Hình 3)
Hình 3 Thêm mới Project vào trong Solution có sẵn
3 Đặt tên Project là ProjectPhanSo (Hình 4 - lưu ý không thay đổi những thông tin
mặc định khác)
Trang 3Hình 4 Đặt tên cho Project mới
Bước 2 Tạo mới Solution đối với trường hợp chưa có
1 Chọn menu File\New\Project (Hình 5)
Hình 5 Tạo Project mới
2 Chọn Templates C#\Windows\Console Application, tên Project là ProjectPhanSo
và tên Solution là CSharpForWindows (Hình 6)
Trang 4Hình 6 Tạo mới Solution và Project
Bước 3 Tạo mới lớp Phân số (PhanSo)
1 Click phải vào ProjectPhanSo, chọn Add\Class… (Hình 7)
Trang 5Hình 7 Tạo mới lớp PhanSo
2 Đặt tên lớp PhanSo (Hình 8), chọn nút Add
Hình 8 Đặt tên cho lớp
Trang 6Bước 4 Viết code cho lớp PhanSo (Hình 9) – public class để truy xuất ngoài Project
namespace ProjectPhanSo
{
public class PhanSo
{
private int tu;
private int mau;
// Tạo các property
// Tạo các constructors: default, parameter (2 tham số) và copy
// Định nghĩa các phương thức: cộng, trừ, nhân, và chia
// (có rút gọn thành phân số tối giản)
// Định nghĩa các operator: +, -, *, và /
} }
Hình 9 Lớp PhanSo
Trang 7Bước 5 Chạy thử các chức năng của lớp PhanSo trong phương thức Main() trong file
Program.cs
Bước 6 Tạo thêm Project mới (Hình 10) vào trong Solution CSharpForWindows và đặt
tên ProjectFormPhanSo (thực hiện tương tự Bước 1 nhưng chọn Template là
C#\Windows\Windows Forms Application)
Hình 10 Thêm ProjectFormPhanSo vào Solution hiện hành
Bước 7 Chọn Project sẽ thực hiện khi chạy chương trình: Click phải vào ProjectFormPhanSo chọn Set as StartUp Project (Hình 11)
Trang 8Hình 11 Thiết lập ProjectFormPhanSo sẽ được thực thi khi chạy chương trình
Bước 8 Đổi tên Form1 (được tạo ra mặc định từ công cụ) thành tên mới là FormChinh
1 Trong cửa sổ Solution Explorer, click phải vào Form1 chọn Rename (Hình 12)
Trang 9Hình 12 Đổi tên Form1
2 Đặt tên mới là FormChinh (Hình 13) Chọn Yes nếu có xuất hiện hộp thoại (Hình
11) Kiểm tra tên đã được đổi như Hình 14
Hình 13 Xác nhận đổi tên Form1
Trang 10Hình 14 Form1 sau khi được đổi tên thành FormChinh
Bước 9 Thiết kế giao diện cho FormChinh
1 Tên Form: Đã được tự động đặt tên là FormChinh (Bước 8)
2 Bật cửa sổ đặt thuộc tính cho FormChinh (Hình 15): Click phải vào trong FormChinh
ở chế độ Design, chọn Property (Để mở chế độ Design của Form bằng cách double
click vào biểu tượng trong cửa sổ Solution Explorer)
Trang 11Hình 15 Đặt thuộc tính cho FormChinh
3 Trong cửa sổ thuộc tính của Form có thể đặt tên Form (name), tiêu đề Form (Text) Hình 16 minh họa đặt tiêu đề cho Form
Trang 12Hình 16 Thiết lập các thuộc tính cho FormChinh
4 Thiết kế giao diện bằng cách chọn các control tương ứng trong Toolbox (Hình 17)
Toolbox thường nằm bên trái của của sổ design (nếu không có thì chọn menu
View\Toolbox)
Hình 17 Các control dùng trong thiết kế giao diện
Trang 13Hình 18 Giao diện của FormChinh chương trình
Lưu ý:
- Mỗi control cần phải đặt tên (trong Property name) trước khi viết code xử lý
- Hình 18 gồm: 5 buttons, 6 textboxs, 3 labels và 1 groupbox Trong đó labels và groupbox không cần đặt tên, chỉ cần thay đổi thuộc tính Text để hiển thị chữ
tương ứng trong Form (trong ngữ cảnh bài tập này không xử lý đến các control
o Textbox tử phân số 1: txtTu1 (Enable = false, ReadOnly = true)
o Textbox mẫu phân số 1: txtMau1 (Enable = false, ReadOnly = true)
o Textbox tử phân số 2: txtTu2 (Enable = false, ReadOnly = true)
o Textbox mẫu phân số 2: txtMau2 (Enable = false, ReadOnly = true)
o Textbox tử kết quả: txtKQTu (Enable = false, ReadOnly = true)
o Textbox mẫu kết quả: txtKQMau (Enable = false, ReadOnly = true)
Bước 10 Thiết kế giao diện cho Form nhập phân số (FormNhapPhanSo)
1 Tạo thêm một Form mới trong ProjectFormPhanSo: Click phải vào ProjectFormPhanSo chọn Add\Windows Form… (Hình 19)
Trang 14Hình 19 Thêm một Form mới vào ProjectFormPhanSo
2 Đặt tên cho Form: FormNhapPhanSo (Hình 20)
Trang 153 Thiết kế giao diện FormNhapPhanSo (Hình 21)
Hình 21 Giao diện FormNhapPhanSo
- Tên của các control như sau:
o Nút Chấp nhận: btnChapNhan
o Nút Thoát: btnThoat
o Textbox Tử số: txtTu
o Textbox Mẫu số: txtMau
Bước 11 Tham chiếu đến ProjectPhanSo
Trong chương trình, các Form có sử dụng đối tượng PhanSo để khởi tạo và tính toán Trong đó:
- FormChinh cần lưu phân số thứ 1, phân số thứ 2 và phân số kết quả tính
- FormNhapPhanSo cần lưu phân số được nhập từ bàn phím
Chính vì vậy, trong các Form này phải khai báo các đối tượng PhanSo để lưu trữ thông tin phân số Nghĩa là ta cần phải sử dụng lớp PhanSo trong bài tập này Do đó, việc đầu tiên là phải khai báo tham chiếu đến ProjectPhanSo
1 Trong cửa sổ Solution Explorer, click phải vào ProjectFormPhanSo (project
đang thiết kế Form) chọn Add\Reference… (Hình 22)
Trang 16
Hình 22 Tham chiếu đến ProjectPhanSo
2 Chọn ProjectPhanSo và nhấn OK (Hình 23)
Hình 23 Chọn Project cần tham chiếu
3 Kiểm tra mục References của ProjectFormPhanSo trong Solution Explorer xem có xuất hiện ProjectPhanSo vừa được tham chiếu (Hình 24)
Trang 17Hình 24 Kiểm tra danh sách các References của Project
Bước 12 Viết code cho FormNhapPhanSo
1 Mở FormNhapPhanSo ở chế độ Design, click phải vào trong Form và chọn View
Code (Hình 25)
Hình 25 Mở cửa sổ code của FormNhapPhanSo
2 Khai báo Fields và các lệnh liên quan đến Fields:
- Sử dụng namespace: using ProjectPhanSo;
- Khai báo Fields: PhanSo ps;
- Tạo Property get cho ps
- Viết thêm lệnh khởi tạo trong default constructor: public FormNhapPhanSo()
Trang 18{
private PhanSo ps; //Bổ sung
public PhanSo Ps //Bổ sung
Trang 19Hình 27 Chọn sự kiện TextChanged
- Chọn sự kiện TextChanged, nhấn Enter (hoặc double click chuột) bổ sung lệnh
cho phương thức vừa được sinh ra
private void txtTu_TextChanged( object sender, EventArgs e)
- Chọn sự kiện Click cho nút Chấp nhận
- Viết code: Gắn kết quả trả về khi đóng Form là OK
private void btnChapNhan_Click( object sender, EventArgs e)
{
//Chưa xử lý trường hợp chưa nhập giá trị vào tử và mẫu
DialogResult = DialogResult OK;
Close();
}
6 Xử lý sự kiện cho nhấn nút Thoát
- Chọn sự kiện Click cho nút Thoát
- Viết code: Xác nhận thoát và gắn kết quả trả về khi đóng Form là Cancel
Trang 20private void btnThoat_Click( object sender, EventArgs e)
{
DialogResult kq = MessageBox Show( this , "Bạn có muốn thoát?" ,
"Đóng Form" , MessageBoxButtons.YesNo,
MessageBoxIcon Question);
if (kq == DialogResult Yes)
DialogResult = DialogResult Cancel;
}
Bước 13 Viết code cho FormChinh
1 Chọn View code của FormChinh
2 Khai báo Fields và các lệnh liên quan đến Fields:
- Sử dụng namespace: using ProjectPhanSo;
- Khai báo Fields: PhanSo ps1, ps2, kq;
3 Viết thêm lệnh khởi tạo trong default constructor: public FormChinh()
Trang 214 Xử lý sự kiện Click cho nút Nhập phân số 1
private void btnNhapPhanSo1_Click( object sender, EventArgs e)
{
FormNhapPhanSo frmNhap = new FormNhapPhanSo ();
if (frmNhap.ShowDialog() == DialogResult OK)
5 Xử lý sự kiện Click cho nút Nhập phân số 2: tương tự Nhập phân số 1
6 Xử lý sự kiện Click cho nút Tổng
private void btnTong_Click( object sender, EventArgs e)
7 Xử lý sự kiện Click cho nút Hiệu, Tích: tương tự những ví dụ trên
8 Xử lý sự kiện Click cho nút Thoát
private void btnThoat_Click( object sender, EventArgs e)
{
Close();
}
9 Xác nhận cho sự kiện đóng Form (FormClosing)
private void FormChinh_FormClosing( object sender, FormClosingEventArgs e) {
DialogResult kq = MessageBox Show( this , "Bạn có muốn thoát?" ,
"Đóng Form" , MessageBoxButtons YesNo, MessageBoxIcon Question);