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 304
File đính kèm:
- giao_trinh_lap_trinh_windows_forms_voi_c_phan_2.pdf