Giáo trình Lập trình Windows forms với C# (Phần 2)
6.1. Điều khiển GroupBox
GroupBox là dạng điều khiển chứa, có thể chứa các điều khiển khác hiển thị trên
form, giúp cho việc thiết kế giao diện của form dễ nhìn và khoa học hơn. GroupBox
không hỗ trợ thanh trượt (ScrollBar). GroupBox có thể có tiêu đề hiển thị, tiêu đề này
được thiết lập trong thuộc tính Text. Nếu không muốn hiển thị tiêu đề, lập trình viên có
thể thiết lập chuỗi rỗng trong thuộc tính Text. Điều khiển GroupBox được đặt trong
nhóm Containers của cửa sổ Toolbox như hình 6.1.
Hình 6.1: Điều khiển GroupBox trong cửa sổ Toolbox
Thông thường GroupBox sử dụng để nhóm điều khiển RadioButton (xem mục
3.5.2 của chương 3).
Một số thuộc tính thường dùng của GroupBox:
Bảng 6.1: Bảng mô tả các thuộc tính của GroupBox
Khi thiết lập giá trị thuộc tính cho GroupBox trong bảng 6.1, thì những điều
khiển như: RadioButton, TextBox, Label, nếu nằm trong GroupBox cũng sẽ có
những giá trị thuộc tính tương tự như của GroupBox.
Ví dụ 6.1: Viết chương trình định dạng chuỗi văn bản, thiết kế giao diện chương trình
như hình 6.2.
Hình 6.2: Giao diện forn định dạng chuỗi ví dụ 6.1
Yêu cầu: Khi người dùng nhập chuỗi văn bản trong TextBox thì Label “Chuỗi định
dạng” sẽ hiển thị chuỗi văn bản vừa nhập. Khi nhấp chuột chọn các Radio trong
GroupBox “Màu” và GroupBox “Kiểu hiển thị” thì chuỗi định dạng sẽ thay đổi định
dạng tương ứng với lựa chọn của người dùng.
Bước 1: Thiết kế giao diện chương trình. Kéo các điều khiển: Label, GroupBox,
RadioButton, TextBox từ cửa sổ Toolbox vào form như hình 6.3

Trang 1

Trang 2

Trang 3

Trang 4

Trang 5

Trang 6

Trang 7

Trang 8

Trang 9

Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Giáo trình Lập trình Windows forms với C# (Phần 2)
er, EventArgs e)
{
lblHienThi.Text = time.ToString();
time += 1;
if (time == 60)
SendKeys.Send("{Enter}");
}
10.4. Lớp PowerStatus
Lớp PowerStatus chứa các thuộc tính cung cấp thông tin về tình trạng nguồn điện
đang sử dụng của máy tính. Điểm đặc biệt là lớp PowerStatus không có phương thức
khởi tạo, do đó lập trình viên có thể tạo đối tượng lớp PowerStatus và sử dụng thông
qua thuộc tính PowerStatus của lớp SystemInformation như sau:
PowerStatus pwts;
pwts = SystemInformation.PowerStatus;
string power = "";
power = pwts.BatteryChargeStatus.ToString();
power +=" " + pwts.BatteryFullLifetime.ToString();
power += " " + pwts.BatteryLifePercent.ToString();
power += " " + pwts.PowerLineStatus.ToString();287
Ví dụ 10.4: Viết chương trình hiển thị tình trạng của pin có giao diện như hình 10.7.
Hình 10.7: Giao diện hiển thị thông tin tình trạng pin
Hướng dẫn:
Bước 1: Thiết kế form có giao diện ban đầu như hình 10.8: Thêm điều khiển
Label từ Toolbox vào form.
Hình 10.8: Giao diện ban đầu form hiển thị thông tin tình trạng pin
Bước 2: Thiết lập giá trị thuộc tính trong cửa sở Properties.
- Form1:
Thuộc tính Text: “PowerStatus”
label1:
Thuộc tính Name: lblHienthi
Bước 3: Viết mã lệnh cho chương trình
- Sự kiện Load của form:
288
private void Form1_Load(object sender, EventArgs e)
{
PowerStatus pwts;
pwts = SystemInformation.PowerStatus;
string power = "BatteryChargeStatus: ";
power += pwts.BatteryChargeStatus.ToString();
power += "\nBatteryFullLifetime: " +
pwts.BatteryFullLifetime.ToString();
power += "\nBatteryLifePercent: " +
pwts.BatteryLifePercent.ToString();
power += "\nBatteryLifeRemaining: " +
pwts.BatteryLifeRemaining.ToString();
power += "\nPowerLineStatus: " +
pwts.PowerLineStatus.ToString();
lblHienThi.Text = power;
}
10.5. Lớp Application
Lớp Application chứa các thuộc tính và phương thức liên quan đến ứng dụng
như: khởi động ứng dụng, đóng ứng dụng hoặc các thông tin về ứng dụng.
Lưu ý lớp Application là dạng lớp cô lập (Sealed) do đó không cho phép các lớp
khác thừa kế.
Các thuộc tính thường dùng của lớp Application:
Bảng 10.8: Bảng mô tả các thuộc tính của lớp Application
Thuộc tính Mô tả
CommonAppDataPath Trả về đường dẫn, đường dẫn này lưu trữ nhưng tập tin để
chia sẻ cho người dùng khác sử dụng.
CompanyName Trả về tên của công ty được khai báo trong thuộc
AssemblyCompany của tập tin AssemblyInfo.cs
CurrentCulture Cho phép thiết lập hoặc lấy các thông tin định dạng thời
gian, ngày tháng, ngôn ngữ, hiện đang sử dụng
CurrentInputLanguage Cho phép thiết lập hoặc lấy thông tin về ngôn ngữ đang
sử dụng
ExecutablePath Trả về đường dẫn của tập tin thực thi (tập tin có đuôi
.exe).
Ví dụ:
C:\Users\PC_PHUC\Desktop\DuAnDauTien\DuAnDauTi
en\bin\Debug\DuAnDauTien.exe
ProductName Trả về tên của ứng dụng được khai báo trong trong thuộc
289
tính AssemblyProduct của tập tin AssemblyInfo.cs
ProductVersion Trả về phiên bản của ứng dụng được khai báo trong trong
thuộc tính AssemblyVersion của tập tin AssemblyInfo.cs
StartupPath Trả về đường dẫn chứa tập tin thực thi, đường dẫn này
không chứa tên của tập tin thực thi.
Ví dụ:
C:\Users\PC_PHUC\Desktop\DuAnDauTien\DuAnDauTi
en\bin\Debug
UserAppDataPath Tương tự thuộc tính CommonAppDataPath,
UserAppDataPath Trả về đường dẫn, đường dẫn này lưu
trữ nhưng tập tin để chia sẻ cho người dùng khác sử dụng.
Các phương thức thường dùng của lớp Application:
Bảng 10.9: Bảng mô tả các phương thức của lớp Application
Phương thức Mô tả
Exit() Giúp đóng ứng dụng.
ExitThread() Giúp đóng tiến trình. Một ứng dụng có thể có nhiều tiến
trình chạy song song, phương thức ExitThread() giúp
đóng tiến trình hiện tại.
DoEvents() Có chức năng như phương thức Flush cửa lớp
SendKeys. có chức năng bỏ qua những thực thi đang
chờ để thực thi một công việc khác. Cụ thể nếu có một
tiến trình đang chạy và muốn ứng dụng ngay lập tức
thực thi một công việc khác mà không phải chờ tiến
trình làm việc xong thì cần gọi phương thức DoEvents().
Restart() Phương thức Restart() thực hiện hai công việc là đóng
ứng dụng lại sau đó thì sẽ khởi động ứng dụng
Run() Phương thức Run() giúp khởi động một đối tượng trong
ứng dụng.
10.6. Lớp Clipboard
Lớp Clipboard cung cấp cho người một vùng nhớ tạm để lưu trữ dữ liệu, đồng
thời cũng hỗ trợ các phương thức cho phép thực hiện công việc sao chép dữ liệu từ nơi
này và dán dữ liệu đến một nơi khác thông qua vùng nhớ tạm mà Clipboard cung cấp.
290
Các phương thức thường dùng của lớp Clipboard:
Bảng 10.10: Bảng mô tả các phương thức của lớp Clipboard
Phương thức Mô tả
Clear() Cho phép xóa dữ liệu đang chứa trong Clipboard
SetText() Lưu vào trong Clipboard
GetText() Trả về chuỗi lưu trữ trong Clipboard
ContraintText() Trả về một trong hai giá trị True hoặc False.
- Nếu là True: Trong Clipboard có nội dung
- Nếu là False: Trong Clipboard không chứa một
chuỗi nào cả.
SetImage() Lưu trữ hình ảnh vào Clipboard
GetImage() Trả về hình đang lưu trữ trong Clipboart
ContraintsImage() Trả về một trong hai giá trị True hoặc False.
- Nếu là True: Trong Clipboard có chứa hình ảnh
- Nếu là False: Trong Clipboard không chứa hình
ảnh.
SetData() Lưu trữ đối tượng vào Clipboard
GetData() Trả về đối tượng đang lưu trữ trong Clipboard
ContainsData() Trả về một trong hai giá trị True hoặc False.
- Nếu là True: Trong Clipboard có chứa đối tượng
- Nếu là False: Trong Clipboard không chứa đối
tượng
Ví dụ 10.5: Viết chương trình thực hiện công việc sao chép văn bản từ hai TextBox.
Chương trình gồm các điều khiển: TextBox, Label, Button, OpenFileDialog. Giao diện
chương trình như hình 10.9.
Hình 10.9: Giao diện form sao chép văn bản
291
Yêu cầu:
- Browse: Giúp chọn tập tin .txt trong hệ thống và hiển thị nội dung tập tin trên
TextBox txt1.
- SetText: Sao chép nội dung văn bản trong TextBox txt1 vào Clipboard
- GetText: Chép nội dung văn bản trong Clipboard vào TextBox txt2
- Clear: Xóa dữ liệu lưu trong Clipboard
- Exit: Đóng chương trình.
Hướng dẫn:
Bước 1: Thiết kế giao diện ban đầu: Thêm các điều khiển Label, TextBox,
Button, OpenFileDialog từ cửa sổ Toolbox vào form như hình 10.10.
TextBox1 TextBox2
Hình 10.10: Giao diện ban đầu form sao chép văn bản
Bước 2: Thiết lập giá trị thuộc tính cho điều khiển
- Form1:
Thuộc tính Text: “Clipboard”
Thuộc tính Size: 580, 299
- label1:
Thuộc tính Text: “Copy and paste Text”
- label2:
Thuộc tính Text: “Text 1:”
- label3:
Thuộc tính Text: “Text 2:
- TextBox1:
Thuộc tính Multiline: True
292
Thuộc tính Name: txt1
Thuộc tính Size: 262, 126
- TextBox2:
Thuộc tính Multiline: True
Thuộc tính Name: txt2
Thuộc tính Size: 262, 126
- button1:
Thuộc tính Text: “Browse”
Thuộc tính Name: browse
- button2:
Thuộc tính Text: “SetText”
Thuộc tính Name: settext
- button3:
Thuộc tính Text: “GetText”
Thuộc tính Name: gettext
- button4:
Thuộc tính Text: “Clear”
Thuộc tính Name: clear
- button5:
Thuộc tính Text: “Exit”
Thuộc tính Name: exit
- openFileDialog1:
Thuộc tính Filter: “File Text|*.txt”
Bước 3: Viết mã lệnh cho các điều khiển
- Sự kiện Click của Button SetText:
private void settext_Click(object sender, EventArgs e)
{
Clipboard.SetText(txt1.Text);
}
- Sự kiện Click của Button Browse:
private void browse_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string tentaptin = openFileDialog1.FileName;
StreamReader rd = new StreamReader(tentaptin);
txt1.Text = rd.ReadToEnd();
rd.Close();
}
}
293
- Sự kiện Click của Button GetText:
private void gettext_Click(object sender, EventArgs e)
{
txt2.Text = Clipboard.GetText();
}
- Sự kiện Click của Button Clear:
private void clear_Click(object sender, EventArgs e)
{
Clipboard.Clear();
}
- Sự kiện Click của Button Exit:
private void exit_Click(object sender, EventArgs e)
{
Application.Exit();
}
10.7. Lớp Cursors
Lớp Cursors cung cấp tâp các con trỏ có hình dạng khác nhau sử dụng trong ứng
dụng Windows Foms như bảng 10.10. Thông thường, khi ứng dụng trong những tình
trạng khác nhau thì lập trình trình viên sẽ thay đổi trạng thái của con trỏ cho phù hợp
để người dùng dễ nhận biết.
Bảng 10.11: Bảng mô tả các thuộc tính thường dùng của lớp Clipboard
Thuộc tính lớp Cursors Mô tả
Cursors.AppStarting
Cursors.Default
Cursors.No
Cursors.SizeAll
Cursors.SizeNESW
Cursors.SizeNS
Cursors.SizeNWSE
Cursors.SizeWE
Cursors.WaitCursor
294
Cursors.Hand
Cursors.Help
Cursors.NoMove2D
Cursors.NoMoveHoriz
Cursors.NoMoveVert
Cursors.PanEast
Cursors.PanNE
Cursors.PanNorth
Cursors.PanNW
Cursors.PanSE
Cursors.PanSouth
Ví dụ 10.6: Trên form sao chép văn bản hình 10. 9. Thiết lập thuộc tính Cursor sao cho
khi người dùng rê chuột vào TextBox1 và TextBox2 thì con trỏ sẽ hiển thị ở dạng No
.Hướng dẫn:
- Viết mã lệnh cho sự khiện MouseMove của TextBox1 như sau:
private void txt1_MouseMove(object sender, MouseEventArgs e)
{
Cursor.Current = Cursors.No;
}
- Viết mã lệnh cho sự khiện MouseMove của TextBox2 như sau:
private void txt2_MouseMove(object sender, MouseEventArgs e)
{
Cursor.Current = Cursors.No;
}
295
CHƯƠNG 11: BÀI TẬP TỔNG HỢP
Câu 1:
Viết chương trình trắc nghiệm giúp học tiếng anh như sau:
- Khi khởi động chương trình sẽ hiển thị Form “Đăng nhập” như hình 11.1
Hình 11.1: Form đăng nhập
- Nhấn Button “Đăng ký” để đăng ký một tài khoản mới đăng nhập vào chương
trình trắc nghiệm. Form “Đăng ký” như hình 11.2.
Hình 11.2: Form đăng ký
o Nếu người dùng đăng ký tên đăng nhập sai thi sẽ hiện ErrorProvide “Tên đăng
nhập đã có”.
o Nhấn Button “Đăng ký” để hoàn tất việc đăng ký tài khoản, khi đó tên đăng ký
sẽ được lưu trong tập tin có tên TaiKhoan.txt để lưu trữ.
- Tại form “Đăng nhập” như hình 11.1, nếu người dùng đăng nhập với tài khoản
admin và mật khẩu tài khoản là admin thì sẽ hiển thị form “Tạo câu hỏi trắc
nghiệm” như hình 11.3.
296
Hình 11.3: Giao diện form tạo câu hỏi
o Người dùng có thể gõ nội dung câu hỏi và nội dung câu trả lời, đồng thời chọn
RadioButton tương ứng với đáp án đúng.
o Nhấn Button “Thêm” để thêm câu hỏi vào tập tin có tên Cauhoi.txt.
- Tại form “Đăng nhập” như hình 11.1, nếu người dùng đăng nhập với tài khoản
khác admin và tồn tại trong tập tin Taikhoan.txt thì sẽ hiển thị form “Chọn số câu
hỏi trắc nghiệm” như hình 11.4. Nếu tài khoản đang nhập không có trong
Takhoan.txt thì hiện thông báo “Bạn đăng nhập chưa đúng tài khoan”.
Hình 11.4: Giao diện form lựa chọn số câu hỏi trắc nghiệm và thời gian
làm bài
o Khi người dùng đã chọn xong số câu hỏi trắc nghiệm và thời gian làm bài thì
nhấn Enter sẽ hiển thị được form làm bài trắc nghiệm như hình 11.5
297
Hình 11.5: Giao diện form làm bài trắc nghiệm tiếng anh
o Bên tay trái giao diện 11.5 sẽ hiển thị các Button, số lượng Button tương ứng
với số lượng câu hỏi trắc nghiệm đã chọn. Khi nhấn vào một Button bất kỳ thì
sẽ hiển thị lên nội dung câu hỏi, câu hỏi này được lấy từ tập tin Cauhoi.txt.
o Trên giao diện làm bài có thanh ProgressBar sử dụng để mô tả thời gian làm
bài mà người dùng chọn. Nếu hết thời gian sẽ tự động nộp bài.
o Người dùng có thể nộp bài trước khi thời gian kết thúc bằng cách nhấn Button
“Nộp Bài”. Khi đó sẽ hiển thị giao diện như hình 11.6 để cho biết kết quả làm
bài của người dùng.
Hình 11.6: Kết quả làm bài của người dùng
298
Câu 2: Viết chương trình trò chơi tìm số như hình 11.7.
Thời gian phải hoàn thành
số cần tìm
tạm dừng
Thoát
Người chơi phải tìm số cần
tìm trong danh sách các số
Hình 11.7: Giao diện trò chơi tìm số
- Trong trò chơi tìm số:
o Chọn chế độ chơi:
. Chơi mặc định: khi đó chương trình sẽ hiển thị 100 số ở vị trí
ngẫu nhiên bất kỳ. Khi đó người chơi sẽ phải tìm kiếm số cần tìm
trong danh sách các số phát sinh ở các vị trí ngẫu nhiên đó. Khi
tìm được người chơi sẽ nhấn vào số đó, số đó sẽ lập tức bị chuyển
sang chế độ đã được chọn (nghĩa là không còn nhấn được nữa).
Thời gian chơi ở chế độ mặc định là 10 phút, nếu hết 10 phút mà
không tìm được tất cả 100 số thì người chơi thua cuộc.
. Chế độ tự tạo: người dùng sẽ chọn số chữ số muốn tìm, số lượng
số trên một hàng và thời gian phải hoàn thành việc tìm kiếm. Giao
diện như hình 11.8.
299
Hình 11.8: Giao diện trò chơi chế độ tự chọn
o Chọn số người chơi: Nếu chọn hai người chơi thì sẽ hiển thị form như
hình 11.9 để 2 người chơi nhập tên vào.
Hình 11.9: Nhập tên của hai người chơi
. Tuần tự người chơi thừ nhất sẽ tìm số trước, thời gian để tìm ra
một số là 5 giây, nếu hết 5 giây mà người chơi thứ nhất chưa tìm
ra sẽ chuyển lượt cho người chơi thứ hai.
. Với mỗi lần tìm được số thì điểm số của người chơi sẽ tăng lên 1
như hình 11.10
300
Điểm số hai
người chơi
Hình 11.10: Chương trình tìm số hai người chơi
Câu 3: Viết chương trình trò chơi 1 + 1 = 2 có giao diện như hình 11.11.
lblKQ
lblSoMot lblSoHai
btnDung btnSai
ProgressBar1 lblKetQua
Hình 11.11: Giao diện trò chơi 1+1 = 2
Yêu cầu:
301
- Chương trình sẽ phát sinh ngẫu nhiên các số nguyên trong Label: lblSoMot,
lblSoHai, lblKQ.
- Người chơi sẽ xem kết quả phát sinh ở biểu thức và chọn biểu thức đúng hay
sai.
o Nếu đúng thì dùng chuột chọn nút “Đúng” trên giao diện chương trình
hoặc nhấn nút “Left Arrow” trên bàn phím.
o Nếu sai thì dùng chuột chọn nút “Sai” trên giao diện chương trình hoặc
nhấn nút “Right Arrow” trên bàn phím.
- Mỗi lần chọn đúng thì sẽ được cộng một điểm vào lblKetQua và tiếp tục phát
sinh ngẫu nhiên 1 biểu thức mới. Nếu chọn sai sẽ bắt đầu chơi lại trò chơi.
- Thời gian để tính toán và chọn đúng hay sai một biểu thức là 4 giây, được thể
hiện ở thanh ProgressBar.
302
TÀI LIỆU THAM KHẢO
[1] Phạm Hữu Khang , Lập trình Windows Forms, tập 2, NXB Lao động và Xã hội,
2008.
[2] Phương Lan (chủ biên), Hoàng Đức Hải, Lập trình Windows với C#.NET, NXB
Lao động và Xã hội, 2002.
[3] Mathew A. Stoecker, Steve Stein (2009) - EXAM 70-505 Windows Forms
Application Development - Training Kit, Microsoft Press, 2009.
[4]
lam-viec-voi-may-in-pdf.htm?page=6
[5]
[6]
ki%E1%BB%83u/
[7]
[8]
[9]
[10]
csharp-co-y-nghia-gi.cpp
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
xay-dung-menu.htm
[21]
c.14869.html
[22]
303
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
[33]
[34]
[35]
[36]
[37]
trong-c-using-listview-control-c
[38]
423.html
[39]
Edition
304File đính kèm:
giao_trinh_lap_trinh_windows_forms_voi_c_phan_2.pdf

