Tập bài giảng Lập trình cơ bản (Phần 2)

pdf 83 trang Gia Huy 17/05/2022 2170
Bạn đang xem 20 trang mẫu của tài liệu "Tập bài giảng Lập trình cơ bản (Phần 2)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftap_bai_giang_lap_trinh_co_ban_phan_2.pdf

Nội dung text: Tập bài giảng Lập trình cơ bản (Phần 2)

  1. Tập bài giảng Lập trình cơ bản CHƢƠNG 4: LẬP TRÌNH TRÊN FORM Trong chƣơng này, giới thiệu cách xây dựng một ứng dụng Windows Forms cơ bản bằng cách sử dụng các điều khiển thông dụngtrong các ứng dụng GUI. Đồng thời hƣớng dẫn cách thiết lập các thuộc tính của Windows Forms và các điều khiển bằng cách sử dụng thiết kế trực quan hoặc cửa sổ Properties và thay đổi hoặc kiểm tra giá trị của các thuộc tính tự động bằng cách sử dụng mã lệnh trong C#. 4.1. Giới thiệu về lập trình trên Form Trƣớc .NET, các nhà phát triển có vài chọn lựa trong việc xây dựng một ứng dụng Windows. Họ có thể xây dựng một ứng dụng bằng C hay C++ sử dụng Win32 API. Việc này là công việc rất khó và chi phối thời gian. Tiếp đến là sử dụng Microsoft Foundation Classes (MFC) là một thƣ viện lớp sử dụng C++ đƣợc gói gọn trong Win32 API để xây dựng úng dụng Windows và Visual Basic là một công cụ phát triển mạnh cho phép tạo các ứng ụng Windows tƣơng đối nhanh chóng. Tuy nhiên, các giải pháp này đều không sử dụng .NET Framework hay CLR. .NET Framework chứa một tầng lớp tiện ích mới dựa trên Win32 API và giống nhƣ MFC và Visual Basic, nó cho phép phát triển các ứng dụng Windows hiệu suất cao hơn và dễ dàng hơn. Môi trƣờng này đƣợc gọi là Windows Forms, cho phép các lập trình viên tạo racác ứng dụng Windows tƣơng tác tốt hơn và lớn hơn sử dụng bất kỳ ngôn ngữ .NET nào. 4.2. Làm việc với Form 4.2.1. Một số khái niệm Windows Forms là một tập hợp các thƣ viện lớpđƣợc quản lý trong .NET Framework để phát triển các ứng dụng desktop trên máy tính. Trong Windows Forms, Form là một cửa sổ giao diện cho phép hiển thị thông tin và tƣơng tác với ngƣời dùng. 116
  2. Tập bài giảng Lập trình cơ bản Các ứng dụng Windows Forms thƣờng đƣợc xây dựng bằng cách thêm các điều khiển vào Form và xây dựng sự kiện tƣơng ứng với các hành động của ngƣời dùng, chẳng hạn nhƣ kích chuột hay bấm phím nào đó. Một điều khiển (control) là một thành phần có giao diện riêng (User Interface) và có thể hiển thị dữ liệu hoặc nhận dữ liệu vào. Để xây dựng một ứng dụng Windows Forms, có thể sử dụng rất nhiều đối tƣợng của lớp thuộc các không gian tên khác nhau (namespace), tuy nhiên có một không tên quan trọng không thể thiếu trong ứng dụng Windows Forms đó là System.Windows.Forms. System.Windows.Forms chứa các lớp dùng để tạo ứng dụng Windows với giao diện ngƣời sử dụng mang các đặc điểm ƣu việt có trên hệ điều hành Windows. Ví dụ 4.1 sau đây sẽ tạo ứng dụng Windows Form nhƣ mẫu sau: Hình 4.1: Giao diện ví dụ 4.1 Yêu cầu: - Đặt dòng tiêu đề Form là Ví dụ 4_1 - Hiển thị dòng chữ Xin chào trên Form -Khi kích chuột vào nút ―Thoát‖: Thực hiện đóng Form trên. Hướng dẫn thực hiện: Bƣớc 1: Tạo ứng dụng Windows Forms Application: Mở Visual Studio 2010 vào File|New|Project và thực hiện thiết lập theo hình 4.2. 117
  3. Tập bài giảng Lập trình cơ bản Hình 4.2: Các bước tạo ứng dụng Windows Forms Application Sau khi click ―Ok‖, Visual Stuidio 2010 sẽ có giao diện nhƣ hình 4.3: Hình 4.3: Giao diện ứng dụng Windows Forms Application sau khi tạo. Khi làm việc với ứng dụng Windows Form, một số cửa sổ thƣờng xuyên sử dụng, nhƣ hình 4.3, ở giữa sẽ là giao diện của Form1 vừa tạo ra (Form1.cs[Design]), nơi đƣợc dùng để thiết kế giao diện ứng dụng, sẽ chứa những điều khiển đƣợc thêm vào, bên trái sẽ là cửa số Toolbox nơi chứa các điều khiển cho phép kéo thả vào Form. 118
  4. Tập bài giảng Lập trình cơ bản Hình 4.4: Cửa sổ Toolbox. Bên phải là cửa sổ Cửa sổSolutionExplorer:Hiển thị các Project trong Solution, hiển thị tất cả các tệp trong Project và Project với tên đƣợc tô đậmsẽ đƣợc chạy đầu tiên Hình 4.5: Cửa sổ Solution Explorer. Chú ý: Nếu các cửa sổ này không xuất hiện thì vào View để mở lại các cửa sổ đó. Bƣớc 2: Thay đổi tiêu đề cho Form. Để thay đổi tiêu đề Form, chọn Form1 trong cửa sổ Form1.cs[Design] và mở cửa sổ Properties để thay đổi thuộc tính Text trên Form1. 119
  5. Tập bài giảng Lập trình cơ bản Hình 4.6: Cửa sổ Properties của Form1. Nếu cửa sổ Properties không xuất hiện thì chọn Form1 và nhấn phím F4. Bƣớc 3: Hiển thị dòng chữ ―Xin chào‖ trên Form1. - Mở cửa sổ Toolbox, tìm tới điều khiển Label , giữ chuột và kéo vào Form1 nhƣ hình 4.7: Hình 4.7: Thêm điều khiển Label vào Form1. - Chọn điều khiển label1 trên Form1, mở cửa sổ Properties của điều khiển label1 và sửa thuộc tính tính Text ban đầu là ―label1‖ thành ―Xin chào!‖ 120
  6. Tập bài giảng Lập trình cơ bản Hình 4.8: Thay đổi thuộc tính Text của điều khiển label1. Kết quả: Hình 4.9: Kết quả sau khi thay đổi thuộc tính Text của điều khiển label1 - Tiếp theo thay đổi Font chữ cho điều khiển label1. Mở cửa sổ Properties của điều khiển label1, chọn thuộc tính Font, kích chuột vào biểu tƣợng sẽ xuất hiện của sổ Font nhƣ hình 4.10. Hình 4.10: Cửa sổ Font. - Thực hiện các thay đổi sau: Font: Time New Roman 121
  7. Tập bài giảng Lập trình cơ bản Size: 16 Font style: True - Sau đó thay đổi màu chữ bằng cách thiết lập thuộc tính ForeColor: Blue Kết quả: Hình 4.11: Thay đổi Font và màu chữ của điều khiển label1. Bƣớc 4: Thêm nút ―Thoát‖ và viết mã lệnh cho sự kiệnKích chuộtcủa nút ―Thoát‖ - Thêm điều khiển Button từ Toolbox vào Form1, thực hiện các thiết lập thuộc tính chon button1 nhƣ sau: Name:btThoat Text: Thoát - Trên cửa sổ Properties của nút ―Thoát‖, chọn biểu tƣợng để mở danh sách các sự kiện (event) của đối tƣợng lớp Button nhƣ hình 4.12, chọn sự kiện Click và double click vào sự kiện này, sẽ xuất hiện trong file Forms.cs một phƣơng thức đƣợc sinh ra tƣơng ứng với sự kiện Click của nút thoát (btThoat_Click) nhƣ hình 4.13. 122
  8. Tập bài giảng Lập trình cơ bản Hình 4.12: Chọn sự kiện Click Hình 4.13: Phương thức btThoat_Click - Viết mã lệnh cho sự kiện Kích chuộtcủa nút ―Thoát‖ private void btThoat_Click(object sender, EventArgs e) { this.Close();//Phương thức dùng để đóng Form } Bƣớc 5: Ấn phím F5 để chạy thử chƣơng trình và đƣợc kết quả nhƣ hình 4.1. 4.2.2. Các loại Form Form có ba loại chính là Form dạnh Multiple Document Interface (MDI) còn đƣợc gọi là MDI Form (Form cha) cho phép trình bày các Form (Child Form hay Form con)khác bên trong. Những Form mở ra không nằm trong MDI Form gọi là Normal Form MDI Form Một Form đƣợc gọi là MDI Form khi thuộc tính IsMdiContainer có giá trị True. Khi chuyển thuộc tính IsMdiContainer của Form từ False sang True, lập tức màu nền của Form đổi thành màu xám nhƣ hình 4.14. Hình 4.14: Màu nền của MDI Form. Ví dụ 4.2: Thiết lập thuộc tính IsMdiContainer //Tạo Form frm và cho frm là MDI Form 123
  9. Tập bài giảng Lập trình cơ bản Form frm = newForm1(); frm.IsMdiContainer = true; frm.Show();//Hiển thị Form Child Form Child Form là Form khi nạp lên sẽ nằm trong một MDI Form. Để Form trở thành Child Form thì khai báo thuộc tính MdiParent tƣơng ứng với MDI Form. Ví dụ 4.3: Khai báo để mở Child Form có tên frm lớp Form3. Form frm = new Form3(); frm.MdiParent = this;//this thể hiện Form gọi đến Form Frm là MDI Form frm.Show();//Hiển thị Form Normal Form Normal Form là Form không phải MDI Form hoặc Child Form 4.2.3. Thuộc tính của Form Những thuộc tính chung của Windows Form đƣợc liệt kê trong bảng sau: Thuộc tính Mô tả Name Là thuộc tính để xác định tên của Form, mặc định, thuộc tính Name của Form đầu tiên trong ứng dụng là Form1 Backcolor Thuộc tính xác định màu nền của Form BackgroundImage Thuộc tính xác định hình nền cho Form Font Thuộc tính xác định kiểu, kích thƣớc và loại font đƣợc hiển thị trên Form và trong những điều khiển trong Form Size Kích thƣớc của Form bao gồm: Width và Height Start Position Thuộc tính xác định vị trị mặc định xuất hiện của Form trên màn hình máy tính ngƣời sử dụng, có các thuộc tính sau: - Manual - vị trí và kích thƣớc của Form phụ thuộc vào vị trí xuất hiện của nó - CenterScreen - xuất hiện ở chính giữa màn hình - WindowsDefaultLocation - Form xuất hiện tại vị trí mặc định của Windows theo kích thƣớc của Form. - Windows DefaultBounds - Form đƣợc hiển thị tại vị trí mặc định của Windows và các chiều của chúng phụ thuộc vào hệ điều hành Windows. - Center Parent - Form đƣợc mở nhƣ một cửa sổ con của một Form khác và xuất hiện tại vị trí chính giữa so với Form cha. Text Xác định tiêu đề của Form 124
  10. Tập bài giảng Lập trình cơ bản WindowState Xác định trạng thái xuất hiện của Form: Normal, Maximized, hay Minimized. Bảng 4.1: Một số thuộc tính của Form Ví dụ 4.4: Tạo Form và thực hiện thay đổi một số thuộc tính trên Form nhƣ sau: Name: frm4_4 Text: Ví dụ 4_4 Size: 500, 500 BackColor:Red WindowState: Maximized Kết quả Form hiển thị nhƣ hình 4.15. Hình 4.15: Form sau khi thay đổi một số thuộc tính theo ví dụ 4.4. 4.2.4. Sự kiện trên Form Những sự kiện trong Windows Form đƣợc liệt kê nhƣ bảng sau: Sự kiện Mô tả Click Sự kiện này xảy ra khi click vào bất kỳ nơi nào trên Form Closed Sự kiện này xảy ra khi một Form đƣợc đóng lại Deactivate Sự kiện xảy ra khi một Formbị mất trạng thái sử dụng Load Sự kiện xảy ra khi một Formđƣợc tải trong bộ nhớ cho lần đầu tiên. MouseMove Sự kiện này xuất hiện khi chuột đƣợc rê trên một Form MouseDown Sự kiện xảy ra khi chuột đƣợc nhấn trên Form MouseUp Sự kiện xảy ra khi chuột đƣợc thả trên Form Resize Sự kiện xảy ra khi thay đổi kích thƣớc Form Closing Sự kiện xảy ra khi đang đóng Form Bảng 4.2: Một số sự kiện của Form 4.2.5. Phƣơng thức của Form Phƣơng thức Mô tả 125
  11. Tập bài giảng Lập trình cơ bản Show Đƣợc sử dụng để xuất hiện một Form bằng cách thiết lập thuộc tính Visible của Form ấy là true ShowDialog Hiển thị Form dạng modal (không cho phép dùng Form khác khi trừ khi nó đƣợc đóng lại) Close Dùng để đóng một Form Hide Dùng để ẩn một Form Bảng 4.3: Một số phương thức của Form Ví dụ 4.5: Các sự kiện và phƣơng thức của Form Yêu cầu: - Tạo Form nhƣ mẫu sau: Hình 4.16: Giao diện Form ví dụ 4.5 - Viết các thông báo cho các sự kiện Load(), Closing(), Resize(), Closed() - Khi kích chuột vào nút ―Hiện Form‖: Hiển thị 1 Form mới - Khi kích chuột vào nút ―Ẩn Form‖: Ẩn Form vừa mở - Khi kích chuột vào nút ―Hiện Form dạng modal‖: Mở Form dƣới dạng modal - Khi kích chuột vào nút ―Đóng Form‖: Đóng Form. Bƣớc 1: Tạo Form đặt tên là frmVidu4_5 STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_5 1 Form Text Ví dụ 4_5 Text Một số phƣơng thức của 2 Label Form Name btHien 3 Button Text Hiện Form 126
  12. Tập bài giảng Lập trình cơ bản STT Đối tƣợng Thuộc tính Giá trị Name btAn 4 Button Text Ẩn Form Name btHienModal 5 Button Text Hiện Form dạng modal Name btDong 6 Button Text Đóng Form Bƣớc 2: Viết mã lệnh cho các sự kiện của Form private void frmVidu4_5_Load(object sender, EventArgs e) { MessageBox.Show("Form được load"); } private void frmVidu4_5_MouseClick(object sender, MouseEventArgs e) { MessageBox.Show("Form vừa được kích chuột"); } private void frmVidu4_5_FormClosed(object sender, FormClosedEventArgs e) { MessageBox.Show("Form đã đóng"); } private void frmVidu4_5_FormClosing(object sender,FormClosingEventArgs e) { MessageBox.Show("Form đang đóng"); } Bƣớc 3: Viết mã lệnh cho sự kiện Click của các nút trên Form: Form frm = new Form();//Khai báo đối tượng Form frm sử dụng trong các sự kiện click của các nút private void btHien_Click(object sender, EventArgs e) { frm.Show(); } private void btAn_Click(object sender, EventArgs e) { frm.Hide(); } private void btDong_Click(object sender, EventArgs e) { frm.Close(); } private void btHienModal_Click(object sender, EventArgs e) { 127
  13. Tập bài giảng Lập trình cơ bản frm.ShowDialog(); } Trong ví dụ trên có sử dụng lớp MessageBox và phƣơng thức tĩnh Show() của lớp này để hiển thị một hộp thoại thông báo, chi tiết về lớp MessageBox sẽ đƣợc giới thiệu trong phần 4.4.3. Điều khiển Dialog. 4.3. Một số điều khiển thông dụng 4.3.1. Các thuộc tính và sự kiện chung Hầu hết các điều khiển trên Form đều có một số thuộc tính chung nhƣ trong bảng 4.4: Thuộc tính Mô tả BackColor Màu nền của điều khiển. Enabled Điều khiển đƣợc phép tƣơng tác (true) hay không đƣợc phép tƣơng tác (false) với ngƣời dùng. ForeColor Màu chữ của điều khiển. Name Tên của điều khiển. Text Nội dung chuỗi hiển thị trên điều khiển. Visible Cho phép điều khiển hiện (True) / không hiện (False) khi chạy ứng dụng. Width Là chiều rộng của điều khiển tính từ cạnh trái của điều khiển đến cạnh phải của điều khiển. Height Là chiều cao của điều khiển tính từ cạnh trên của điều khiển đến cạnh dƣới của điều khiển. Bảng 4.4: Một số thuộc tính chung của các điều khiển Các sự kiện chung thƣờng sử dụng của các điều khiển đƣợc trình bày trong bảng 4.5. Sự kiện Mô tả Click Xảy ra khi điều khiển bị kích chuột. Trong một vài điều khiển, event này cũng xảy ra khi nhấn phím Enter. MouseDown Xảy ra khi kích chuột trái nhƣng chƣa thả ra. MouseMove Xảy ra đến khi con trỏ chuột đi qua 1 điều khiển. MouseUp Xảy ra khi kích chuột trái và thả ra. KeyDown Xảy ra khi vừa bấm một phím bất kỳ từ 1 điều khiển đang đƣợc chọn.Sự kiện này luôn đƣợc gọi trƣớc sự kiện KeyUp. KeyPress Xảy ra khi vừa bấm một phím bất kỳ từ 1 điều khiển đang đƣợc chọn. Sự kiện này đƣợc gọi sau sự kiện KeyUp. KeyUp Xảy ra khi vừa bấm một phím bất kỳ rồi thả ra từ 1 điều khiển 128
  14. Tập bài giảng Lập trình cơ bản đang đƣợc chọn. Sự kiện này luôn đƣợc gọi sau sự kiện KeyDown. Bảng 4.5: Một số sự kiện chung của các điều khiển 4.3.2. Nhóm điều khiển Label 1. Label - Công dụng: Hiển thị chuỗi ký tự. - Thuộc tính: Thuộc tính Mô tả AutoSize Điều chỉnh kích thƣớc đối tƣợng cho vừa với chiều dài chuỗi ký tự Font Kiểu và kích thƣớc của chữ trình bày trên điều khiển TextAlign Canh lề (Left / Center / Right) Bảng 4.6: Một số thuộc tính của Label Chẳng hạn, thiết kế Form dạng đăng nhập, bên cạnh các điều khiển yêu cầu nhập họ tên sinh viên, mã sinh viên, lớp, Form chứa các điều khiển Label:―Họ tên SV‖, ―Mã SV‖, ―ĐĂNG NHẬP‖, ―Lớp‖ nhƣ hình 4.17. Hình 4.17: Sử dụng điều khiển Label. 2. LinkLabel - Công dụng: ngoài chức năng hiển thị chuỗi thì điều khiển LinkLabel cho phép liên kết đến địa chỉ Internet hoặc Email. - Thuộc tính: Thuộc tính Mô tả LinkArea Vùng liên kết theo chiều dài và ký tự bắt đầu LinkBehavior Trạng thái của liên kết, mặc định là SystemDefault, có thể chọn: AllwasUnderline, HoverUnderline hay NeverUnderline. 129
  15. Tập bài giảng Lập trình cơ bản LinkColor Màu của liên kết VisitedLinkColor Màu của liên kết sau khi đã chọn Bảng 4.7: Các thuộc tính của LinkLabel - Sự kiện: Sự kiện Mô tả LinkClicked Xảy ra khi kích chuộttrên điều khiển LinkLabel DoubleClick Xảy ra khi kích chuột hai lần trên điều khiển LinkLabel Bảng 4.8: Các sự kiện của LinkLabel Ví dụ 4.6: Điều khiển LinkLabel Yêu cầu: - Tạo Form theo mẫu: Hình 4.18: Ví dụ về điều khiển LinkLabel. - Khi kích chuột vào điều khiển LinkLabel sẽ chuyển tới địa chỉ trang trên trình duyệt nhƣ hình sau: Hình 4.19: Hiển thị trang trên trình duyệt web Hướng dẫn thực hiện 130
  16. Tập bài giảng Lập trình cơ bản Bƣớc 1: Tạo Form và đặt tên là frmVidu4_6, them điều khiển LinkLabel vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_6 1 Form Text Điều khiển LinkLabel Text 2 LinkLabel Name linkLabel1 Bƣớc 2: Viêt khai báo liên kết cho điều khiển LinkLabel trong sự kiện frmVidu4_6_Load. private void frmVidu4_6_Load(object sender, EventArgs e) { this.linkLabel1.Links.Add(0,100,‛ "); } //Thêm một liên kết mới vào đối tương linkLabel1. Bƣớc 3: Kích chuột hai lần vào điều khiển linkLabel1 để sinh sự kiện LinkClicked và thực hiện thêm đoạn mã lệnh sau vào sự kiện này. private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { string strURL = Convert.ToString(e.Link.LinkData); if (strURL.StartsWith(@" ")) Process.Start(strURL);//thực thi một ứng dụng ngoài, cho phép xem một tài liệu hay một trang web } // Sử dụng thêm không gian tên System.Diagnostics; Bƣớc 4: Nhấn F5 để chạy chƣơng trình. 4.3.3. Nhóm điều khiển TextBox 1. Textbox - Công dụng: Dùng để nhập và hiển thị văn bản. - Thuộc tính: Thuộc tính Mô tả Text Xác định chuỗi hiển thị của TextBox Multiline Cho phéphiển thị văn bản trên nhiều dòng. PasswordChar Thuộc tính này cho phép lấy một ký tự làm đại diện cho tất cả các ký tự khác đƣợc nhập vào Bảng 4.9: Một số thuộc tính của TextBox - Sự kiện: Sự kiện Mô tả TextChanged Xảy ra khi chuỗi trên điều khiển thay đổi 131
  17. Tập bài giảng Lập trình cơ bản MouseClick Xảy ra khi kích chuột trên điều khiển TextBox MultilineChanged Xảy ra khi thuộc tính Multiline thay đổi giá trị từ True sang False hay ngƣợc lại. Bảng 4.10: Một số sự kiện của TextBox Ví dụ 4.7: Điều khiển TextBox Yêu cầu: - Tạo Form theo mẫu sau: Hình 4.20: Ví dụ về điều khiển TextBox - Các nhãn: ―Tên đăng nhập‖, ―Mật khẩu‖, ―Mô tả‖ - Các điều khiển để nhập tên đăng nhập, mật khẩu và mô tả là các Textbox Lập trình cho các sự kiện: - Kích chuộtvào nút ―Đăng nhập‖: Kiểm tra xem tên đăng nhập có phải là ―abcde‖ và mật khẩu là ―12345‖ hay không và sẽ đƣa ra thông báo là đăng nhập thành công hay thất bại - Kích chuột vào nút ―Xóa‖: Thực hiện xóa nội dung của các điều khiển TextBox - Kích chuột vào nút ―Thoát‖: Thực hiện đóng Form. - Nếu TextBox tên đăng nhập là rỗng thì nút ―Đăng nhập‖ bị vô hiệu hóa, ngƣợc lại cho phépkiểm tra khi kích chuột vào nút ―Đăng nhập‖. Hướng dẫn thực hiện Bƣớc 1: Tạo Form và đặt tên là frmVidu4_7, thêm các điều khiển TextBox và Button vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_7 1 Form Text Điều khiển TextBox Multiline True 2 TextBox Name txtMota 3 TextBox PasswordChar * 132
  18. Tập bài giảng Lập trình cơ bản STT Đối tƣợng Thuộc tính Giá trị Name txtMatkhau 4 TextBox Name txtTendangnhap Text Đăng nhập 5 Button Name btDangnhap Text Xóa 6 Button Name btXoa Text Thoát 7 Button Name btThoat 8 Label Text Tên đăng nhập 9 Label Text Mật khẩu 10 Label Text Mô tả Bƣớc 2: Viết mã lệnh cho sự kiện Vidu4_7_Load private void Vidu4_7_Load(object sender, EventArgs e) { btDangnhap.Enabled = false; } Bƣớc 3: Viết mã lệnh cho các sự kiện Click của các nút Đăng nhập, nút Thoát và nút Xóa private void btThoat_Click(object sender, EventArgs e) { this.Close(); } private void btXoa_Click(object sender, EventArgs e) { txtMatkhau.Clear();//Xóa nội dung của TextBox txtTendangnhap.ResetText();//Gán giá trị thuộc tính Text bằng giá trị mặc định } private void btDangnhap_Click(object sender, EventArgs e) { if (txtTendangnhap.Text == "abcde" && txtMatkhau.Text == "12345") MessageBox.Show("Đăng nhập thành công"); else MessageBox.Show("Đăng nhập thất bại"); } Bƣớc 4: Viết mã lệnh cho sự kiện TextChanged của txtTendangnhap, nếu có ký tự đƣợc nhập vào thì nút ―Đăng nhập‖ có thuộc tính Enabled là True, ngƣợc lại sẽ là False private void txtTendangnhap_TextChanged(object sender, EventArgs e) { if (txtTendangnhap.Text != "") btDangnhap.Enabled = true; 133
  19. Tập bài giảng Lập trình cơ bản else btDangnhap.Enabled = false; } Ví dụ 4.8: Chƣơng trình tìm ƣớc chung lớn nhất, bội chung nhỏ nhất: Yêu cầu: - Tạo Form theo mẫu sau: Hình 4.21: Giao diện ví dụ 4.8. - Các điều khiển để nhập số thứ nhất, số thứ 2, UCLN và BCNN là các TextBox - Các nhãn: ―UCLN, BCNN‖, ―Nhập số 1‖, ―Nhập số 2‖. - Khi kích chuột vào nút ―UCLN‖: Thực hiện tính và hiển thị ƣớc chung lớn nhất của 2 số nguyên dƣơng đƣợc nhập vào. - Khi kích chuột vào nút ―BCNN‖: Thực hiện tính bội chung nhỏ nhất của 2 số nguyên dƣơng đƣợc nhập vào. - Trong sự kiệnkích chuột của hai nút có kiểm tra dữ liệu của 2 số nhập vào có phải là 2 số nguyên dƣơng không, nếu không phải đƣa ra thông báo dữ liệu không hợp lệ. Hướng dẫn thực hiện: Bƣớc 1: Tạo Form và đặt tên là frmVidu4_8, thêm các điều khiển vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_8 1 Form Text Tìm ƢCLN, BCNN 2 TextBox Name txtSo1 3 TextBox Name txtSo2 4 TextBox Name txtUCLN 5 TextBox Name txtBCNN Text UCLN 6 Button Name btUCLN 7 Button Text BCNN 134
  20. Tập bài giảng Lập trình cơ bản STT Đối tƣợng Thuộc tính Giá trị Name btBCNN 8 Label Text Nhập số 1 9 Label Text Nhập số 2 Text UCLN, BCNN Font Times New Roman 10 Label Font style Bold Size 22 Bƣớc 2: Xây dựng các hàm kiểm tra dữ liệu và hàm tìm ƢCLN. private bool Kiemtra() { int so1, so2; bool kt1, kt2; kt1 = int.TryParse(txtSo1.Text, out so1); kt2 = int.TryParse(txtSo2.Text, out so2); return kt1 && kt2 && so1 >0 && so2 >0; } private int UCLN(int n, int m) { int du; do { du = n % m; n = m; m = du; } while (du != 0); return n; } Bƣớc 3: Viết mã lệnh cho sự kiện kích chuột của các nút ―UCLN‖ và nút ―BCNN‖ private void btUCLN_Click(object sender, EventArgs e) { if (Kiemtra()) { int so1, so2; so1 = int.Parse(txtSo1.Text); so2 = int.Parse(txtSo2.Text); txtUCLN.Text = UCLN(so1, so2).ToString(); } else MessageBox.Show("Dữ liệu không hợp lệ","Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); } 135
  21. Tập bài giảng Lập trình cơ bản private void btBCNN_Click(object sender, EventArgs e) { if (Kiemtra()) { int so1, so2; so1 = int.Parse(txtSo1.Text); so2 = int.Parse(txtSo2.Text); txtBCNN.Text = ((so1*so2)/UCLN(so1, so2)).ToString(); } else MessageBox.Show("Dữ liệu không hợp lệ","Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); } 2. MaskedTextBox - Công dụng: Đƣợc sử dụng để quy định dạng thức cho dữ liệu nhập vào - Thuộc tính: Thuộc tính Mô tả Mask Thiết lập mặt nạ cho điều khiển MaskedTextBox, một số mặt nạ có sẵn đƣợc mô tả trong hình 4.21. PromptChar Ký tự nhắc nhở khi nhập dữ liệu BeepOnError Xuất hiện tiếng Beep khi dữ liệu nhập không hợp lệ PasswordChar Thuộc tính này cho phép lấy một ký tự làm đại diện cho tất cả các ký tự đƣợc nhập vào. Bảng 4.11: Một số thuộc tính của MaskedTextBox Hình 4.22: Một số định dạng cho thuộc tính Mask - Sự kiện: Sự kiện Mô tả TextChanged Xảy ra khi chuỗi trên điều khiển thay đổi MouseClick Xảy ra khi kích chuột trên điều khiển MaskedTextBox 136
  22. Tập bài giảng Lập trình cơ bản MaskChanged Xảy ra khi định dạng nhập liệu trong thuộc tính Mask thay đổi MaskInputRejected Xảy ra khi dữ liệu nhập vào điều khiển bị từ chối TypeValidationCompleted Xảy ra khi MaskedTextBox hoàn tất việc kiểm tra cú pháp (parsing) cho giá trị hiện hành thông qua property ValidatingType Bảng 4.12: Một số sự kiện của MaskedTextBox Ví dụ 4.9: Điều khiển MaskedTextBox Yêu cầu: - Tạo Form theo mẫu sau: Hình 4.23: Ví dụ về điều khiển MaskedTextBox - Điểu khiển MaskedTextBox cho phép nhập ngày tháng năm, sẽ xuất hiện thông báo lỗi nếu nhập sai và hiển thị kết quả ngày tháng năm nếu nhập đúng - Khi kích chuột vào nút ―Hiển thị‖: Hiển thị ngày tháng năm nếu nhập đúng trong điều khiển MaskedTextBox Hướng dẫn thực hiện Bƣớc 1: Tạo Form và đặt tên là frmVidu4_9, thêm các điều khiển MaskedTextBox và Button vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_9 1 Form Text Điều khiển MaskedTextBox Mask 00/00/0000, Datetime 2 MaskedTextBox Name mtbNgaythangnam Text Hiển thị 3 Button Name btHienthi 137
  23. Tập bài giảng Lập trình cơ bản STT Đối tƣợng Thuộc tính Giá trị 4 Label Text Nhập ngày tháng năm Bƣớc 2: Viết mã lệnh cho sự kiện MaskInputRejected, bằng cách click 2 lần chuột vào điều khiển mtbNgaythangnam private void mtbNgaythangnam_MaskInputRejected(object sender, MaskInputRejectedEventArgs e) { MessageBox.Show("Lỗi: " + e.RejectionHint.ToString() + "; vị trí: " + e.Position.ToString()); }//Xuất hiện lỗi nếu nhập dữ liệu không đúng Bƣớc 3: Viết mã lệnh cho các sự kiện Click của các nút ―Hiển thị‖ private void btHienthi_Click(object sender, EventArgs e) { DateTime value; bool kt = DateTime.TryParse(mtbNgaythangnam.Text, out value); if(kt) MessageBox.Show("Ngày: " + value.ToLongDateString()); else MessageBox.Show("Ngày không hợp lệ "); } 3. RichTextBox - Công dụng: cho phép hiển thị văn bản trên nhiều dòng - Thuộc tính và sự kiên: tƣơng tự nhƣ điều khiển TextBox 4.3.4. Nhóm điều khiển ComboBox, ListBox 1. ComboBox - Công dụng: Dùng để hiển thị một danh sách các mục cho phép lựa chọn / hoặc nhập vào một chuỗi để lựa chọn. - Thuộc tính: Thuộc tính Mô tả Items Lƣu trữ các mục (item) trong ComboBox, thuộc tính Itemscó rất nhiều phƣơng thức đƣợc sử dụng nhƣ để thêm1 phần tử(Add), xóamột phần tử (Remove), xóa toàn bộ (Clear) hay trả về số phần tử thông quá thuộc tính Count của Items SelectedItem Trả về hoặc gán Item (object) đƣợc chọn SelectedText Trả về hoặc gán nội dung thể hiện ứng với phần tử đƣợc chọn SelectedIndex Trả về hoặc gán giá trị chỉ mục ứng với phần tửđang chọn Text Trả về hoặc gán giá trị chuỗi ứng với phần tử đƣợc chọn DropDownStyle Kiểu trình bày danh sách các phần tử, mặc định là 138
  24. Tập bài giảng Lập trình cơ bản DropDown (cho phép nhập chuỗi), DropDownList chỉ cho phép chọn trong danh sách, Simple (dạng danh sách) Bảng 4.13: Một số thuộc tính của ComboBox - Sự kiện: Sự kiện Mô tả TextChanged Xảy ra khi chuỗi trên điều khiển thay đổi MouseClick Xảy ra khi kích chuột trên điều khiển ComboBox SelectedIndexChanged Xảy ra khi chỉ mục chọn thay đổi Bảng 4.14: Một số sự kiện của ComboBox Ví dụ 4.10: Điều khiển ComboBox Yêu cầu: - Tạo Form theo mẫu sau: Hình 4.24: Ví dụ về điều khiển ComboBox - Điểu khiển ComboBox lƣu trữ các phép toán (+ - * / %) - Các nhãn:‖Số hạng 1‖, ―Số hạng 2‖, ―Phép tính‖, ―=‖ và một nhãn dùng để hiển thị kết quả của phép tính. - Các điều khiển nhập số hạng 1 và số hạng 2 là các điều khiển TextBox. - Khi kích chuột vào nút ―Tính‖: Dựa trên việc lựa chọn phép tính sẽ tính kết quả của phép tính đó với hai số hạng đƣợc nhập vào và hiển thị ra nhãn kết quả - Khi kích chuột vào ―Thoát‖: Đóng Form - Nếu chọn phép toán ―/‖ trong điều khiển ComboBox sẽ xuất hiện một thông báo yêu cầu nhập số hạng thứ 2 là một số khác 0. Hướng dẫn thực hiện: Bƣớc 1: Tạo Form và đặt tên là frmVidu4_10, thêm các điều khiển vào trong Form. 139
  25. Tập bài giảng Lập trình cơ bản STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_10 1 Form Text Phép tính DropDownStyle DropDownList 2 ComboBox Name cbbPheptoan Text Tính 3 Button Name btTinh 4 Label Text Số hạng 1 5 Label Text Phép tính 6 Label Text Số hạng 2 7 Label Text Kết quả 8 Label Text = Text 9 Label Name lblKetqua Text Thoát 10 Button Name btThoat Bƣớc 2: Thêm các ký hiệu phép toán vào điều khiển ComboBox. Chọn ComboBox, tại cửa sổ Properties Window, chọn thuộc tính Items, nhấn vào nút và cửa sổ String Collection Editor xuất hiện nhƣ hình 4.25 và thực hiện thêm các ký hiệu phép toán vào. Hình 4.25: Cửa sở String Collection Editor Bƣớc 3: Cách thứ 2 để thêm phần tử vào điều khiển ComboBox là sử dụng phƣơng thức Add của thuộc tính Items nhƣ trong đoạn mã lệnh sau: private void frmVidu4_10_Load(object sender, EventArgs e) { cbbPheptoan.SelectedIndex = 0; //thiết lập mục chọn đầu tiên ở trong combobox cbbPheptoan.Items.Add("%");//Thêm phép toán % vào trong thuộc tính Items của combobox 140
  26. Tập bài giảng Lập trình cơ bản } Bƣớc 4: Viết mã lệnh cho sự kiện SelectedIndexChanged của đối tƣợng ComboBox cbbPheptoan (kích chuột 2 lần vào điểu khiển ComboBox để sinh sự kiện SelectedIndexChanged). Kiểm tra phép toán đƣợc chọn có phải là ―/‖, nếu đúng thì đƣa ra thông báo phải nhập số hạng thứ 2 là số khác 0 private void cbbPheptoan_SelectedIndexChanged(object sender, EventArgs e) { if(cbbPheptoan.Text=="/") MessageBox.Show("Số hạng thứ 2 phải là số khác 0"); } Bƣớc 5: Viết mã lệnh cho sự kiện kích chuột vào nút ―Tính‖ private void btTinh_Click(object sender, EventArgs e) { if (kiemtra()) { float sh1, sh2; sh1 = float.Parse(txtSohang1.Text); sh2 = float.Parse(txtSohang2.Text); float kq = 0; string tb = ""; switch (cbbPheptoan.SelectedItem.ToString())//trả về dòng được chọn trong combobox { case "+": kq = sh1 + sh2; break; case "-": kq = sh1 - sh2; break; case "*": kq = sh1 * sh2; break; case "/": if (sh2 != 0) kq = sh1 / sh2; else tb = "Số hạng thứ 2 là một 0"; break; case "%": kq = sh1 % sh2; break; default: tb = "Không phải là phép toán cho phép"; break; } if (tb == "") lbKetqua.Text = kq.ToString(); else lbKetqua.Text = tb; } } Bƣớc 6: Viết mã lệnh cho sự kiện kích chuột vào nút ―Thoát‖ private void btThoat_Click(object sender, EventArgs e) { this.Close(); } 2. ListBox - Công dụng: Hiển thị và cho phép lựa chọn một danh sách cácphần tử - Thuộc tính: 141
  27. Tập bài giảng Lập trình cơ bản Thuộc tính Mô tả Items Lƣu trữ các phần tử trong ListBox, thuộc tính Items có rất nhiều phƣơng thức đƣợc sử dụng nhƣ để thêm một phần tử (Add), xóa một phần tử (Remove), xóa toàn bộ (Clear) hay trả về số phần tử thông qua thuộc tính Count của Items SelectedItem Trả về hoặc gán phần tử (object) đƣợc chọn SelectedText Trả về hoặc gán chuỗi thể hiện ứng với phần tử đƣợc chọn SelectedIndex Trả về hoặc gán giá trị chỉ mục ứng với phần tử đang chọn Text Trả về hoặc gán giá trị chuỗi ứng với phần tử đƣợc chọn SelectionMode Xác định cách lựa chọn các phần tử trong ListBox. Có 4 giá trị - None: không cho phép chọn bất cứ phần tử nào trong ListBox - One: chỉ chọn một phần tử từ ListBox - MultiSimple: cho phép chọn nhiều phần tử từ ListBox. - MultiExtended: có thể chọn nhiều phần tử và sử dụng phím SHIFT, CTRL và phím mũi tên để chọn những phần tử từ ListBox. Bảng 4.15: Một số thuộc tính của ListBox - Sự kiện: Sự kiện Mô tả TextChanged Xảy ra khi chuỗi trên điều khiển thay đổi MouseClick Xảy ra khi ngƣời sử dụng kích chuột trên điều khiển ListBox SelectedIndexChanged Xảy ra khi chỉ mục chọn thay đổi Bảng 4.16: Một số sự kiện của ListBox Ví dụ 4.11: Điều khiển ListBox Yêu cầu: - Tạo Form theo mẫu sau: 142
  28. Tập bài giảng Lập trình cơ bản Hình 4.26: Ví dụ về điều khiển ListBox - Điểu khiển ListBox lƣu trữ các số nguyên - Điều khiển để nhập một số nguyên là điều khiển TextBox: Lập trình sự kiện khi kích chuột vào các nút nhƣ sau: - Với nút ―Thêm‖: Thêm số nguyên vào ListBox - Với nút ―Thoát‖: Đóng Form - Với nút ―Tổng các phần tử‖: Tính tổng các số nguyên có trong ListBox - Với nút ―Xóa phần tử đầu‖: Xóa phần tử đầu tiên trong ListBox - Với nút ―Xóa phần tử cuối‖: Xóa phần tử cuối cùng trong ListBox - Với nút ―Xóa phần tử hiện tại‖: Xóa phần tử đƣợc chọn trong ListBox Hướng dẫn thực hiện Bƣớc 1: Tạo Form và đặt tên là frmVidu4_11, thêm các điều khiển vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_11 1 Form Text Làm việc với Listbox SelectionMode One 2 ListBox Name lbDayso Text Thêm 3 Button Name btThem Text Làm việc với Listbox Font Times New Roman 4 Label Font style Bold Size 22 143
  29. Tập bài giảng Lập trình cơ bản STT Đối tƣợng Thuộc tính Giá trị Text ListBox 5 Groupbox Name groupBox1 Text Xử lý ListBox 6 Groupbox Name groupBox2 7 Label Text Nhập số nguyên Text Kết quả 8 Label Name lblKetqua Text Tổng các phần tử 9 Button Name btTong Text Xóa phần tử đầu 10 Button Name btXoadau Button Text Xóa phần tử cuối 11 Name btXoacuoi Button Text Xóa phần tử hiện tại 12 Name btXoahientai Button Text Thoát 13 Name btThoat TextBox Text 14 Name txtSonguyen Bƣớc 2: Xây dựng hàm kiểm tra dữ liệu nhập vào TextBox txtSonguyen private bool Kiemtra() { int so; bool ktso = int.TryParse(txtSonguyen.Text, out so); return ktso; } Bƣớc 3: Viết mã lệnh cho sự kiện kích chuột vào các nút có trong Form private void btThem_Click(object sender, EventArgs e) { if (Kiemtra()) { int so = int.Parse(txtSonguyen.Text); lbDayso.Items.Add(so);//thêm một phần tử vào listbox } else MessageBox.Show("Dữ liệu không hợp lệ"); } private void btThoat_Click(object sender, EventArgs e) { 144
  30. Tập bài giảng Lập trình cơ bản this.Close(); } private void btTong_Click(object sender, EventArgs e) { if (lbDayso.Items.Count > 0)//count trả về số phần tử có trong listbox { int tong = 0; int n = lbDayso.Items.Count; for (int i = 0; i 0) { lbDayso.Items.RemoveAt(0);//phần tử đầu có chỉ số bằng 0 MessageBox.Show("Loại bỏ phần tử đầu thành công"); } } private void btXoacuoi_Click(object sender, EventArgs e) { if (lbDayso.Items.Count > 0) { lbDayso.Items.RemoveAt(lbDayso.Items.Count - 1);//chỉ số phần tử cuối cùng MessageBox.Show("Loại bỏ phần tử cuối thành công"); } } private void btXoahientai_Click(object sender, EventArgs e) { if (lbDayso.Items.Count > 0) { if (lbDayso.SelectedIndex >= 0) { MessageBox.Show("Loại bỏ phần tử hiện tại với chỉ số = " + lbDayso.SelectedIndex.ToString()); lbDayso.Items.RemoveAt(lbDayso.SelectedIndex);//chỉ số phần tử hiện tại 145
  31. Tập bài giảng Lập trình cơ bản } } } 4.3.5. Nhóm điều khiển CheckBox, RadioButtom 1. CheckBox - Công dụng: Cho phép chọn một trong hai giá trị Yes/No hoặc True/False. Điều khiển CheckBox cho phép hiển thị hình ảnh, chuỗi hoặc cả hai trên điều khiển. - Thuộc tính: Thuộc tính Mô tả Text Thuộc tính này sử dụng để nhận hoặc gán chuỗi ký tự hiển thị của Checkbox Checked Đƣợc sử dụng để xác định CheckBox đƣợc chọn hay không CheckState Trạng thái của điều khiển CheckBox đang chọn, có ba trạng thái: Checked, Unchecked, Indeterminate. ThreeState Cho phép hay không 3 trạng thái Checked, Unchecked, Indeterminate của điều khiển CheckBox Bảng 4.17: Một số thuộc tính của CheckBox - Sự kiện: Sự kiện Mô tả MouseClick Xảy ra khi kích chuộtvào điều khiển ListBox CheckedChanged Xảy ra khi kích chuột vào điều khiển CheckBox Click Xảy ra khi kích chuột vào điều khiển CheckBox CheckStateChanged Xảy ra khi thuộc tính CheckState bị thay đổi Bảng 4.18: Một số sự kiện của CheckBox Ví dụ 4.12: Điều khiển CheckBox Yêu cầu: - Tạo Form theo mẫu sau: 146
  32. Tập bài giảng Lập trình cơ bản Hình 4.27: Ví dụ về điều khiển CheckBox - Các điều khiển nhập 6 số a, b, c, d, e, f là các TextBox - Điều khiển để hiển thị kết quả là RichTextBox - Khi chọn CheckBox ―Tìm max‖: Hiển thị số lớn nhất trong 6 số đƣợc nhập trong các điều khiển TextBox - Khi chọn CheckBox ―Giải hệ phƣơng trình‖: Hiển thị nghiệm của hệ phƣơng trình: + = 푒 + = Hướng dẫn thực hiện Bƣớc 1: Tạo Form và đặt tên là frmVidu4_12, thêm các điều khiển vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_12 1 Form Text Làm việc với CheckBox CheckState Unchecked 2 CheckBox Name cbbTimmax Text Tìm max Text Giải hệ phƣơng trình 3 CheckBox CheckState Unchecked Name cbbGiaihephuongtrinh Text Lựa chọn 4 Groupbox Name groupBox1 Text Kết quả 5 Groupbox Name groupBox2 6 Label Text Nhập a: 7 Label Text Nhập b: 8 Label Text Nhập c: 9 Label Text Nhập d: 147
  33. Tập bài giảng Lập trình cơ bản STT Đối tƣợng Thuộc tính Giá trị 10 Label Text Nhập e: 11 Label Text Nhập f: 12 RichTextBox Name txtKetqua 13 TextBox Name txtA 14 TextBox Name txtB 15 TextBox Name txtC 16 TextBox Name txtD 17 TextBox Name txtE 18 TextBox Name txtF Bƣớc 2: Xây dựng hàm kiểm tra dữ liệu nhập vào TextBox txtSonguyen float a, b, c, d, e, f;//Khai báo các biến bool Kiemtra(out float a,TextBox txtA) { bool kta; kta = float.TryParse(txtA.Text,out a); return kta; } Bƣớc 3: Xây dựng hàm tìm số lớn nhất của 3 số: float max3so(float a, float b, float c) { float max = a; if (max < b) max = b; if (max < c) max = c; return max; } Bƣớc 4: Xây dựng hàm Tinhtoan dựa vào việc lựa chọn của các CheckBox để đƣa ra kết quả. void Tinhtoan() { if (Kiemtra(out a,txtA) && Kiemtra(out b,txtB) && Kiemtra(out c,txtC) && Kiemtra(out d,txtD) && Kiemtra(out e,txtE) && Kiemtra(out f,txtF)) { txtKetqua.Text = ""; if (cbbTimmax.Checked) { float max1, max2,max; max1 = max3so(a, b, c); max2 = max3so(d, e, f); max = max1; if (max < max2) max = max2; txtKetqua.Text += "Số lớn nhất = " + max.ToString(); 148
  34. Tập bài giảng Lập trình cơ bản } if (cbbGiaihephuongtrinh.Checked) { float D, Dx, Dy; D = a * d - b * c; Dx = e * d - b * f; Dy = a * f - e * c; if (D != 0) txtKetqua.Text += "\r\nHệ phương trình có nghiệm duy nhất:\r\nx = " + (Dx / D).ToString() + "\r\ny = " + (Dy / D).ToString(); else { if (Dx == 0 && Dy == 0) txtKetqua.Text += "\r\nHệ phương trình vô số nghiệm"; else txtKetqua.Text += "\r\nHệ phương trình vô nghiệm"; } } } else MessageBox.Show("Nhập hệ số không thỏa mãn"); } Bƣớc 5: Gọi hàm Tinhtoan() trong các sự kiện CheckedChanged của các điều khiển CheckBox (Sự kiện CheckedChanged đƣợc sinh ra khi kích chuột 2 lần vào các điều khiển CheckBox) private void cbbGiaihephuongtrinh_CheckedChanged(object sender, EventArgs e) { Tinhtoan(); } private void cbbTimmax_CheckedChanged(object sender, EventArgs e) { Tinhtoan(); } 2. CheckedListBox - Công dụng: Hiển thị một danh sách phần tử mà bên cạnh đó có biểu tƣợng CheckBox ứng với mỗi phần tử - Thuộc tính: Thuộc tính Mô tả Items Liệt kê các mục giá trị trong CheckedListBox, thuộc tính Items có rất nhiều phƣơng thức đƣợc sử dụng nhƣ để thêm phần tử (Add), xóa một phần tử (Remove), xóa toàn bộ (Clear) hay trả về số phần tử thông quá thuộc tính Count của Items 149
  35. Tập bài giảng Lập trình cơ bản SelectedItem Trả về hoặc gán Item (object) đƣợc chọn SelectedValue Trả về hoặc gán giá trị ứng với phần tử kiểu object đƣợc chọn SelectedIndex Trả về hoặc gán giá trị chỉ mục ứng với phần tử đang chọn SelectionMode Xác định cách thức mà lựa chọn những phần tử trong CheckedListBox. CheckedItems Trả về tập phần tử đƣợc Check Bảng 4.19: Một số thuộc tính của CheckedListBox - Sự kiện: Sự kiện Mô tả SelectedIndexChanged Xảy ra khi chỉ mục chọn thay đổi SelectedValueChanged Xảy ra khi giá trị của phần tử thay đổi ItemChecked Xảy ra khi kích chuộtvào biểu tƣợng CheckBox của từng phần tử Bảng 4.20: Một số sự kiện của CheckedListBox Ví dụ 4.13: Điều khiển CheckedListBox Yêu cầu: - Tạo Form theo mẫu sau: Hình 4.28: Ví dụ về điều khiển CheckedListBox - Các điều khiển nhập m, n là các điều khiển TextBox - Khi chọn CheckBox ―ƢCLN‖: Hiển thị ƣớc số chung lớn nhất của 2 số đƣợc nhập trong các điều khiển TextBox - Khi chọn CheckBox ―BCNN‖: Hiển thị bội số chung nhỏ nhất của 2 số đƣợc nhập trong các điều khiển TextBox - Khi chọn CheckBox ―Số lớn nhất‖: Hiển thị số lớn nhất của 2 số đƣợc nhập trong các điều khiển TextBox Hướng dẫn thực hiện Bƣớc 1: Tạo Form và đặt tên là frmVidu4_13, thêm các điều khiển vào trong Form. 150
  36. Tập bài giảng Lập trình cơ bản STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_13 1 Form Text Làm việc với CheckedListbox CheckedListBox SelectionMode One 2 Name clbLuachon 3 Label Text Nhập n 4 Label Text Nhập m 5 Label Text Lựa chọn 6 Label Text Kết quả Multiline True 7 TextBox Name txtKetqua 8 TextBox Name txtN 9 TextBox Name txtM Bƣớc 2: Thêm các item vào trong điều khiển CheckedListBox, cách thực hiện giống với điều khiển ListBox. Bƣớc 3: Xây dựng hàm kiểm tra dữ liệu nhập vào TextBox và hàm tìm ƣớc chung lớn nhất int n,m;//Khai báo hai biến để nhận giá trị từ các TextBox bool Kiemtra() { bool ktn,ktm; ktn = int.TryParse(txtN.Text, out n); ktm = int.TryParse(txtM.Text, out m); return ktn && (n > 0)&&(m>0); } int ucln(int n, int m) { if (n % m == 0) return m; else return ucln(m, n % m); } Bƣớc 3: Viết mã lệnh cho sự kiện SelectedIndexChanged của điều khiển CheckedListBox. private void clbLuachon_SelectedIndexChanged(object sender, EventArgs e) { txtKetqua.Text = ""; if (clbLuachon.CheckedItems.Count > 0) { if (Kiemtra()) for (int i = 0; i < clbLuachon.CheckedItems.Count; i++) 151
  37. Tập bài giảng Lập trình cơ bản { int uc = ucln(n, m); if (clbLuachon.CheckedItems[i].ToString() == "UCLN") { txtKetqua.Text += "UCLN = " + uc.ToString() + "\r\n"; } else if (clbLuachon.CheckedItems[i].ToString() == "BCNN") { txtKetqua.Text += "BCNN = " + (n * m / uc).ToString()+"\r\n"; } else { int max = (n > m) ? n : m; txtKetqua.Text += "Số lớn nhất = " + max.ToString() + "\r\n"; } } else MessageBox.Show("Nhập n hoặc m không thỏa mãn"); } } 3. RadioButton - Công dụng: Khác với điều khiển CheckBox cho phép chọn nhiều tùy chọn trong danh sách tùy chọn thì điều khiển RadioButton chỉ cho phép chọn một trong danh sách các tùy chọn. - Thuộc tính: Thuộc tính Mô tả Text Thuộc tính này sử dụng để nhận hoặc gán chuỗi ký tự là tiêu đề của RadioButton Checked Là thuộc tính đƣợc sử dụng để xác định RadioButton đƣợc chọn Bảng 4.21: Một số thuộc tính của RadioButton - Sự kiện: Sự kiện Mô tả MouseClick Xảy ra khi kích chuột trên điều khiển RadioButton CheckedChanged Xảy ra khi kích chuột vào điều khiển RadioButton Click Xảy ra khi kích chuột vào điều khiển CheckBox Bảng 4.22: Một số sự kiện của RadioButton Ví dụ 4.14: Điều khiển RadioButton 152
  38. Tập bài giảng Lập trình cơ bản Yêu cầu: - Tạo Form theo mẫu sau: Hình 4.29: Ví dụ về điều khiển RadioButton - Khi chọn RadioButton ―Tính tổng chữ số của n‖: Hiển thị tổng các chữ số của n, giá trị đƣợc nhập trong điều khiển TextBox - Khi chọn RadioButton ―Tính 1 + 1/2 + 1/3+ + 1/n‖: Hiển thị tổng. - Nhãn: ―Nhập n‖ và nhãn đƣợc dùng để hiển thị kết quả. Hướng dẫn thực hiện Bƣớc 1: Tạo Form và đặt tên là frmVidu4_14, thêm các điều khiển vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_14 1 Form Text Điều khiển RadioButton Text Tính tổng chữ số của n 2 RadioButton Name rbTinhtongchuson Text Tính 1 + 1/2 + 1/3+ + 3 RadioButton 1/n Name rbTong Text Lựa chọn 4 Groupbox Name groupBox1 5 Label Text Nhập n: Text Kết quả 6 Label Name lblKetqua 7 TextBox Name txtN Bƣớc 2: Xây dựng hàm kiểm tra dữ liệu nhập vào TextBox int n; bool Kiemtra() { bool ktn; 153
  39. Tập bài giảng Lập trình cơ bản ktn = int.TryParse(txtN.Text, out n); return ktn&&(n>0); } Bƣớc 3: Viết mã lệnh cho sự kiện CheckedChanged cho các điều khiển RadioButton private void rbTinhtongchuson_CheckedChanged(object sender, EventArgs e) { if(rbTinhtongchuson.Checked) if (Kiemtra()) { int tong = 0, du; int tg = n; while (tg != 0) { du = tg % 10; tong += du; tg /= 10; } lbKetqua.Text = "Tổng các chữ số của "+ n.ToString() + " = " + tong.ToString(); } else MessageBox.Show("Nhập n không thỏa mãn"); } private void rbTong_CheckedChanged(object sender, EventArgs e) { if (rbTong.Checked) if (Kiemtra()) { float tong = 0; int i; for (i = 1; i <= n; i++) tong = tong + 1.0f / i; lbKetqua.Text = " Tổng = " + tong.ToString(); } else MessageBox.Show("Nhập n không thỏa mãn"); } 4.3.6. Điều khiển Button - Công dụng: để thực hiện một tác vụ nào đó khi kích chuột vào điều khiển - Thuộc tính: Thuộc tính Mô tả Text Thuộc tính này sử dụng để nhận hoặc gán chuỗi ký tự là tiêu đề của Button Image Chọn Image trong phần Resource để trình bày hình trên điều khiển Button. 154
  40. Tập bài giảng Lập trình cơ bản Bảng 4.23: Một số thuộc tính của Button - Sự kiện: Sự kiện Mô tả MouseClick Xảy ra khi kích chuột trên điều khiển Button Click Xảy ra khi kích chuộtvào điều khiển Button Bảng 4.24: Một số sự kiện của Button 4.4. Một số điều khiển đặc biệt 4.4.1 Nhóm điều khiển Menu 1. Điều khiển MenuStrip - Công dụng: tổ chức các phần tử (ToolStripMenuItem) theo cấu trúc cây và trình bày trên màn hình thành thanh menu để có thể lựa chọn, ngoài ra còn có các điều khiển con ToolStripComboBox (ComboBox), ToolStripSeparator (Gạch phân cách) và ToolStripTextBox (TextBox). - Thuộc tính: Thuộc tính Mô tả AllowItemReorder Thuộc tính này cho phép tùy chọn các phần tử bằng bàn phím khi bấm phím Alt TextDirection Thuộc tính này cho phép thay đổi hình thức trình bày trên menu là ngang (Horizontal) hoặc dọc (Vertical90 hoặc Vertical270) Items Thuộc tính này trả về danh sách các phần tử của MenuStrip Bảng 4.25: Một số thuộc tính của MenuStrip Hình 4.30: Ví dụ về điều khiển MenuStrip 155
  41. Tập bài giảng Lập trình cơ bản 2. Điều khiển ToolStripMenuItem - Công dụng: là một phần tử của MenuStrip, phần tử này có chức năng tƣơng tự nhƣ Button, nghĩa là cho phép kích chuột hoặc dùng phím để lựa chọn, từ đó thực hiện tác vụ tƣơng ứng. - Thuộc tính Thuộc tính Mô tả Image Hình ảnh xuất hiện bên cạnh chuỗi văn bản của đối tƣợng. Text Chuỗi hiển thị của đối tƣợng ShortcutKeyDisplayString Hiển thị dòng ký tự ứng với phím tắt ShortcutKeys Thuộc tính này quy định phím tắt để kích hoạt ToolStripMenuItem ShowShortcutKeys Cho phép hiển thị tổ hợp phím tắt hay không TooltipText Quy định dòng văn bản sẽ xuất hiện khi đƣa chuột qua điều khiển ToolStripMenuItem Bảng 4.26: Một số thuộc tính của ToolStripMenuItem - Sự kiện Thuộc tính Mô tả Click Sự kiện này xảy ra khi kích chuột vào đối tƣợng DoubleClick Sự kiện này xảy ra khi kích đúp chuột vào đối tƣợng Bảng 4.27: Một số sự kiện của ToolStripMenuItem Ví dụ 4.15: Ứng dung MDI Form và MenuStrip Yêu cầu: - Tạo Form theo mẫu sau: Hình 4.31: Giao diện ví dụ 4.15 - Thực hiện tạo Menu nhƣ hình 4.31 trong đó: o Khi click chọn ToolStripMenuItem―Đăng nhập‖ sẽ xuất hiện Form ―Đăng nhập‖ 156
  42. Tập bài giảng Lập trình cơ bản o Khi click chọnToolStripMenuItem ―Đăng ký‖ sẽ xuất hiện Form ―Đăng ký‖ o Khi click chọnToolStripMenuItem ―Thoát‖ sẽ đóng From Bƣớc 1: Tạo Form và đặt tên là frmVidu4_15, thêm các điều khiển vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_15 1 Form Text Điều khiển MenuStrip IsMdiContainer True 2 MenuStrip Name menuStrip1 Text Tài khoản 3 ToolStripMenuItem Name tàiKhoảnToolStripMenuItem tàiKhoảnToolStripMenuItem có ba ToolStripMenuItem con: Text Đăng nhập 4 ToolStripMenuItem Name đăngNhậpToolStripMenuItem ShortcutKeys Ctrl+L Text Đăng ký 5 ToolStripMenuItem Name đăngKýToolStripMenuItem ShortcutKeys Ctrl+R Text Thoát 6 ToolStripMenuItem Name thoátToolStripMenuItem ShortcutKeys Ctrl+Shift+E Bƣớc 2: Tạo Form ―Đăng nhập‖ đặt tên là frmDangnhap và tạo Form ―Đăng ký‖ đặt tên là frmDangky nhƣ hình 4.31. (Hai Form này đƣợc thiết kế với mục đích minh họa cho việc viết mã lệnh sự kiện Click của các ToolStripMenuItem, không quan tâm tới mã lệnh của các Form này) Bƣớc 3: Viết mã lệnh cho sự kiện Click của các ToolStripMenuItem bằng cách kích chuột hai lần vào các điều khiển ToolStripMenuItem. private void đăngNhậpToolStripMenuItem_Click(object sender, EventArgs e) { foreach (Form frm in this.MdiChildren) frm.Close(); Form frmDangnhap = new frmDangnhap(); frmDangnhap.MdiParent = this; frmDangnhap.Show(); } 157
  43. Tập bài giảng Lập trình cơ bản private void đăngKýToolStripMenuItem_Click(object sender, EventArgs e) { foreach (Form frm in this.MdiChildren) frm.Close(); Form frmDangky = new frmDangky(); frmDangky.MdiParent = this; frmDangky.Show(); } private void thoátToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } 4.4.2. Điều khiển Container 1. Điều khiển GroupBox - Công dụng: là khung có hay không có tựa đề dùng để nhóm các điều khiển khác, hữu ích cho việc nhóm các điều khiển RadioButton thành một nhóm Thuộc tính: Thuộc tính Mô tả Dock Vị trí xuất hiện của điều khiển GroupBox trên Form Text Chuỗi xuất hiện nhƣ tiêu đề của GroupBox Enabled Nếu thuộc tính này là False thì tất cả các điều khiển trong điều khiển GroupBox sẽ bị vô hiệu hóa Visible Nếu thuộc tính này là False thì tất cả các điều khiển trong điều khiển GroupBox và GroupBox sẽ bị ẩn đi Bảng 4.28: Một số thuộc tính của GroupBox 158
  44. Tập bài giảng Lập trình cơ bản Hình 4.32: Ví dụ về điểu khiển GroupBox 2. Điều khiển TabControl - Công dụng: Chứa danh sách các đối tƣợng TabPage, cho phép thêm các điều khiển khác trong từng TabPage. - Thuộc tính Thuộc tính Mô tả Alignment Vị trí xuất hiện của Tab trên điều khiển TabControl ứng với Top, Bottom, Left, Right Appearance Hình thức xuất hiện của Tab trên điều khiển TabControl nhƣ Normal, Buttons, hay FlatButtons. Multiline Nếu giá trị là True thì cho phép sắp xếp danh sách Tab trên nhiều hàng TabPages Danh sách các TabPage trong điều khiển TabControl Bảng 4.29: Một số thuộc tính của TabControl 159
  45. Tập bài giảng Lập trình cơ bản Hình 4.33: Ví dụ về điều khiển TabControl 4.4.3. Điều khiển Dialog 1. Lớp MessageBox - Công dụng: hiển thị hộp thoại thông báo, tiêu đề cùng với các nút và biểu tƣợng khác nhau. Đối tƣợng lớp MessageBox không cần tạo, thay vào đó sử dụng phƣơng thức tĩnh Show để hiển thị hôp thoại nhƣ hình 4.28. Hình 4.34: Hộp thoại MessageBox - Một số dạng hiển thị hộp thoại MessageBox o Hiển thị mỗi nội dung thông báo: MessageBox.Show("Xin chào”); Hình 4.35: Hộp thoại MessageBox chỉ có nội dung o Hiển thị nội dung và tiêu đề thông báo: 160
  46. Tập bài giảng Lập trình cơ bản MessageBox.Show("Xin chào","Thông báo"); Hình 4.36: Hộp thoại MessageBox có thêm tiều đề o Hiển thị nội dung, tiêu đề và thêm các nút bấm khác MessageBox.Show("Xin chào","Thông báo",MessageBoxButtons.OKCancel); Hình 4.37: Hộp thoại MessageBox có thêm tùy chỉnh nút bấm o Hiển thị nội dung, tiêu đề, nút bấm và biểu tƣợng trong hộp thoại MessageBox.Show("Xin chào","Thông báo",MessageBoxButtons.OKCancel,MessageBoxIcon.InFormation); Hình 4.38: Hộp thoại MessageBox có thêm tùy chỉnh biểu tượng Để lựa chọn nút bấm, cần thêm 1 tham số kiểu enum là: MessageBoxButtons. Các loại nút có sẵn bao gồm: AbortRetryIgnore, OK, OKCancel, RetryCancel,YesNo, YesNoCancel. Để thêm vào icon thì cần thêm tham số kiểu enum là: MessageBoxIcon. 161
  47. Tập bài giảng Lập trình cơ bản Có nhiều loại nhƣng phổ biến là Warning (tam giác vàng có dấu chấm than), Error (hình tròn đỏ có chữ X), InFormation (hình tròn xanh lam có chữ i), Question (hình tròn lam có dấu chấm hỏi). - Sự kiện: để xử lý sự kiện trên MessageBox cần dùng một biến để lƣu giá trị trả về của phƣơng thức MessageBox.Show(). Biến đó có kiểu là DialogResult. Ví dụ: DialogResult dlr = MessageBox.Show("Bạn có thích lập trình không?", "Thông báo", MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question); Hình 4.39: Hộp thoạiMessageBox Đến lúc này chỉ cần xét giá trị của biến dlr với giá trị của MessageBox là các giá trị nằm trong DialogResult Enumeration nhƣ (DialogResult.Yes, DialogResult.Abort, ). Ví dụ: if (dlr == DialogResult.Yes) { MessageBox.Show("Bạn vừa click chọn nút Yes"); } else MessageBox.Show("Bạn không click chọn nút Yes"); Hình 4.40: Xuất hiện hộp thoại MessageBox khi click chọn nút Yes. 2. Điều khiển ColorDialog - Công dụng: trình bày hộp thoại với số màu nhất định cùng với điều khiển cho phép có thể định nghĩa màu tùy ý và màu trả về chính là màu đƣợc chọn trên hộp thoại 162
  48. Tập bài giảng Lập trình cơ bản - Thuộc tính Thuộc tính Mô tả AllowFullOpen Giá tri True cho phép định nghĩa màu AnyColor Giá trị True thì hộp thoại Color trình bày danh sách tất cả các màu cơ bản Color Màu mặc định chọn của điều khiển SolidColorOnly Giá trị True nếu chỉ cho phép chọn màu cơ bản Bảng 4.30: Một số thuộc tính của điều khiển ColorDialog Ví dụ 4.16: Điều khiển ColorDialog Yêu cầu: - Tạo Form theo mẫu: Hình 4.41: Giao diện ví dụ 4.16 - Khi kích chuột vào nút ―Chọn màu‖: thực hiện xuất hiện hộp thoại ColorDialog, cho phép chọn màu và thực hiện thay đổi màu chữ của nhãn ―Xin chào!‖ Hướng dẫn thực hiện Bƣớc 1: Tạo Form và đặt tên là frmVidu4_16, thêm các điều khiển vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_16 1 Form Text Điều khiển ColorDialog Name lblXinchao 2 Label Text Xin chào Name btChonmau 3 Button Text Chọn màu 4 ColorDialog Name cdlMau Bƣớc 2: Viết mã lệnh cho sự kiện nút ―Chọn màu‖ để mở hộp thoại ColorDialog 163
  49. Tập bài giảng Lập trình cơ bản private void btChonmau_Click(object sender, EventArgs e) { if (cdlMau.ShowDialog() == DialogResult.OK)//Mở hộp thoại ColorDialog { lblXinchao.ForeColor = cdlMau.Color;//Lấy màu từ hộp loại ColorDialog } } 2. Điều khiển SaveFileDialog - Công dụng: cho phép chọn thƣ mục để lƣu tập tin mới hoặc ghi đè lên tập tin đã có. - Thuộc tính Thuộc tính Mô tả AddExtension Giá tri True cho phép thêm vào tên mở rộng CheckFileExists Giá trị True sẽ xuất hiện hộp thoại với chuỗi cảnh báo nếu chọn tập tin không tồn tại ChekcPathExists Giá trị True sẽ kiểm tra đƣờng dẫn có hợp lệ hay không trƣớc khi trả về CreatePrompt Cửa sổ cảnh báo xuất hiện nếu tập tin chuẩn bị ghi ra chƣa tồn tại FileName Gán hay trả về tên tập tin chọn Filter Khai báo chuỗi lọc các loại tập tin. Chẳng hạn, khai báo txt files (*.txt)|*.txt|All files (*.*)|*.* InitialDirectory Thƣ mục sẽ chọn khi hộp thoại kích hoạt. Nếu không cung cấp giá trị cho thuộc tính này thì ổ đĩa mặc định sẽ chọn Title Tiều đề của hộp thoại Bảng 4.31: Một số thuộc tính của điều khiển SaveFileDialog Ví dụ 4.17: Điều khiển SaveFileDialog Yêu cầu: - Tạo Form theo mẫu: 164
  50. Tập bài giảng Lập trình cơ bản Hình 4.42: Giao diện ví dụ 4.17 và tập tin songuyen.txt được tạo ra - Khi kích chuột vào nút ―Lƣu tập tin‖: thực hiện mở hộp thoại SaveFileDialog và lƣu vào tập tin songuyen.txt các số nguyên từ 0 đến 19. Bƣớc 1: Tạo Form và đặt tên là frmVidu4_17, thêm các điều khiển vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_17 1 Form Text Điều khiển SaveFileDialog Name btLuutaptin 2 Button Text Lƣu tập tin Name sfdTaptin 3 SaveFileDialog Filter txt files (*.txt)|*.txt|All files (*.*)|*.* Bƣớc 2: Viết mã lệnh cho sự kiện nút ―Lƣu tập tin‖ để mở hộp thoại SaveFileDialog private void btLuutaptin_Click(object sender, EventArgs e) { if (sfdTaptin.ShowDialog() == DialogResult.OK) { StreamWriter myFile = File.CreateText(sfdTaptin.FileName); for (int i = 0; i < 20; i++) { myFile.WriteLine("{0} ", i); } myFile.Close(); } 165
  51. Tập bài giảng Lập trình cơ bản } 3. Điều khiển OpenFileDialog - Công dụng: cho phép chọn các tập tin trong một thƣ mục nào đó - Thuộc tính Thuộc tính Mô tả AddExtension Giá tri True cho phép thêm vào tên mở rộng CheckFileExists Giá trị True sẽ xuất hiện hộp thoại với chuỗi cảnh báo nếu chọn tập tin không tồn tại ChekcPathExists Giá trị True sẽ kiểm tra đƣờng dẫn có hợp lệ hay không trƣớc khi trả về CreatePrompt Cửa sổ cảnh báo xuất hiện nếu tập tin chuẩn bị ghi ra chƣa tồn tại FileName Gán hay trả về tên tập tin chọn Filter Khai báo chuỗi lọc các loại tập tin. Chẳng hạn, khai báo txt files (*.txt)|*.txt|All files (*.*)|*.* InitialDirectory Thƣ mục sẽ chọn khi hộp thoại kích hoạt. Nếu không cung cấp giá trị cho thuộc tính này thì ổ đĩa mặc định sẽ chọn MultiSelect Giá trị True cho phép chọn nhiều tập tin Bảng 4.32: Một số thuộc tính của điều khiển OpenFileDialog Ví dụ 4.18: Điều khiển OpenFileDialog Yêu cầu: - Tạo Form theo mẫu: Hình 4.43: Giao diện ví dụ 4.18 - Khi kích chuột vào nút ―Mở tập tin‖: thực hiện mở hộp thoại OpenFileDialog và đọc tập tin songuyen.txt đƣợc tạo ra trong ví dụ 4.17 và hiển thị các số nguyên đó sử dụng điều khiển ListBox. Hướng dẫn thực hiện 166
  52. Tập bài giảng Lập trình cơ bản Bƣớc 1: Tạo Form và đặt tên là frmVidu4_18, thêm các điều khiển vào trong Form. STT Đối tƣợng Thuộc tính Giá trị Name frmVidu4_18 1 Form Text Điều khiển OpenFileDialog Name btMotaptin 2 Button Text Mở tập tin Name ofdTaptin Filter txt files (*.txt)|*.txt|All files 3 OpenFileDialog (*.*)|*.* FileName Bƣớc 2: Viết mã lệnh cho sự kiện nút ―Mở tập tin‖ để mở hộp thoại OpenFileDialog private void btMotaptin_Click(object sender, EventArgs e) { if (ofdTaptin.ShowDialog() == DialogResult.OK) { string buffer; StreamReader myFile = File.OpenText(ofdTaptin.FileName); while ((buffer = myFile.ReadLine()) != null) { lbDayso.Items.Add(buffer); } myFile.Close(); } } Bài tập Bài 4.1 Lập chƣơng trình thực hiện giải bất phƣơng trình trên Form theo mẫu: Hình 4.44: Giải bất phương trình Yêu cầu: 167
  53. Tập bài giảng Lập trình cơ bản - Nhãn Bất phƣơng trình ax+b>0: Font Time New Roman, size 14, màu đen, căn giữa Form - Các nhãn: nhập a, nhập b, kết quả: Font Time New Roman, size 12, màu đen. - Các TextBox dùng để nhập a, b. - Các Button dùng để thực hiện giải bất phƣơng trình Lập trình cho các sự kiện: - Khi Load Form: các textbox để trống,nhãn để hiển thị kết quả ẩn, nút giải phƣơng trình vô hiệu hóa. - Khi kích chuột vào nút ―Tiếp tục‖ cho phép xóa dữ liệu cũ,sẵn sàng giải bất phƣơng trình mới. - Khi kích chuột vào nút ―Giải bất phƣơng trình‖: thực hiện giải bất phƣơng trình ax+b>0, kết quả hiện thị lên nhãn kết quả. Hướng dẫn thực hiện: Viết mã lệnh cho các sự kiện: - Viết mã lệnh sự kiện Load Form private void Form5_Load(object sender, EventArgs e) { txt_a.ResetText(); txt_b.ResetText(); lb_ketqua.Visible= false; txt_a.Focus(); } - Viết mã lệnh cho hàm kiểm tra chuỗi rỗng bool kiemtra(string s) { if (string.IsNullOrWhiteSpace(s)) return true; return false; } - Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào. bool kiemtra_dulieu() { double so; if (kiemtra(txt_a.Text)||kiemtra(txt_b.Text)) return return false; if (!double.TryParse(txt_a.Text, out so)) return false; if (!double.TryParse(txt_b.Text, out so)) return false; return true; } - Viết mã lệnh cho sự kiện kích chuột vào nút kiểm tra private void bt_Tieptuc_Click(object sender, EventArgs e) { txt_a.ResetText(); 168
  54. Tập bài giảng Lập trình cơ bản txt_b.ResetText(); lb_ketqua.Visible= false; txt_a.Focus(); } - Viết mã lệnh cho sự kiện kích chuột vào nút giải phƣơng trình private void bt_giaipt_Click(object sender, EventArgs e) { If(kiemtra_dulieu()){ if (a == 0) { if (b 0) lb_ketqua.Text = "Bất phương trình có nghiệm x > " + (- b/a).ToString(); else lb_ketqua.Text = "Bất phương trình có nghiệm x < " + (- b / a).ToString(); } } Bƣớc 6. Kết quả chạy chƣơng trình Hình 4.45: Kết quả chạy chương trình giải bất phương trình Bài 4.2 Lập chƣơng trình giải phƣơng trình bậc 2: ax2 + bx+ c= 0 khi ngƣời sử dụng đã nhập đủ các hệ số hợp lệ nhƣ hình sau: 169
  55. Tập bài giảng Lập trình cơ bản HInh 4.46: Giao diện ví dụ bài tập 2 Bài 4.3 Sử dụng các điều khiển: Combobox và Button lập chƣơng trình xây dựng từ điển Anh – Việt đơn giản, trong đó cho phép: - Thêm các từ tiếng Anh và nghĩa tiếng Việt của từ đó; - Xóa một từ tiếng Anh đƣợc chọn và nghĩa tiếng Việt tƣơng ứng; - Xóa toàn bộ danh sách từ; - Thực hiện tra cứu từ (khi chọn một từ tiếng Anh sẽ xuất hiện nghĩa tiếng Việt tƣơng ứng của từ tiếng Anh đó) nhƣ hình sau: Hình 4.47: Ứng dụng từ điển đơn giản Bài 4.4 Lập chƣơng trình tạo menu File có 2 mục chọn con là New và Exit sao cho khi chọn mục Exit thì kết thúc chƣơng trình và mỗi lần chọn mục New chƣơng trình sẽ in ra một bộ hoán vị của các số từ 1 đến 16và đƣợc hiển thị nhƣ hình sau: HÌnh 4.48: Giao diện bài tập Xếp Ô 170
  56. Tập bài giảng Lập trình cơ bản Bài 4.5 Lập chƣơng trình sử dụng các điều khiển: RichTextBox, TextBox, Button cho phép nhập các ký từ vào RichTextBox. Nếu nhấn một ký tự là chữ cái thì ký tự đó trong ―bảng chữ cái‖ chuyển sang màu đỏ, khi thả phím ra thì màu chữ trở lại màu đen. Nếu kích chuột vào nút ―Đếm số‖ sẽ đếm số chữ số khác nhau và hiển thị nhƣ hình sau: Hình 4.49: Giao diện bài tập Bàn phím ký tự Bài 4.6 Lập chƣơng trình thực hiện các yêu cầu sau: Hình 4.50: Giao diện ví dụ Lucky Seven 1. Thiết kế Form nhƣ hình trên, khi chƣơng trình vừa bắt đầu thì 3 label sẽ hiển thị ba số 7, máy tính có 100 đồng và ngƣời chơi có 100 đồng. 2. Khi kích vào nút ―Quay số‖: Luật chơi: Mỗi lần quay số, ngƣời chơi trả trƣớc 30 đồng, tƣơng ứng là máy sẽ đƣợc cộng thêm 30 đồng. Và nếu ngƣời chơi có số tiền ít hơn 30 đồng thì sẽ không đƣợc phép chơi tiếp. Nếu mỗi lần quay đƣợc số 7, ngƣời chơi sẽ đƣợc thƣởng nhƣ sau: - Nếu ô đầu tiên là số 7 (random từ 0 đến 8), đƣợc thƣởng 100 đồng + 50% số tiền của máy. - Nếu ô số 2 là số 7(random từ 0 đến 9), ngƣời chơi đƣợc thƣởng 30 đồng + 50% tiền của máy. 171
  57. Tập bài giảng Lập trình cơ bản - Nếu ô số 3 là số 7(random từ 0 đến 10), ngƣời chơi đƣợc thƣởng 10 đồng;(số tiền ngƣời chơi sẽ đƣợc cộng dồn nếu cả 3 ô cùng là số 7, tiền máy sẽ giảm đi phần trăm tƣơng ứng). 3. Khi kích vào nút ―Game mới‖: Reset lại các label và các textbox tƣơng ứng. 4. Khi kích vào nút ―Kết thúc‖: thực hiện đóng chƣơng trình. Bài 7 Viết một chƣơng trình thực hiện các yêu cầu sau: 1. Thiết kế Formtheo mẫu Hình 4.51: Bài tập mảng một chiều Yêu cầu: - Nhãn một số thao tác trên mảng một chiều: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 14, căn giữa Form. - Nhãn nhập kích thƣớc mảng, dãy vừa nhập là, kết quả, điều kiện 1, điều kiện 2: Font Time New Roman, chữ thƣờng, cỡ chữ 11 - Đối tƣợng ô để nhập kích thƣớc mảng, nhập giá trị, điều kiện 1, điều kiện 2, hiển thị dãy vừa nhập, hiển thị kết quả là các Textbox Font Time New Roman, chữ thƣờng, cỡ chữ 14. - Các điều khiển ―Thanh lọc‖, ―Bổ sung‖, ―Loại bỏ‖, ―Tìm kiếm‖, ―Thoát‖ là các button. - Đối tƣợng điều kiện là một GroupBox. 2. Lập trình cho các nút chức năng: - Khi Load Form: + Các textbox để nhập giá trị, hiển thị dãy, kết quả vô hiệu hóa +Group điều kiện ẩn 172
  58. Tập bài giảng Lập trình cơ bản + Các nút ―Thanh lọc‖, ―Bổ sung‖, ―Loại bỏ‖, ―Tìm kiếm‖ vô hiệu hóa. + Textbox để nhập kích thƣớc mảng để trống, con trỏ đặt tại ô đó. - Khi nhập một giá trị vào textbox tƣơng ứng với nhãn nhập kích thƣớc mảng rồi nhấn phím Enter thì thực hiện kiểm tra xem dữ liệu nhập vào có hợp lệ không? (giá trị nhập vào là số nguyên dƣơng). Nếu dữ liệu nhập vào không đúng thì hiện lên hộp thoại thông báo và cho phép nhập lại. Ngƣợc lại thì textbox tƣơng ứng với nhãn nhập giá trị sáng lên cho phép hoạt động và con trỏ đặt tại ô đó. - Khi nhập giá trị vào textbox tƣơng ứng với nhãn nhập giá trị rồi nhấn phím Enter thì hiển thị giá trị đó ra textbox tƣơng ứng với nhãn dãy vừa nhập, sau đó textbox này rỗng và con trỏ lại đặt tại ô đó để nhập giá trị tiếp theo. Lặp lại quá trình này cho tới khi nhập xong giá trị cho các phần tử của mảng. Sau khi đã nhập xong dãy thì các nút ―Thanh lọc‖, ―Bổ sung‖, ―Loại bỏ‖, ―Tìm kiếm‖ sáng lên cho phép hoạt động, các textbox tƣơng ứng với nhãn nhập kích thƣớc mảng, nhập giá trị vô hiệu hóa. - Khi kích vào nút ―Thanh lọc‖: thực hiện loại khỏi dãy những phần tử giống nhau (chỉ giữ lại một) và hiển thị dãy sau khi thanh lọc lên textbox tƣơng ứng với dãy kết quả. - Khi kích vào nút ―Bổ sung‖ thì: + Groupbox điều kiện sáng lên + Label điều kiện 2 và textbox tƣơng ứng với nhãn này ẩn + Thuộc tính Text của Label điều kiện 1 là ―Nhập vị trí cần bổ sung‖ + Textbox tƣơng ứng với nhãn điều kiện 1 để trống và con trỏ đặt tại đó - Khi nhập một giá trị vào textbox tƣơng ứng với nhãn điều kiện một thì thực hiện kiểm tra xem dữ liệu có hợp lệ không? (giá trị nhập vào phải là số nguyên dƣơng). Nếu không hợp lệ thì hiện lên hộp thoại thông báo và yêu cầu nhập lại, ngƣợc lại thì Label điều kiện 2 hiện lên, thuộc tính Text của nhãn đó là ―Nhập giá trị cần bổ sung‖, textbox tƣơng ứng với nhãn điều kiện 2 cũng hiện lên và để trống, con trỏ đặt tại textbox đó. - Khi nhập một giá trị vào textbox tƣơng ứng với nhãn điều kiện 2 rồi nhấn phím Enter thì thực hiện kiểm tra xem dữ liệu nhập vào có hợp lệ không? (giá trị nhập vào là số nguyên). Nếu dữ liệu không hợp lệ thì hiện lên hộp thoại thông báo và cho phép nhập lại, ngƣợc lại thì thực hiện bổ sung giá trị x ( x là giá trị nhập ở textbox tƣơng ứng với nhãn điều kiện 2) vào vị trí thứ k (với k là giá trị nhập ở texthox tƣơng ứng với nhãn điều kiện 1), sau đó hiển thị dãy kết quả ra textbox tƣơng ứng với nhãn kết quả. - Khi kích vào nút loại bỏ thì Label điều kiện 1 và textbox tƣơng ứng với nó hiện lên, Label điều kiện 2 và textbox tƣơng ứng với nó ẩn. Thuộc tính text của nhãn 173
  59. Tập bài giảng Lập trình cơ bản điều kiện 1 là ―Nhập vị trí cần loại bỏ‖, textbox tƣơng ứng với nhãn này để trống và con trỏ đặt tại ô đó cho phép nhập vào một giá trị. - Khi nhập một giá trị vào textbox tƣơng ứng với nhãn điều kiện rồi nhấn phím Enter thì thực hiện kiểm tra xem giá trị nhập vào có hợp lệ không? (giá trị nhập vào là số nguyên dƣơng). Nếu dữ liệu không hợp lệ thì hiện lên hộp thoại thông báo và cho phép nhập lại, ngƣợc lại thực hiện xóa giá trị phần tử thứ k ra khỏi dãy (với k là giá trị của texbox tƣơng ứng với nhãn điều kiện 1) và hiển thị lại dãy ra textbox tƣơng ứng với nhãn kết quả. - Khi kích chuột vào nút ―Tìm kiếm‖: Label điều kiện 2 và textbox tƣơng ứng với nó ẩn, Label điều kiện 1 và nhãn tƣơng ứng với nó hiện lên, thuộc tính text của nhãn điều kiện 2 là ― Nhập giá trị cần tìm kiếm‖ và textbox tƣơng ứng với nhãn này để trống; con trỏ đặt ở đó chờ nhập vào một giá trị. - Khi nhập một giá trị vào textbox tƣơng ứng với nhãn điều kiện 2 rồi nhấn phím Enter thì thực hiện kiểm tra xem giá trị nhập vào có hợp lệ không? (giá trị nhập vào phải là số nguyên). Nếu không hợp lệ thì hiện lên hộp thoại thông báo và cho phép nhập lại, ngƣợc lại thì hiện tìm xem x có trong dãy không (với x là giá trị của textbox tƣơng ứng với nhãn điều kiện 1), kết quả hiện thị lên textbox tƣơng ứng với nhãn kết quả. - Khi kích vào nút ―Thoát‖ thì thực hiện thoát khỏi chƣơng trình. Hướng dẫn thực hiện 1. Thiết kế Form như yêu cầu đề bài 2. Phân tích yêu cầu Theo yêu cầu của bài toán thì phải có một Form chứa: - Các đối tƣợng có nội dung ―MỘT SỐ THAO TÁC TRÊN MẢNG MỘT CHIỀU‖,‖Nhập kích thƣớc mảng‖, ―Nhập giá trị‖, ―Dãy vừa nhập‖, ―Kết quả‖, ―Điều kiện 1‖, ―Điều kiện 2‖ là các Label. - Các đối tƣợng ô để nhập kích thƣớc mảng, giá trị, điều kiện 1, điều kiện 2 và để hiển thị dãy vừa nhập, kết quả là các Textbox. - Các nút ―Thanh lọc‖, ―Bổ sung‖, ―Loại bỏ‖, ―Tìm kiếm‖, ―Thoát‖ là các Button. - Đối tƣợng điều kiện là GroupBox. 3. Các bước thực hiện Nhƣ vậy, để thực hiện công việc thiết kế Form nhƣ yêu cầu bài toán, ngƣời lập trình thực hiện các bƣớc sau: Bƣớc 1. Mở C# Bƣớc 2. Tạo Form mới 174
  60. Tập bài giảng Lập trình cơ bản Bƣớc 3. Thiết kế Form theo mẫu và gắn các điều khiển - Để tạo điểu khiển MỘT SỐ THAO TÁC TRÊN MẢNG MỘT CHIỀU theo yêu cầu cần thực hiện: + Kéo điều khiển Label từ cửa sổ Toolbox + Kích phải chuột vào Label chọn Properties và thiết lập các thuộc tính cho Label nhƣ sau: Text: MỘT SỐ THAO TÁC TRÊN MẢNG MỘT CHIỀU Font: Time New Roman Size: 14 Font style: True Trên menu chọn Format/Center in Form/Horizontally để căn giữa. Thực hiện thao tác tƣơng tự với Label nhập kích thƣớc mảng, nhập giá trị, dãy vừa nhập, kết quả, điều kiện 1, điều kiện 2. - Để tạo điều khiển textbox tƣơng ứng với nhãn nhập kích thƣớc mảng theo yêu cầu cần thực hiện: + Kéo điểu khiển Textbox từ cửa sổ Toolbox vào Form. + Kích phải chuột vào Textbox chọn Properties và thiết lập các thuộc tính cho Textbox nhƣ sau: Name: txt_n Font: Time New Roman Size: 11 Thực hiện tƣơng tự với các textbox tƣơng ứng với nhãn nhập giá trị, hiển thị, điều kiện 1, điều kiện 2. - Để tạo GroupBox điều kiện theo yêu cầu cần thực hiện nhƣ sau: + Kéo điều khiển GroupBox từ cửa sổ Toolbox vào Form. + Kích phải chuột vào GroupBox chọn Properties và thiết lập các thuộc tính cho GroupBox nhƣ sau: Text: Điều kiện Font: Time New Roman Size: 11 - Để tạo điều khiển Button thanh lọc theo yêu cầu cần thực hiện nhƣ sau: + Kéo điều khiển Button từ cửa sổ Toolbox vào Form. + Kích phải chuột vào Button và thiết lập các thuộc tính cho Button này: Name: bt_thanhloc Text: Thanh lọc Font: Time New Roman 175
  61. Tập bài giảng Lập trình cơ bản Size: 11 Thực hiện tƣơng tự với các Button: Bổ sung, loại bỏ, tìm kiếm và thoát. Bƣớc 4. Kết quả thiết kế Hình 4.52: Kết quả thiết kế Form bài tập mảng một chiều Bƣớc 5. Viết mã lệnh cho các sự kiện - Viết mã lệnh khai báo mảng số nguyên, biến nguyên n, biến spt để đếm số phần tử nhập vào; các biến kt_loaibo, kt_bosung,kt_timkiem để đánh dấu sự kiện kích chuột vào các nút tƣơng ứng. int[] A = new int [100]; int n, spt = 0; bool kt_loaibo = false, kt_bs = false, kt_timkiem = false; - Viết mã lệnh cho sự kiện Load Form private void Form1_Load(object sender, EventArgs e) { group_dieukien.Visible = false; txt_giatri.Enabled = false; txt_hienthi.Enabled = false; txt_ketqua.Enabled = false; txt_ketqua.ResetText(); vohieuhoa(false); txt_n.ResetText(); txt_n.Focus(); } - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn nhập kích thƣớc mảng private void txt_n_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) if (kiemtra_dulieu()) { txt_giatri.Enabled = true; txt_giatri.Focus(); } else { MessageBox.Show("Nhập sai giá trị n"); txt_n.Focus(); } 176
  62. Tập bài giảng Lập trình cơ bản } - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn giá trị private void txt_giatri_KeyUp(object sender, KeyEventArgs e) { bool kt; if (e.KeyCode == Keys.Enter) do { kt= int.TryParse(txt_giatri.Text, out A[spt]); if (kt) { txt_hienthi.Text += A[spt].ToString() + " "; spt++; txt_giatri.ResetText(); txt_giatri.Focus(); } if (spt == n) { MessageBox.Show("Nhập xong dãy", "Thông báo"); vohieuhoa(true); txt_giatri.Enabled = false; txt_n.Enabled = false; } }while (!kt); } - Viết mã lệnh cho sự kiện kích chuột vào nút thanh lọc private void bt_thanhloc_Click(object sender, EventArgs e) { int i, j; txt_ketqua.ResetText(); i = 0; while (i < n) { j = i + 1; while (j<n) if (A[i] == A[j]) { for (int k = j; k < n - 1; k++) A[k] = A[k + 1]; n ; } else j++; i++; } for (i = 0; i < n; i++) txt_ketqua.Text += A[i].ToString() + " "; } - Viết mã lệnh cho sự kiện kích chuột vào nút bổ sung private void bt_bosung_Click(object sender, EventArgs e) { kt_bs = true; txt_ketqua.ResetText(); group_dieukien.Visible = true; lb_dieukien2.Visible = false; txt_dieukien2.Visible = false; lb_dieukien1.Text = "Nhập vị trí cần bổ sung"; txt_dieukien1.TabIndex = 1; 177
  63. Tập bài giảng Lập trình cơ bản txt_dieukien1.Focus(); txt_dieukien1.ResetText(); } - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn điều kiện 1 private void txt_dieukien1_KeyUp(object sender, KeyEventArgs e) { bool kt; int k; if (kt_bosung == true) { if (e.KeyCode == Keys.Enter) { if (kiemtra(txt_dieukien1.Text)) { MessageBox.Show("Bạn chưa nhập vị trí k"); txt_dieukien1.Focus(); } else { kt = int.TryParse(txt_dieukien1.Text, out k); if (!kt || k n) MessageBox.Show("Không có vị trí thứ k"); else { group_dieukien.Visible = true; lb_dieukien2.Visible = true; lb_dieukien2.Text = "Nhâp giá trị cần bổ sung"; txt_dieukien2.Visible = true; txt_dieukien2.TabIndex = 1; txt_dieukien2.Focus(); kt_bosung = false; } } } } else if (kt_timkiem == true) { int x; if (e.KeyCode == Keys.Enter) { if (kiemtra(txt_dieukien1.Text)) { MessageBox.Show("Bạn chưa nhập giá trị càn tìm kiếm"); txt_dieukien1.Focus(); } else { kt = int.TryParse(txt_dieukien1.Text, out x); if (!kt) MessageBox.Show("Giá trị cần tìm kiếm không hợp lệ"); else 178
  64. Tập bài giảng Lập trình cơ bản { int i = 0; while (i n) MessageBox.Show("Vị trí thứ k không hợp lệ"); else { for (int i = k-1; i < n; i++) A[i] = A[i + 1]; n ; for (int i = 0; i < n; i++) txt_ketqua.Text+= A[i].ToString(); kt_loaibo = false; } } } } } - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn điều kiện 2 private void txt_dieukien2_KeyUp(object sender, KeyEventArgs e) { bool kt; int x; if (e.KeyCode == Keys.Enter) { if (kiemtra(txt_dieukien2.Text)) { 179
  65. Tập bài giảng Lập trình cơ bản MessageBox.Show("Bạn chưa nhập giá trị cần bổ sung"); txt_dieukien2.Focus(); } else { kt = int.TryParse(txt_dieukien2.Text, out x); if (!kt) MessageBox.Show("Giá trị nhập vào không hợp lệ"); else { int k = int.Parse(txt_dieukien1.Text); for (int i = n; i >=k; i ) A[i] = A[i - 1]; A[k-1] = x; n++; txt_ketqua.ResetText(); for (int i = 0; i < n; i++) txt_ketqua.Text += A[i].ToString() + " "; } } } } - Viết mã lệnh cho sự kiện kích chuột vào nút loại bỏ private void bt_loaibo_Click(object sender, EventArgs e) { kt_loaibo = true; group_dieukien.Visible = true; lb_dieukien2.Visible = false; txt_dieukien2.Visible = false; lb_dieukien1.Visible = true; txt_dieukien1.Visible = true; lb_dieukien1.Text = "Nhập vị trí cần loại bỏ"; txt_dieukien1.ResetText(); txt_dieukien1.TabIndex = 1; txt_dieukien1.Focus(); } - Viết mã lệnh cho sự kiện kích chuột vào nút tìm kiếm private void bt_timkiem_Click(object sender, EventArgs e) { kt_timkiem = true; group_dieukien.Visible = true; lb_dieukien1.Visible = true; lb_dieukien1.Text = "Nhập giá trị cần tìm kiếm"; txt_ketqua.ResetText(); txt_dieukien2.Visible = false; lb_dieukien2.Visible = false; 180
  66. Tập bài giảng Lập trình cơ bản txt_dieukien1.Visible = true; txt_dieukien1.TabIndex = 1; txt_dieukien1.Focus(); } - Viết mã lệnh cho hàm kiểm tra chuỗi rỗng bool kiemtra(string s) { if (string.IsNullOrWhiteSpace(s)) return true; else return false; } - Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào bool kiemtra_dulieu() { bool kt; if (kiemtra(txt_n.Text)) return false; kt = int.TryParse(txt_n.Text, out n); return kt && n > 0; } - Viết mã lệnh cho hàm vô hiệu hóa các nút private void vohieuhoa(bool gt) { bt_thanhloc.Enabled = gt; bt_loaibo.Enabled = gt; bt_bosung.Enabled = gt; bt_timkiem.Enabled = gt; } - Viết mã lệnh cho sự kiện kích chuột vào nút thoát private void bt_thoat_Click(object sender, EventArgs e) { this.Close(); } Bƣớc 6. Một số kết quả khi chạy chƣơng trình 181
  67. Tập bài giảng Lập trình cơ bản Hình4.53:Kết quả chạy chương trình khi kích vào nút bổ sung Hình 4.54: Kết quả chạy chương trình khi kích vào nút loại bỏ 182
  68. Tập bài giảng Lập trình cơ bản Hình 4.55: Kết quả chạy chương trình khi kích vào nút tìm kiếm Bài 4.8 Tạo một ứng dụng Windows Form thực hiện các công việc sau: 1. Nhập dãy A gồm n số nguyên (n nguyên dƣơng). 2. Hiển thị dãy A. 3. Kiểm tra xem dãy có lập thành cấp số nhân hay không? 4. Liệt kê các số nguyên tố có trong dãy. 5. Đƣa ra phần tử xuất hiện nhiều nhất trong dãy A. 6. Kiểm tra xem dãy có đan dấu không? Bài 4.9 Tạo một ứng dụng Windows Forms thực hiện các công việc sau: 1. Nhập dãy A gồm n số thực (n nguyên dƣơng). 2. Hiển thị dãy A. 3. Xóa phần tử cuối cùng trong dãy có giá trị bằng x (x là số thực). 4. Sắp xếp dãy tăng dần. Bài 4.10 Viết một chƣơng trình thực hiện các yêu cầu sau: 1. Thiết kế Form theo mẫu 183
  69. Tập bài giảng Lập trình cơ bản Hình 4.56: Bài tập về mảng hai chiều Yêu cầu: - Nhãn bài tập về mảng hai chiều: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 14, căn giữa Form. - Nhãn nhập số hàng, nhập số cột, nhập giá trị: Font Time New Roman, chữ thƣờng, cỡ chữ 11. - Điều khiển để nhập số nguyên dƣơng n, m và nhập giá trị từng phần tử của ma trận là các Textbox. - Điều khiển để hiển thị ma trận và kết quả là các RichTextBox. - Các điều khiển ―Tìm giá trị lớn nhất‖, ―Tính tổng các số lẻ‖, ―Đếm các số chia hết cho 3 và 7‖, ― Tính tổng từng hàng‖, ― Liệt kê các số nguyên tố‖, ―Thoát‖là các Button. - Đối tƣợng ―Ma trận vừa nhập‖, ―Kết quả‖ là cá GroupBox. 2. Lập trình thực hiện các công việc: - Khi Load Form: + Textbox tƣơng ứng với nhãn nhập số hàng để trống, sáng lên và con trỏ đặt tại ô đó. + Textbox tƣơng ứng vỡi nhãn nhập số cột, nhập giá trị, các nút ―Tìm giá trị lớn nhất‖, ―Tính tổng các số lẻ‖, ―Đếm các số chia hết cho 3 và 7‖, ― Tính tổng từng hàng‖, ― Liệt kê các số nguyên tố‖, đối tƣơng GroupBox Ma trận vừa nhập và kết quả vô hiệu hóa. - Khi nhập một giá trị vào textbox tƣơng ứng với nhãn nhập số hàng rồi nhấn phím Enter thì thực hiện kiểm tra xem dữ liệu nhập vào có hợp lệ hay không? (giá trị nhập vào phải là số nguyên dƣơng). Nếu không hợp lệ thì hiện lên hộp thoại thông báo và yêu cầu nhập lại. Ngƣợc lại thì textbox tƣơng ứng với nhãn nhập số cột sáng lên, để trống và con trỏ đặt tại đó. 184
  70. Tập bài giảng Lập trình cơ bản - Khi nhập một giá trị vào textbox tƣơng ứng với nhãn nhập số cột rồi nhấn phím Enter thì thực hiện kiểm tra xem dữ liệu nhập vào có hợp lệ hay không? (giá trị nhập vào phải là số nguyên dƣơng). Nếu không hợp lệ thì hiện lên hộp thoại thông báo và yêu cầu nhập lại. Ngƣợc lại thì textbox tƣơng ứng với nhãn nhập giá trị sáng lên, để trống và con trỏ đặt tại đó. - Khi nhập giá trị vào textbox tƣơng ứng với nhãn nhập giá trị rồi nhấn phím Enter thì hiển thị giá trị đó ra richtextbox trong Group Ma trận vừa nhập, sau đó textbox này để trống và con trỏ lại đặt tại ô đó để nhập giá trị tiếp theo. Lặp lại quá trình này cho tới khi nhập xong giá trị cho các phần tử của ma trận thì đƣa ra thông báo đã nhập xong ma trận và đồng thời các nút ―Tìm giá trị lớn nhất‖, ―Tính tổng các số lẻ‖, ―Đếm các số chia hết cho 3 và 7‖, ― Tính tổng từng hàng‖, ― Liệt kê các số nguyên tố‖ sáng lên cho phép hoạt động, các textbox tƣơng ứng với nhập số hàng, nhập số cột, nhập giá trị vô hiệu hóa. - Khi kích vào nút ― Tìm giá trị lớn nhất‖: thực hiện tìm giá trị lớn nhất của ma trận và hiển thị kết quả ra richtextbox ở trong Groupbox kết quả. - Khi kích vào nút ― Tổng các số lẻ‖: thực hiện tính tổng các phần tử có giá trị lẻ của ma trận và hiển thị kết quả ra richtextbox ở trong Groupbox kết quả. - Khi kích vào nút ― Đếm các số chia hết cho 3 và 7‖: thực hiện đếm các phần tử có giá trị chia hết cho 3 và của ma trận và hiển thị kết quả ra richtextbox ở trong Groupbox kết quả. - Khi kích vào nút ― Tính tổng từng hàng‖: thực hiện tính tổng các phần tử trên từng hàng của ma trận và hiển thị kết quả ra richtextbox ở trong Groupbox kết quả. - Khi kích vào nút ― Liệt kê các số nguyên tố‖: Hiển thị ra richtextbox ở trong Groupbox các số nguyên tố có trong ma trận. - Khi kích vào nút ― Thoát‖: thực hiện dừng chƣơng trình. Hướng dẫn thực hiện 1. Thiết kế Form như yêu cầu đề bài 2. Phân tích yêu cầu Theo yêu cầu của bài toán thì phải có một Form chứa: - Các đối tƣợng có nội dung ―BÀI TẬP VỀ MẢNG HAI CHIỀU‖,‖Nhập số hàng‖, ―Nhập số cột‖, ‖Nhập giá trị‖ là các Label. - Đối tƣợng ô để nhập số hàng, nhập số cột và nhập giá trị là các Textbox. - Đối tƣợng ma trận vừa nhập, kết quả là các GroupBox. - Điều khiển để hiển thị ma trận vừa nhập và kết quả là các Richtextbox. 185
  71. Tập bài giảng Lập trình cơ bản - Các nút ―Tìm giá trị lớn nhất‖, ―Tính tổng các số lẻ‖, ―Đếm các số chia hết cho 3 và 7‖, ― Tính tổng từng hàng‖, ― Liệt kê các số nguyên tố‖, ―Thoát‖là các Button. 3. Hướng dẫn thực hiện Nhƣ vậy, để thực hiện công việc thiết kế Form nhƣ yêu cầu bài toán, ngƣời lập trình thực hiện các bƣớc sau: Bƣớc 1. Mở C# Bƣớc 2. Tạo Form mới Trên thanh menu, chọn File/New/Project.Trên màn hình xuất hiện cửa sổ New Project, chọn ứng dụng Windows Form Appication, sau đó nhập tên của Project vào ô Name, kích vào Browse để chọn thƣ mục lƣu trữ Project, sau đó chọn OK. Bƣớc 3. Thiết kế Form theo mẫu và gắn các điều khiển Bƣớc 4. Kết quả thiết kế Form Hình 4.57: Kết quả thiết kế Form bài tập mẫu về mảng hai chiều Bƣớc 5. Viết mã lệnh cho các sự kiện - Viết mã lệnh khai báo ma trận và biến int[,] A= new int [100,100]; int n, m, spt=0, i=0,j=0; - Viết mã lệnh cho sự kiện Load Form private void Form1_Load(object sender, EventArgs e) { vohieuhoa(false); txt_n.ResetText(); txt_n.TabIndex = 1; txt_n.Focus(); } - Viết mã lệnh cho hàm vô hiệu hóa các điều khiển khi Load Form private void vohieuhoa(bool gt) { txt_m.Enabled = gt; txt_giatri.Enabled = gt; 186
  72. Tập bài giảng Lập trình cơ bản bt_demchia21.Enabled = gt; bt_lietkeSNT.Enabled = gt; bt_timMax.Enabled = gt; bt_tongle.Enabled = gt; bt_tongtunghang.Enabled = gt; group_Hienthi.Enabled = gt; group_ketqua.Enabled = gt; } - Viết mã lệnh cho hàm kiểm tra xâu rỗng bool kiemtra(string s) { if (string.IsNullOrWhiteSpace(s)) return true; else return false; } - Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào bool kiemtra_dulieu(string s) { bool kt; if (kiemtra(s)) return false; kt = int.TryParse(s, out n); return kt &&n>0; } - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn nhập số hàng private void txt_n_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (kiemtra_dulieu(txt_n.Text)) { txt_m.Enabled = true; txt_m.TabIndex = 1; txt_m.Focus(); } else { MessageBox.Show("Bạn chưa nhập đúng n"); txt_n.Focus(); vohieuhoa(false); } } } - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn nhập số cột private void txt_m_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (kiemtra_dulieu(txt_m.Text)) 187
  73. Tập bài giảng Lập trình cơ bản { txt_giatri.Enabled = true; txt_giatri.TabIndex = 1; txt_giatri.Focus(); } else { MessageBox.Show("Bạn chưa nhập đúng m"); txt_giatri.TabIndex = 1; txt_m.Focus(); vohieuhoa(false); txt_m.Enabled = true; } } } - Viết mã lệnh cho sự kiện KeyUp của textbox tƣơng ứng với nhãn nhập giá trị private void txt_giatri_KeyUp(object sender, KeyEventArgs e) { bool kt; n = int.Parse(txt_n.Text); m = int.Parse(txt_m.Text); if (e.KeyCode == Keys.Enter) { kt = int.TryParse(txt_giatri.Text, out A[i, j]); if (kt) { rtbox_hienthi.Text += A[i, j].ToString() + " "; spt++; txt_giatri.ResetText(); txt_giatri.Focus(); j++; } if (j == m) { rtbox_hienthi.Text += "\n"; i++; j = 0; } if (spt == n * m) { MessageBox.Show("Nhập xong dãy", "Thông báo"); vohieuhoa(false); vohieuhoa2(); txt_m.Enabled = false; txt_n.Enabled = false; } } } - Viết mã lệnh cho hàm vô hiệu hóa các nút sau khi nhập xong ma trận private void vohieuhoa2() { bt_demchia21.Enabled = true; bt_lietkeSNT.Enabled = true; bt_timMax.Enabled = true; bt_tongle.Enabled = true; bt_tongtunghang.Enabled = true; } - Viết mã lệnh cho sự kiện kích chuột vào nút tìm giá trị lớn nhất private void bt_timMax_Click(object sender, EventArgs e) { rtbox_ketqua.ResetText(); int max = A[0, 0]; for (int i = 0; i max) max = A[i, j]; rtbox_ketqua.Text = "Giá trị lớn nhất của ma trận là:" + max.ToString(); } 188
  74. Tập bài giảng Lập trình cơ bản - Viết mã lệnh cho sự kiện kích chuột vào nút tính tổng các số lẻ private void bt_tongle_Click(object sender, EventArgs e) { rtbox_ketqua.ResetText(); int s = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (A[i, j] % 2 != 0) s += A[i, j]; rtbox_ketqua.Text = "Tổng các số lẻ của ma trận là: " + s.ToString(); } - Viết mã lệnh cho sự kiện kích chuột vào nút đếm các số chia hết cho 3 và 7 private void bt_demchia21_Click(object sender, EventArgs e) { rtbox_ketqua.ResetText(); int d = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (A[i, j] % 21 == 0) d++; rtbox_ketqua.Text = "Ma trận có " + d.ToString() + " số chia hết cho cả 3 và 7"; } - Viết mã lệnh cho sự kiện kích chuột vào nút tính tổng từng hàng private void bt_tongtunghang_Click(object sender, EventArgs e) { int s; rtbox_ketqua.ResetText(); for (int i = 0; i < n; i++) { s=0; for (int j = 0; j < m; j++) s += A[i, j]; rtbox_ketqua.Text+= "Tổng hàng " + (i+1).ToString() + "là: " + s.ToString(); rtbox_ketqua.Text += "\n"; } } - Viết mã lệnh cho sự kiện kích chuột vào nút tính liệt kê các số nguyên tố private void bt_lietkeSNT_Click(object sender, EventArgs e) { rtbox_ketqua.Text=" Các số nguyên tố của ma trận là: "; int d = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (kt_SNT(A[i, j])) { rtbox_ketqua.Text += A[i, j].ToString() + " "; d++; } if (d == 0) rtbox_ketqua.Text = "Ma trận không có số 189
  75. Tập bài giảng Lập trình cơ bản nguyên tố"; } - Viết mã lệnh cho hàm kiểm tra số nguyên tố bool kt_SNT(int n) { bool kt; if (n < 2) kt = false; else { kt = true; for(int i=2;i<=n/2;i++) if (n % i == 0) { kt = false; break; } } return kt; } Bƣớc 6. Kết quả chạy chƣơng trình Hình 4.58: Kết quả chạy chương trình bài tập mẫu về mảng hai chiều Bài 4.11 Tạo một ứng dụng Windows Form thực hiện các công việc sau: 1. Nhập một ma trận số thực gồm n hàng, m cột (với n và m là hai số nguyên dƣơng). 2. Hiển thị ma trận. 3. Tìm số âm nhỏ nhất của ma trận. 4. Sắp xếp từng cột của ma trận theo thứ tự tăng dần. 5. Nhập số nguyên dƣơng k, xóa cột thứ k của ma trận nếu có. 190
  76. Tập bài giảng Lập trình cơ bản 6. Tính trung bình cộng các phần tử có giá trị chẵn trong ma trận Bài 4.12 Tạo một ứng dụng Windows Form thực hiện các công việc sau: 1. Nhập một ma trận số thực vuông cấp n (với n là số nguyên dƣơng). 2. Hiển thị ma trận. 3. Tính tổng các phần tử nằm trên đƣờng chéo phụ của ma trận. 4. Tìm số âm lớn nhất trên đƣờng chéo chính của ma trận 5. Đếm các phần tử của ma trận có giá trị chia hết cho 3 và 5. Bài 4.13 Viết một chƣơng trình thực hiện các công việc sau: 1. Thiết kế Form theo mẫu Hình 4.59: Chương trình xử lý chuỗi Yêu cầu: - Nhãn chƣơng trình xử lý chuỗi: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 16, căn giữa Form. - GroupBox nhập và kết quả: Font Time New Roman, cỡ chữ 14. - Điều khiển để nhập chuỗi A, chuỗi B và hiển thị kết quả là các RichTextBox. - Các điều khiển ―So sánh‖, ―Nối chuỗi‖, ―Chèn‖, ―Thêm chuỗi‖, ―Thay thế‖, ―Chuỗi hoa‖, ―Chuỗi thƣờng‖, ‖Thoát‖là các Button. 2. Lập trình cho các sự kiện: - Khi Load Form: + RichTextBox nhập A và B sáng cho phép nhập xâu ký tự. + Các điều khiển khác vô hiệu hóa (nút ―Thoát‖ luôn sáng, richTextBox kết quả luôn ẩn). - Khi nhập xâu vào richTextBox nhập A hoặc B thì các button sẽ sáng lên. - Khi kích vào nút ―So sánh‖: 191
  77. Tập bài giảng Lập trình cơ bản + Kiểm tra xem đã nhập xâu hay chƣa? Nếu chƣa thì đƣa ra hộp thoại thông báo. + Thực hiện so sánh hai xâu theo thứ tự từ điển trong bảng mã ASCII. + Hiển thị kết quả ra richTextBox kết quả. - Khi kích vào nút ―Chèn‖: + Kiểm tra xem đã nhập xâu A và xâu B hay chƣa? Nếu chƣa nhập đủ thì đƣa ra hộp thoại thông báo. + Hiện lên cửa sổ cho phép nhập vào số nguyên dƣơng n. + Thực hiện nối xâu B vào vị trí thứ n của xâu A. + Hiển thị xâu kết quả ra richTextBox kết quả. - Khi kích vào nút ―Nối chuỗi‖: + Kiểm tra xem đã nhập xâu A và xâu B hay chƣa? Nếu chƣa nhập đủ thì đƣa ra hộp thoại thông báo. + Thực hiện nối xâu B vào cuối xâu A. + Hiển thị xâu kết quả ra richTextBox kết quả. - Khi kích vào nút ―Thay thế‖: + Kiểm tra xem đã nhập xâu A và xâu B hay chƣa? Nếu chƣa nhập đủ thì đƣa ra hộp thoại thông báo. + Thực hiện thay thế xâu A bằng xâu B. + Hiển thị xâu kết quả ra richTextBox xâu A. - Khi kích vào nút ―Xâu hoa‖: + Kiểm tra xem đã nhập xâu A và xâu B hay chƣa? Nếu chƣa nhập đủ thì đƣa ra hộp thoại thông báo. + Thực hiện chuyển xâu A và xâu B về xâu chứa toàn ký tự hoa. + Hiển thị xâu kết quả ra richTextBox xâu A và richTextBox xâu B. - Khi kích vào nút ―Thoát‖: thực hiện kết thúc chƣơng trình. Hướng dẫn thực hiện 1. Thiết kế Form như yêu cầu đề bài 2. Phân tích yêu cầu Theo yêu cầu của bài toán thì phải có một Form chứa: - Các đối tƣợng có nội dung ―CHƢƠNG TRÌNH XỬ LÝ CHUỖI‖, ―Nhập chuỗi A‖, ―Nhập chuỗi B‖ là các Label. - Đối tƣợng ô nhập xâu A, xâu B và kết quả là các RichTextBox. - Đối tƣợng nhập và kết quả là các GroupBox. - Các nút ―So sánh‖, ―Nối chuỗi‖, ― Chèn‖, ―Thay thế‖, ― Chuỗi hoa‖, ―Thoát‖ là các Button. 192
  78. Tập bài giảng Lập trình cơ bản 3. Hướng dẫn thực hiện Nhƣ vậy, để thực hiện công việc thiết kế Form nhƣ yêu cầu bài toán, ngƣời lập trình thực hiện các bƣớc sau: Bƣớc 1. Mở C# Bƣớc 2. Tạo Form mới Trên thanh menu, chọn File/New/Project.Trên màn hình xuất hiện cửa sổ New Project, chọn ứng dụng Windows Form Appication, sau đó nhập tên của Project vào ô Name, kích vào Browse để chọn thƣ mục lƣu trữ Project, sau đó chọn OK. Bƣớc 3. Thiết kế Form theo mẫu và gắn các điều khiển Bƣớc 4. Kết quả thiết kế Form Hình 4.60: Kết quả thiết kế Form chương trình xử lý xâu Bƣớc 5. Viết mã lệnh cho các nút chức năng - Viết mã lệnh cho sự kiện Form Load private void Form1_Load(object sender, EventArgs e) { vohieuhoa(false); rtbox_A.ResetText(); rtbox_B.ResetText(); rtbox_A.Focus(); } - Viết mã lệnh cho hàm vô hiệu hóa các button void vohieuhoa(bool gt) { bt_chen.Enabled = gt; bt_chuoihoa.Enabled = gt; bt_noichuoi.Enabled = gt; bt_sosanh.Enabled = gt; bt_thaythe.Enabled = gt; } - Viết mã lệnh cho sự kiện TextChanged của richTextBox nhập xâu A 193
  79. Tập bài giảng Lập trình cơ bản private void rtbox_A_TextChanged(object sender, EventArgs e) { vohieuhoa(true); } - Viết mã lệnh cho sự kiện TextChanged của richTextBox nhập xâu B private void rtbox_B_TextChanged(object sender, EventArgs e) { vohieuhoa(true); } - Viết mã lệnh cho sự kiện kích chuột vào nút so sánh private void bt_sosanh_Click(object sender, EventArgs e) { rtbox_ketqua.ResetText(); if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) MessageBox.Show("Chưa nhập xâu", "Thông báo"); else if (string.Compare(rtbox_A.Text, rtbox_B.Text) == 0) rtbox_ketqua.Text = "Hai chuỗi giống nhau"; else if (string.Compare(rtbox_A.Text, rtbox_B.Text) <0) rtbox_ketqua.Text = "Chuỗi A nhỏ hơn chuỗi B"; else rtbox_ketqua.Text = "Chuỗi A lớn hơn chuỗi B"; } - Viết mã lệnh cho hàm kiểm tra chuỗi rỗng bool kiemtra(string st) { if (string.IsNullOrWhiteSpace(st)) return true; else return false; } - Viết mã lệnh cho sự kiện kích chuột vào nút nối chuỗi private void bt_noichuoi_Click(object sender, EventArgs e) { rtbox_ketqua.ResetText(); if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) MessageBox.Show("Chưa nhập xâu", "Thông báo"); else { string st, st1, st2; st1 = rtbox_A.Text; st2 = rtbox_B.Text; st = string.Concat(st1, st2); rtbox_ketqua.Text = st; } } - Viết mã lệnh cho sự kiện kích chuột vào nút chèn private void bt_chen_Click(object sender, EventArgs e) 194
  80. Tập bài giảng Lập trình cơ bản { bool kt; int n; rtbox_ketqua.ResetText(); if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) MessageBox.Show("Chưa nhập xâu", "Thông báo"); else { string st, st1, st2; st1 = rtbox_A.Text; st2 = rtbox_B.Text; do { kt = int.TryParse(Microsoft.VisualBasic.Interaction.InputBox("Nhập vị trí cần bổ sung n = "), out n); } while (!kt || n st1.Length); st = st1.Insert(n, st2); rtbox_ketqua.Text = st; } } - Viết mã lệnh cho sự kiện kích chuột vào nút thay thế private void bt_thaythe_Click(object sender, EventArgs e) { if (kiemtra(rtbox_A.Text))MessageBox.Show("Chưa nhập xâu", "Thông báo"); else { string xau_can_thay = Microsoft.VisualBasic.Interaction.InputBox("Nhập xâu cần thay thế", "Nhập xâu", "", 100, 100); string xau_thay_the = Microsoft.VisualBasic.Interaction.InputBox("Nhập xâu thay thế", "Nhập xâu", "", 100, 100); st1 = st1.Replace(xau_can_thay, xau_thay_the); rtbox_A.Text = st1; } } - Viết mã lệnh cho sự kiện kích chuột vào nút chuỗi hoa private void bt_chuoihoa_Click(object sender, EventArgs e) { rtbox_ketqua.ResetText(); if (kiemtra(rtbox_A.Text) || kiemtra(rtbox_B.Text)) MessageBox.Show("Chưa nhập xâu", "Thông báo"); else { 195
  81. Tập bài giảng Lập trình cơ bản string st1, st2; st1 = rtbox_A.Text; st2 = rtbox_B.Text; st1 = st1.ToUpper(); st2 = st2.ToUpper(); rtbox_A.Text = st1; rtbox_B.Text = st2; } } - Viết mã lệnh cho sự kiện kích chuột vào nút thoát private void bt_Thoat_Click(object sender, EventArgs e) { this.Close(); } Bƣớc 6. Kết quả chạy chƣơng trình Hình 4.61: Kết quả chạy chương trình xử lý xâu Bài 4.14 Lập chƣơng trình thực hiện các yêu cầu sau: 1. Thiết kế Form nhƣ hình sau Hình 4.62: Chuẩn hóa và đếm từ trong xâu 196
  82. Tập bài giảng Lập trình cơ bản Yêu cầu: - Nhãn chuẩn hóa và đếm từ trong xâu: Font Time New Roman, chữ hoa, in đậm, cỡ chữ 16, căn giữa Form. - GroupBox nhập xâu và kết quả: Font Time New Roman, cỡ chữ 14 - Điều khiển để nhập xâu và hiển thị kết quả là các RichTextBox và đƣợc đặt trong các GroupBox tƣơng ứng. - Nhãn đếm từ: Font Time New Roman, cỡ chữ 14. - Các điều khiển ―Chuẩn hóa‖, ―Đếm từ‖, ―Thoát là các Button. 2. Lập trình cho các nút sự kiện: - Khi Load Form: + richTextBox nhập xâu sáng lên cho phép nhập xâu. + Các điều khiển khác vô hiệu hóa (nút ―Thoát‖ luôn sáng). - Nút ―Chuẩn hóa‖ sáng lên khi nhập ở richTextBox nhập xâu. - Khi kích vào nút ―Chuẩn hóa‖ thì: + RichTextBox nhập xâu vô hiệu hóa. + Thực hiện chuẩn hóa xâu và đƣa kết quả ra richTextBox kết quả + Nút ―Đếm từ‖ sáng lên đồng thời lúc này nút ―Chuẩn hóa‖ vô hiệu hóa. - Khi kích vào nút ―Đếm từ‖ thì: + Thực hiện đếm từ của xâu đã chuẩn hóa. + Hiển thị kết quả ra nhãn đếm từ. TAI LIỆU THAM KHẢO [1] Phạm Hữu Khang, Đoàn Thiện Ngân. C# 2005 - Lập trình cơ bản. Nhà xuất bản Lao động xã hội. 2006. [2] Phạm Hữu Khang, Đoàn Thiện Ngân. C# 2005 - Lập trình Windows Forms. Nhà xuất bản Lao động xã hội. 2006. [3] Microsoft .net (C#), Trung tâm đào tạo CNTT chất lƣợng cao, cổng cntt Việt Nam. www.itgatevn.com.vn [4] Programming C#, Jesse Liberty, O‘Reilly. [5] Hƣớng dẫn thực hành lâp trình cơ bản, Đại học Công nghệ Đồng Nai [6] Windows Forms Programming with C#, Erik Brown, Manning. 197
  83. Tập bài giảng Lập trình cơ bản [7] 198