Skip to content Skip to navigation

OpenStax_CNX

You are here: Home » Content » Thiết kế biểu mẫu dùng các điều khiển

Navigation

Lenses

What is a lens?

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

This content is ...

Affiliated with (What does "Affiliated with" mean?)

This content is either by members of the organizations listed or about topics related to the organizations listed. Click each link to see a list of all content affiliated with the organization.
  • VOCW

    This module is included inLens: Vietnam OpenCourseWare's Lens
    By: Vietnam OpenCourseWare

    Click the "VOCW" link to see all content affiliated with them.

Recently Viewed

This feature requires Javascript to be enabled.
 

Thiết kế biểu mẫu dùng các điều khiển

Module by: KS. Lâm Hoài Bảo. E-mail the author

Summary: Mục tiêu: Chương này gồm các bài tập nhằm rèn luyện cho sinh viên các thao tác cần thiết cho phép thiết kế các ứng dụng đơn giản trong môi trường lập trình Visual Basic cũng như một số kỹ năng lập trình cơ bản khi làm việc với Visual Basic.

Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:

- Sử dụng các điều khiển để thiết kế giao diện trong Visual Basic.

- Vận dụng các cấu trúc lập trình trong Visual Basic để viết mã lệnh.

- Sử dụng một số cấu trúc dữ liệu trong Visual Basic.

Kiến thức có liên quan:

- Giáo trình “Visual Basic”; Chương 1, 2, 3, 4, 5.

Tài liệu tham khảo:

- Visual Basic 6 Certification Exam Guide - Chapter 1, Page 1; Chapter 2, Page 41; Chapter 4, Page 89 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998.

SỬ DỤNG MỘT SỐ ĐIỀU KHIỂN

Bài tập có hướng dẫn

Bài tập 1I-1

THAO TÁC TRÊN LISTBOX

Bước 1: Tạo thư mục Basic\Bt1-1. Tạo một dự án mới kiểu Standard EXE, lưu vào trong thư mục trên.

Bước 2: Thêm 2 List Box và một Button vào form (hình 1). Nhấn đúp lên form để mở ra cửa sổ Code, nhập các đoạn mã sau trong sự kiện Form_Load:

Form1.List1.AddItem “Thing 3”

Form1.List1.AddItem “Thing 2”

Form1.List1.AddItem “Thing 1”

Hình 1
Hình 1 (graphics1.png)

Hình 1.1: Thao tác với List Box

Bước 3: Chạy ứng dụng bằng cách chọn Run/Start. List1 hiển thị 3 phần tử vừa thêm vào ở bước 2. Chấm dứt chương trình bằng cách chọn Run/End trên menu để trở về môi trường soạn thảo.

Bước 4: Nhấp đúp lên Button Command1 để hiển thị sự kiện Click của Command1.

Bước 5: Mục đích của Command1 là chuyển những phần tử được chọn từ List1 sang List2. Thêm đoạn mã sau vào thủ tục sự kiện Click của Command1:

' Kiem tra neu mot phan tu duoc chon

If Form1.List1.ListIndex = -1 Then Exit Sub

' Chep cac phan tu duoc chon tu List1 sang List2

Form1.List2.AddItem Form1.List1.List(Form1.List1.ListIndex)

Bước 6: Chạy ứng dụng. Nhấp phần tử thứ nhất của List1, sau đó nhấp Command1. Điều gì xảy ra? Phần tử được chọn của List1 phải được hiển thị bên List2. Chấm dứt ứng dụng và trở về môi trường soạn thảo.

Bước 7: Tìm trong phần trợ giúp các thuộc tính sau của ListBox:

oListCount

oList

oListIndex

Bước 8: Tìm trong phần trợ giúp các hàm sau của ListBox:

oAddItem

oRemoveItem

oClear

Bước 9: Tìm trợ giúp cho lệnh VB:

Exit Sub

Bước 10: Đoạn mã trong thủ tục Command1_Click thực hiện thao tác chép phần tử từ một ListBox sang một ListBox khác. Bây giờ ta làm ngược lại: loại bỏ phần tử trong List1. Để làm điều này ta nhấp đúp lên Command1 và thêm dòng code sau vào cuối thủ tục:

' Xoa phan tu duoc chon trong List1

Form1.List1.RemoveItem Form1.List1.ListIndex

Bước 11: Chạy chương trình và chọn phần tử thứ nhất trong List1. Điều gì xảy ra?

Bước 12: Nếu không chọn phần tử nào trong List1, nhấp Command1. Điều gì xảy ra? Tại sao?

Bước 13: Ta đã có một button dùng để chuyển các phần tử được lựa chọn từ trái sang phải (List1 sang List2), với button còn lại ta sẽ dùng để chuyển các phần tử được chọn từ phải sang trái (List2 sang List1).

Bước 14: Với Command2 ta sẽ copy đoạn mã từ Command1 với 1 vài thay đổi nhỏ.

Bước 15: Command2 thực hiện các thao tác giống với Command1, nhưng có nhiệm vụ di chuyển phần tử được lựa chọn từ List2 sang List1. Đoạn mã trong Command1 sẽ được sử dụng lại với một vài thay đổi nhỏ. Nhấp đúp lên Command1, chọn các mã lệnh đã thêm vào ở các bước trước. Chọn Edit/Copy trên menu.

Bước 16: Đóng cửa sổ Code và nhấp đúp lên Command2. Sự kiện Command2_Click sẽ hiển thị trong cửa sổ Code. Nhấp bất kỳ bên trong thủ tục sự kiện và chọn Edit/Paste trên menu. Như vậy ta đã chép đoạn mã từ Command1 sang Command2.

Bước 17: Sửa lại các mã lệnh vừa được chép. Thay đổi các chú thích cho thích hợp; đổi List1 thành List2 và ngược lại. Những sửa đổi này giúp Command2 có thể thực hiện thao tác chuyển các phần tử được chọn từ List2 sang List1.

Lưu các công việc đã thực hiện bằng cách chọn File/Save Project.

Bước 18: Chạy chương trình. Chọn phần tử thứ nhất trong List1 và chọn Command1 để chuyển nó sang List2. Bây giờ chọn phần tử thứ nhất trong List2, và nhấp Command2. Nếu Command2 không thực thi, trở lại môi trường soạn thảo. Kiểm tra lại đoạn mã lệnh trong thủ tục Command2_Click ta vừa chép ở bước trên.

Bước 19: Lưu ý rằng các phần tử ở cả 2 ListBox không được sắp thứ tự; nếu muốn sắp thứ tự, ta nhấp List1 và đổi thuộc tính Sorted thành True, tương tự đối với List2.

Bước 20: Lưu dự án lại và chạy chương trình. Tất cả các phần tử phải được hiển thị theo thứ tự trong cả 2 ListBox, bất chấp thứ tự chúng được thêm vào trong ListBox.

Bài tập 1I-2

THAO TÁC VỚI SPINCONTROL

Một SpinControl là sự kết hợp của TextBox và Slider. Slider tạo một miền giá trị số được hiển thị trong TextBox. Các giá trị này có thể được thay đổi bằng cách nhập trực tiếp vào trong TextBox.

Bước 1: Tạo thư mục Basic\Bt1-2. Tạo dự án mới trong thư mục trên.

Bước 2: Trong Form1, thêm một TextBox và Horizontal Scroll Bar như hình 2. Thiết lập các thuộc tính sau cho mỗi Control:

Hình 2
Hình 2 (graphics2.png)

Hình I.2: Spin Control

Item1: TextBox

Name: Text1

Text: <blank>

Item2: Horizontal Scroll Bar

Name: Hscroll1

LargeChange: 10

Max: 100

Bước 3: Nhấp đúp lên scrollbar để nhập mã lệnh, đây là sự kiện Change của Scroll Bar gọi là hàm HScroll1_Change. Thêm đoạn mã sau để hiển thị giá trị hiện thời của scroll bar trong TextBox.

Text1.Text = HScroll1.Value

Bước 4: Chạy ứng dụng bằng cách chọn Run/Start trên menu. Bây giờ nhấp các mũi tên trái và phải của scroll bar. Giá trị trong TextBox phải thay đổi.

Bước 5: Bây giờ thêm mã để thay đổi giá trị bằng cách nhập trực tiếp giá trị trong TextBox. Nhấp đúp vào TextBox và thêm đoạn mã sau để thiết lập giá trị cho scroll bar khi TextBox thay đổi:

HScroll1.Value = Text1.Text

Bước 6: Chạy chương trình và nhập 50 vào TextBox. Vạch của scroll bar thay đổi theo. Thay đổi vạch của scroll bar, giá trị trong TextBox cũng thay đổi.

Bước 7: Trong khi chạy chương trình, nhập ký tự A vào TextBox. Điều gì xảy ra? Nguyên nhân vì scroll bar chỉ nhận các giá trị là số chứ không phải ký tự.

Bước 8: Để ngăn chặn những ký tự không mong muốn được nhập vào TextBox, ta sử dụng sự kiện KeyPress. Sự kiện này xảy ra khi có một phím trên bàn phím được nhấn, nhưng trước khi giá trị thực sự được hiển thị trên TextBox. Sự kiện này nhận một giá trị số nguyên của phím được nhấn, gọi là ASCII. Mỗi ký tự trên bàn phím được đại diện bằng một mã ASCII duy nhất. Do đó ta có thể kiểm tra phím nào được nhấn và bỏ qua nó nếu ta thấy không cần thiết.

Bước 9: Thêm đoạn mã sau vào sự kiện Text1_KeyPress để ngăn chặn các giá trị không phải là số.

' Loai bo ky tu khong can thiet

If KeyAscii = vbKeyBack Then Exit Sub

If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then

KeyAscii = 0

End If

Bước 10: Lưu dự án lại và chạy chương trình.

Bài tập 1I-3

THAO TÁC VỚI DRIVELISTBOX, DIRLISTBOX, FILELISTBOX

Trong ví dụ này ta phải tạo 5 đối tượng, trong đó có 4 điều khiển:

  • Một Form.
  • Một điều khiển DriveListBox
  • Một điều khiển DirListBox
  • Một điều khiển FileListBox
  • Một điều khiển ImageBox

Bước 1: Tạo giao diện người dùng. Ta chỉ cần nhấp và vẽ đúng vị trí từng điều khiển trên Form.

Hình 3
Hình 3 (.png)
1243

Hình I.3: Giao diện lựa chọn tập tin hình ảnh để hiển thị

1: DriveListBox

Name: drvSource

2:DirListBox

Name: dirSource

3:FileListBox

Name: filSource

Pattern: *.bmp;*.wmf;*.ico;*.jpg

4:ImageBox

Name: ImgSource

Stretch: TRUE

Bước 2: Viết mã trao đổi thông tin giữa các đối tượng:

Trong cửa sổ thiết kế Form, nhấp đúp vào DriveListBox, cửa sổ Code hiện ra, xử lý sự kiện sau:

Private Sub drvSource_Change()

dirSource.Path = drvSource.Drive

End Sub

Tương tự cho DirListBox & FileListBox

Private Sub dirSource_Change()

filSource.Path = dirSource.Path

End Sub

Private Sub filSource_Click()

imgSource.Picture = LoadPicture(filSource.Path & "\" & filSource.FileName)

End Sub

Bước 3: Lưu dự án lại vào thư mục Basic\Bt1-3. Chạy chương trình nhờ phím F5.

Hình 4
Hình 4 (graphics3.png)

Hình I.4: Kết quả thực thi

Bài tập 1I-4

ĐIỀU KHIỂN OLE

Bước 1: Tạo dự án mới, trong đó ta có sử dụng OLE.

Hộp thoại Insert Object hiện ra để ta lựa chọn, ở đây chọn kích hoạt Create New, Object Type là Bitmap Image; đánh dấu chọn Display as Icon.

Hình 5
Hình 5 (graphics4.png)

Hình I.5: Sử dụng OLE Control

Bước 2: Nhấp OK, VB sẽ gọi trình ứng dụng Paint & ta vẽ hình trên cửa sổ Paint. Sau đó chọn Exit & Return trong cửa sổ Form, ta được:

Hình 6
Hình 6 (.png)
Hình 7
Hình 7 (.png)

Hình I.6: Kết quả thực thi ứng dụng

Bước 3: Lưu dự án vào thư mục Basic\Bt1I-4 và chạy chương trình; nhấp đúp vào biểu tượng Bitmap Image,VB sẽ khởi động Paint để ta hiệu chỉnh hình vẽ đầu.

Bài tập tự làm

  1. Thiết kế chương trình như sau:

Hình I.7 Các phép tính cơ bản

Hình 8
Hình 8 (graphics5.png)

Nhập vào 2 giá trị A, B; sau đó chọn một phép toán (+,-,*,/). Nhấp chọn nút nhấn Thực hiện, kết quả sẽ hiển thị trong điều khiển nhãn Kết quả.

  1. Thiết kế chương trình để nhập vào tọa độ của hai điểm (x1,y1); (x2,y2) và cho phép:

a) Tính hệ số góc của đường thẳng đi qua hai điểm đó theo công thức:

Hệ số góc = (y2 - y1) /(x2 - x1)

b) Tính khoảng cách giữa hai điểm theo công thức:

khoảng cách = (x2 - x1)2+(y2 - y1)2(x2 - x1)2+(y2 - y1)2 size 12{ sqrt { \( "x2 - x1" \) rSup { size 8{2} } + \( "y2 - y1" \) rSup { size 8{2} } } } {}

Giao diện chương trình có thể như sau:

Hình I.8: Tọa độ các điểm

Hình 9
Hình 9 (graphics6.png)

  1. Viết chương trình cho phép nhập vào bán kính r của một hình tròn. Tính chu vi và diện tích của hình tròn theo công thức :

Chu vi CV = 2*Pi*r

Diện tích Dt = Pi*r*r

Hiển thị các kết quả lên màn hình.

4) Thiết kế chương trình có giao diện như hình dưới và thực hiện các chức năng sau:

Hình 10
Hình 10 (graphics7.png)

Hình I.9: Lựa chọn tên

  • Mỗi khi người sử dụng chương trình nhập thông tin vào 2 ô TextBox, sau đó nhấp chọn nút Thêm, giá trị của ô Mã số được đưa vào ComboBox, còn giá trị của ô Họ và tên được đưa vào ListBox.
  • Mỗi khi họ chọn một mã số nào đó trong ComboBox, giá trị họ và tên tương ứng cũng sẽ được chọn trong ListBox; đồng thời chúng sẽ được hiển thị lên trên các điều khiển TextBox tương ứng (như hình). (Xử lý sự kiện Combo1_Click & List1_Click)
  • Đối với mã số và họ tên của một người, ta có thể sửa đổi giá trị của chúng trong các ô nhập TextBox, sau đó chọn nút Sửa, giá trị của chúng trong ComboBox & ListBox cũng sửa đổi theo.
  • Khi người dùng chọn một mã số (hay họ tên) trên ComboBox (hoặc ListBox), sau đó họ chọn Xóa, các thông tin này được xóa ra khỏi ComboBox & ListBox.

CÁC CẤU TRÚC LẬP TRÌNH TRONG VB

Bài tập có hướng dẫn

Bài tập 1II-1

SỬ DỤNG SELECT CASE

Tạo thư mục Basic\Bt1II-1. Thiết kế chương trình có giao diện & lưu trong thư mục trên:

Hình 11
Hình 11 (graphics8.png)

Hình I.10: Select Case

Ở đây, người sử dụng chương trình nhập vào một tuổi nào đó trong ô nhập tuổi, sau đó họ nhấp nút Nhận xét, một nhận xét sẽ xuất hiện ứng với tuổi mà họ nhập từ bàn phím.

Lúc này ta sử dụng toán tử so sánh (=, <, <=, >, >=, <>) cùng với các từ khóa Is và To trong biểu thức.

Is: so sánh biến với biểu thức được liệt kê sau từ khóa Is.

To: định nghĩa phạm vi của giá trị.

Sự kiện Command1_Click():

Dim Age As Integer

Age = Val(Text1.Text)

Select Case Age

Case Is < 18

Label2.Caption = "Ban con thieu nien, ban phai hoc thoi!"

Case 18 To 30

Label2.Caption = "Ban da truong thanh, lap gia dinh thoi!"

Case 31 To 60

Label2.Caption = "Lua tuoi trung nien roi!"

Case Else

Label2.Caption = "Ban co con chau day dan roi nhe!"

End Select

Bài tập 1II-2

BIẾN VÀ CẤU TRÚC

Bước 1: Tạo thư mục Basic\Bt1II-2. Tạo dự án mới (VB Standard EXE) trong thư mục trên; thêm một modul vào dự án, trong modul nay thêm vào đoạn mã sau:

Public Const tieude As String = "Quan ly hanh chinh"

Public Const sohieu As String = "1.0"

Thêm đoạn mã sau vào hàm xử lý sự kiện Form_Load của Form1:

Form1.Caption = tieude & " phien ban " & sohieu

Chạy ứng dụng, ta thấy tiêu đề của Form: “Quan ly hanh chinh phien ban 1.0”.

Bây giờ, mở Modul1 và thay Public bằng Private. Chạy chương trình. Điều gì xảy ra?

Bước 2: Đổi các khai báo trên thành Public, thêm dòng sau đây vào đầu thủ tục Form_Load:

tieude = “Loi xuat hien” & “Hang so khong the thay doi duoc.”

Chạy chương trình, điều gì xảy ra?

Bước 3: Thêm dòng sau trong hàm xử lý sự kiện Form_Resize:

MsgBox “FORM RESIZE”

Bước 4: Chạy chương trình, khi Form bắt đầu được hiển thị (sự kiện Form_Load), sự kiện Resize của Form được thực hiện. Chỉ có hàm xử lý sự kiện Resize mới cho biết chắc rằng hàm Form_Load được thực thi. Để kiểm chứng ta tạo một biến trên form và trong hàm Form_Load ta thiết lập giá trị của nó. Sau đó, hàm Form_Resize có thể kiểm tra biến và xử lý trên biến này.

Bước 5: Khai báo một biến Private trong Form1 tên sukienLoad:

Private sukienLoad As Boolean

Trong hàm Form_Load, đặt giá trị True cho biến trên:

sukienLoad = True

Bây giờ ta kiểm tra giá trị của biến trong hàm Form_Resize. Thêm vào đoạn mã sau trong hàm Form_Resize:

If sukienLoad = True Then

SukienLoad =False

Exit Sub

End If

MsgBox “Form Resize”

Chạy ứng dụng, khi Form bắt đầu được hiển thị, ta không thấy xuất hiện câu thông báo, nhưng khi ta thay đổi kích thước của Form (nhấn các nút _,  của form), câu thông báo lại xuất hiện. Ở đây ta đã sử dụng một biến làm trung gian cho sự giao tiếp giữa sự kiện Form_Load và sự kiện Form_Resize. Bởi vì cả 2 hàm này nằm trong Form1, nên ta có khai báo Private cho chúng, các ứng dụng khác không thể truy xuất đến các biến này.

CHƯƠNG TRÌNH CON

Bước 6: Ta viết một chương trình con để xử lý chuỗi. Đầu vào của chương trình con là một chuỗi, kết quả của chương trình con là chuỗi đó nhưng các từ đều được viết hoa ký tự đầu tiên. Bài tập này giúp ta khai báo (định nghĩa) một chương trình con và gọi thực thi chương trình con đó trong chương trình ứng dụng của mình.

Chọn Modul1 trong cửa sổ soạn thảo chương trình, sau đó nhấp chọn Tools\Add Procedure. Định nghĩa một hàm public tên Doihoa() như sau:

Public Function Doihoa(s As String) As String

Dim s1 As String

Dim s2 As String

Do While InStr(s, " ") <> 0

s1 = Left(s, InStr(s, " "))

s = Right(s, Len(s) - InStr(s, " "))

' Doi chu hoa

s1 = UCase(Left(s1, 1)) & Right(s1, Len(s1) - 1)

s2 = s2 & s1

Loop

' Tra ket qua

Doihoa = s2 & " " & s

End Function

' Ham nay khong viet hoa tu cuoi cung.

Bước 7: Hàm Doihoa có nhiệm vụ nhận vào một chuỗi và đổi ký tự đầu tiên của các từ trong chuỗi thành chữ hoa. Bây giờ ta kiểm tra hàm này như sau: Thêm một TextBox và một nút nhấn (Button) lên Form1. Nhấp vào Button, ta thêm đoạn mã sau vào hàm xử lý sự kiện Command1_Click:

Form1.Caption = Doihoa(Text1.Text)

Chạy ứng dụng, nhập một chuỗi vào Text1, nhấp Command1. Chuỗi chữ hoa sẽ xuất hiện trên tiêu đề của Form1.

Bước 8: Sửa lại sao cho có thể viết hoa ký tự đầu tiên của tất các từ.

Bài tập 1II-3

LỰA CHỌN VỚI LISTBOX

Bước 1: Tạo thư mục Basic\Bt1II-3. Tạo dự án mới VB Standard EXE trong thư mục trên, sau đó tạo Form có dạng sau:

Hình 12
Hình 12 (graphics9.png)

Hình I.11: Lựa chọn với ListBox

Ta có 2 ListBox và các nút nhấn (Button); trong đó:

Nút > chuyển một phần tử từ trái sang phải

Nút < chuyển một phần tử từ phải sang trái.

Nút >> chuyển tất cả các phần tử từ trái sang phải.

Nút << chuyển tất cả các phần tử từ phải sang trái.

Thêm 2 ListBox và 4 Button vào Form1. Trong hàm xử lý sự kiện Form_Load thêm vào đoạn mã:

List1.AddItem "Thing 1"

List1.AddItem "Thing 2"

List1.AddItem "Thing 3"

List1.AddItem "Thing 4"

List1.AddItem "Thing 5"

List1.AddItem "Thing 6"

Chạy chương trình.

Bước 2: Thêm hàm xử lý sự kiện Click cho nút nhấn 1 (>) Command1_Click:

' Kiem tra co chon hay khong?

If Form1.List1.ListIndex = -1 Then Exit Sub

' Chep tu trai sang phai

Form1.List2.AddItem Form1.List1.List(Form1.List1.ListIndex)

' Xoa ben trai

Form1.List1.RemoveItem Form1.List1.ListIndex

Bước 3: Chạy chương trình, chọn phần tử trong List1 và nhấp nút >, phần tử đó chuyển sang List2. Bây giờ ta làm ngược lại: chuyển phần tử được chọn từ List2 sang List1. Trở về cửa sổ soạn thảo; chọn đoạn mã vừa nhập trong List1, chọn Edit\Copy trong menu của VB. Nhấp lên Button <, chọn Edit\Paste. Bây giờ ta sửa lại đoạn mã sau trong hàm xử lý sự kiện Command2_Click:

' Kiem tra co chon hay khong?

If Form1.List2.ListIndex = -1 Then Exit Sub

' Chep tu phai sang trai

Form1.List1.AddItem Form1.List2.List(Form1.List2.ListIndex)

' Xoa ben phai

Form1.List2.RemoveItem Form1.List2.ListIndex

Bước 4: Lưu dự án và chạy chương trình.

Ta nhận thấy 2 đoạn mã lệnh trên (cho Button < và >) là như nhau (chỉ đổi chỗ List1 cho List2 và ngược lại). Do đó ta sẽ viết một chương trình con để chuyển dữ liệu từ ListBox này sang ListBox kia, và trong hàm xử lý sự kiện của 2 Button ta chỉ cần gọi chương trình con này để chuyển dữ liệu.

Thêm một Modul mới vào dự án tên Modul1, chọn Tool\Add Procedure để thêm một chương trình con vào tên Chuyendulieu()

Vào Modul1, sửa đổi lại thủ tục chuyển dữ liệu như sau:

Public Sub Chuyendulieu(L1 As ListBox, L2 As ListBox)

' Kiem tra co chon hay khong?

If L1.ListIndex = -1 Then Exit Sub

' Chep

L2.AddItem L1.List(L1.ListIndex)

' Xoa ben trai

L1.RemoveItem L1.ListIndex

End Sub

Bây giờ hàm xử lý sự kiện của Command1 (Command1_Click) ta sửa lại như sau:

Call Chuyendulieu(Form1.List1, Form1.List2)

Hàm Command2_Click:

Call Chuyendulieu(Form1.List2, Form1.List1)

Lưu dự án và chạy chương trình. Kiểm tra kết quả.

Bài tập 1I -4

TRUYỀN THEO ĐỊA CHỈ VÀ TRUYỀN THEO GIÁ TRỊ

Bước 1: Tham số đưa vào chương trình con được truyền theo một trong 2 cách: theo địa chỉ và theo giá trị. Bây giờ ta tạo dự án mới trong thư mục Basic\Bt2-4 để kiểm tra chúng.

Bước 2: Tạo Form1 như sau:

Hình I.12: Truyền tham số321

Hình 13
Hình 13 (graphics10.png)

Button 1: Name: cmdTTri; Caption: Truyen tri

Button 2: Name: cmdTChieu; Caption: Tham chieu

TextBox: Name: Text1

Label 1: Name: lblTruoc

Label 2: Name: lblTrong

Label 3: Name: lblSau

Bước 3: Thêm 1 Modul vào dự án tên là Modul1, chọn Tools\Add Procedure thêm thủ tục Thamchieu như sau:

Name: Thamchieu

Type: Sub

Scope: Public

Bước 4: Thêm đoạn mã sau trong thủ tục Thamchieu

Public Sub Thamchieu(so As Integer)

so = so + 2

Form1.lblTrong.Caption = Str(so)

End Sub

Bước 5: Chọn Tool\Add Procedure để thêm thủ tục Truyentri như sau:

Name: Truyentri

Type: Sub

Scope: Public

Bước 6: Thêm đoạn mã sau trong thủ tục Truyentri

Public Sub Truyentri(ByVal so As Integer)

so = so + 2

Form1.lblTrong.Caption = Str(so)

End Sub

Bước 7: Sự khác nhau giữa 2 thủ tục trên là từ khóa ByVal trong thủ tục Truyentri. Bây giờ ta thêm thủ tục xử lý biến cố Click của Button cmdTTri. Thêm đoạn mã sau:

Private Sub cmdTTri_Click()

Dim n As Integer

n = Val(Text1.Text)

lblTruoc.Caption = Str(n)

Call Truyentri(n)

lblSau.Caption = Str(n)

End Sub

Bước 9: Thêm hàm xử lý biến cố cmdTChieu_Click cho Button cmdTChieu:

Private Sub cmdTChieu_Click()

Dim n As Integer

n = Val(Text1.Text)

lblTruoc.Caption = Str(n)

Call Thamchieu(n)

lblSau.Caption = Str(n)

End Sub

Bước 10: Lưu dự án, chạy chương trình. Nhập số bất kỳ vào ô TextBox rồi nhấp nút Truyen tri, sau đó nhấp nút Tham chieu. Kiểm tra kết quả. Giải thích.

Bài tập 1II-5

THAM SỐ TÙY CHỌN

Bước 1: Tạo thư mục tên Basic\Bt1II-5. Tạo dự án mới trong thư mục này.

Bước 2: Tạo Form như sau:

Hình 14
Hình 14 (graphics11.png)

Hình I.13: Lấy thời gian

Trong đó:

Label: Name: lblTg

Button 1: Name: cmdGioPhut

Button 2: Name: cmdGioPhutGiay

Bước 3: Thêm modul mới vào dự án tên Modul1. Chọn Tool\ Add Procedure tạo thủ tục:

Name: Laythoigian

Type: Sub

Scope: Public

Bước 3: Thêm đoạn mã sau vào thủ tục trên:

Public Sub Laythoigian(gio As String, phut As String, Optional giay As String)

' Tham so thu 3 co tu khoa Optional, nghia la ta

' co the goi thu tuc co the co tham so nay hay khong co deu duoc

' Ham IsMissing kiem tra xem tham so nay co hay khong

If IsMissing(giay) Then giay = ""

Dim hientai

hientai = Now

gio = Format$(hientai, "hh")

phut = Format$(hientai, "nn")

giay = Format$(hientai, "ss")

End Sub

Bước 4: Thêm thủ tục xử lý sự kiện cho Button cmdGiophutgiay, trong thủ tục này chèn đoạn mã sau:

Private Sub cmdGiophutgiay_Click()

Dim gioht As String

Dim phutht As String

Dim giayht As String

Call Laythoigian(gioht, phutht, giayht)

lblTg.Caption = gioht & ":" & phutht & ":" & giayht

End Sub

Bước 5: Thêm thủ tục xử lý sự kiên cho Button cmdGiophut, trong thủ tục này chèn đoạn mã sau:

Private Sub cmdGiophut_Click()

Dim gioht As String

Dim phutht As String

' Khong su dung tham so thu ba

Call Laythoigian(gioht, phutht)

lblTg.Caption = gioht & ":" & phutht

End Sub

Bước 6: Lưu dự án lại và chạy chương trình. Kiểm tra kết quả.

Bài tập 1II-6

PARAM ARRAY

Bước 1: Tạo thư mục Basic\Bt1II-6. Tạo dự án mới trong thư mục này.

Bước 2: Tạo Form như hình sau:

Hình 15
Hình 15 (graphics12.png)

Hình I.14: Param Array

Trong đó:

ListBox: Name: lstTen

Button: Name: cmdds; Caption: Them vao danh sach

Bước 3: Chèn modul mới vào dự án tên Modul1. Sau đó, chọn Tool\Add Procedure để chèn thủ tục sau:

Name: Diends

Type: Sub

Scope: Public

Bước 3: Chèn đoạn mã sau vào thủ tục Diends

Public Sub Diends(ParamArray Ten() As Variant)

' Su dung ParamArray thi mang phai kieu Variant va

' mang nay la tham so cuoi cung cua thu tuc

Dim hten As Variant

For Each hten In Ten()

Form1.lstTen.AddItem hten

Next

End Sub

Bước 4: ParamArray cho phép không cần xác định số lượng các đối số trong một chương trình con. Bây giờ, thêm hàm xử lý sự kiện cho nút cmdds: cmdds_Click:

Private Sub cmdds_Click()

Call Diends("Huynh Xuan Hiep", "Nguyen Van Linh", "Lam Hoai Bao")

Call Diends

Call Diends("Phan Huy Cuong")

End Sub

Bước 5: Lưu dự án lại và chạy chương trình. Kiểm tra kết quả (hình bên dưới). Lưu ý đến lời gọi thủ tục trong sự kiện cmdds_Click (số lượng đối số khác nhau)

Hình 16
Hình 16 (graphics13.png)

Hình I.15: Kết quả Param Array

Bài tập 1II-7

XỬ LÝ CHUỖI

Hình 17
Hình 17 (.png)
12345Bước 1: Tạo dự án mới trong thư mục Basic\Bt2-7 với giao diện như sau:

Hình I.16: Xử lý chuỗi

1: Form: Name: frmMain; MinButton: False; MaxButton: False; Font: VNI-Times.

2: Label: Name: lblTen.

3: TextBox: Name: txtTen.

4: CommandButton: Name: cmdTen; Caption: Tách tên.

5: CommandButton: Name: cmdCKT; Caption: Cắt khoảng trắng.

Bước 2: Tạo một hàm cắt khoảng trắng như sau:

Private Function ATrim(ByVal Name As String) As String

Name = LTrim(RTrim(Name))

Do While InStr(Name, "") <> 0

Name = Replace(Name, "", "")

Loop

ATrim = Name

End Function

Bước 3: Trong cửa sổ thiết kế Form; nhấp đúp vào Tách tên, ta xử lý đoạn mã cho sự kiện này:

Private Sub cmdTen_Click()

Dim sName As String, Name As String

sName = ATrim(StrConv(txtTen.Text, vbProperCase))

Dim i As Long

i = InStrRev(sName, "")

Name = Right(sName, Len(sName) - i)

MsgBox Name & ": " & Str(Len(Name))

End Sub

Bước 4: Sau đó, trở lại cửa sổ thiết kế, nhấp đúp vào Cắt khoảng trắng, ta xử lý:

Private Sub cmdCKT_Click()

Dim sName As String

sName = ATrim(StrConv(txtTen.Text, vbProperCase))

MsgBox sName, , "Kieu du lieu chuoi"

End Sub

Bước 5: Lưu dự án và chạy chương trình.

Bài tập 1II-8

XỬ LÝ LỖI

Bước 1: Tạo một dự án mới. Dùng Tools\Add Procedure thêm một thủ tục mới tên GoiThuTuc vào Form1 với nội dung như sau:

Public Sub GoiThuTuc()

Dim bien As Integer

MsgBox "Truoc khi gan tri cho bien"

bien = "Bien nguyen khong nhan gia tri la chuoi"

MsgBox "Sau khi gan tri cho bien: " & "Bien = " & Format(bien)

End Sub

Bước 2: Thủ tục xử lý sự kiện Form_Load có nội dung như sau:

Private Sub Form_Load()

MsgBox "Truoc khi goi thu tuc"

Call GoiThuTuc

MsgBox "Sau khi goi thu tuc"

End Sub

Lưu dự án vào thư mục Basic\Bt1II-8:

Form: tên là form1

Project: Debug

Bước 3: Chạy chương trình. VB đưa ra hộp thoại để bắt lỗi (debug) chương trình. Ta chọn End để trở về cửa sổ soạn thảo.

Tạo tập tin thực thi tên Debug.exe bằng cách chọn File\Make Debug.exe. Chạy tập tin Debug.exe từ Windows Explorer ta nhận được hộp thoại báo lỗi và chương trình tự động chấm dứt.

Nhận xét kết quả khi thực hiện chương trình.

Bước 4: Bây giờ ta thêm vào đoạn mã xử lý lỗi trong thủ tục của sự kiện Form_Load:

Private Sub Form_Load()

On Error GoTo Xulyloi

MsgBox "Truoc khi goi thu tuc"

Call GoiThuTuc

MsgBox "Sau khi goi thu tuc"

Thoat:

Exit Sub

Xulyloi:

MsgBox "Su kien Form_Load - Loi xay ra: " & Err.Description

Resume Thoat

End Sub

Bước 5: Lưu dự án và chạy chương trình. Nhận thấy, thay vì ta nhận được câu thông báo lỗi từ VB, một hộp thoại báo lỗi do ta đưa vào xuất hiện. Lưu ý, những lỗi được bắt trong thủ tục Form_Load (chứ không phải trong GoiThuTuc()). Nguyên nhân vì thủ tục GoiThuTuc() được gọi bởi thủ tục xử lý sự kiện Form_Load.

Bước 6: Biên dịch lại thành tập tin Debug.exe, chạy nó. Nhận xét kết quả.

Bước 7: Các kết quả trên cho ta biết được các lỗi trong sự kiện Form_Load được xử lý bởi các thao tác bắt lỗi trong thủ tục Form_Load. Nhưng nếu thủ tục GoiThuTuc() cũng có các thao tác bắt lỗi chương trình thì sao? Đơn giản giả sử một lỗi xuất hiện trong GoiThuTuc(). Bộ phận xử lý lỗi của GoiThuTuc (do ta thêm vào để bắt lỗi chương trình) sẽ thực thi thay vì đoạn lệnh bắt lỗi của sự kiện Form_Load được thực hiện. Khi GoiThuTuc chấm dứt, quyền xử lý lỗi mới trao lại cho sự kiện Form_Load.

Sửa lại thủ tục GoiThuTuc như sau:

Public Sub GoiThuTuc()

Dim bien As Integer

On Error GoTo Xulyloicucbo

MsgBox "Truoc khi gan tri cho bien"

bien = "Bien nguyen khong nhan gia tri la chuoi"

MsgBox "Sau khi gan tri cho bien: " & "Bien = " & Format(bien)

Thoatthutuc:

Exit Sub

Xulyloicucbo:

MsgBox "GoiThuTuc() - Loi xay ra: " & Err.Description

Resume Thoatthutuc

End Sub

Bước 8: Lưu dự án và chạy chương trình. Thay đoạn mã Resume Thoatthutuc bằng Resume và chạy chương trình. Một vòng lặp vô tận xảy ra do chương trình sẽ quay lại đoạn mã bị lỗi và cố gắng thực thi nó; để thoát chương trình ta phải bấm tổ hợp phím Ctrl + Break.

Bây giờ thay Resume bằng Resume Next và chạy lại chương trình. Nhận xét kết quả. Giải thích.

Bài tập tự làm

  1. Thiết kế chương trình cho phép nhập vào các hệ số a, b của phương trình bậc 1 dạng: ax+b=0; sau đó giải phương trình này. Giao diện chương trình có thể như sau:

Hình I.17: Phương trình bậc 1

Hình 18
Hình 18 (graphics14.png)

  1. Thiết kế chương trình cho phép nhập vào các hệ số a, b, c của phương trình bậc 2 dạng: ax2 + bx + c=0; sau đó giải phương trình này.
  2. Thiết kế chương trình cho phép nhập vào một ký tự, sau đó kiểm tra xem ký tự đó thuộc tập hợp nào trong các tập ký tự sau:

Các ký tự chữ hoa: 'A' ...'Z'

Các ký tự chữ thường: 'a' ... 'z'

Các ký tự chữ số : '0' ... '9'

Các ký tự khác.

  1. Giải phương trình bậc 1 bằng cách sử dụng cấu trúc Select Case
  2. Tạo một chương trình hiển thị một danh sách chọn lựa cho người dùng trong một ListBox, sau đó xử lý với cấu trúc quyết định Select Case.

Mục đích của điều khiển sự kiện này là hiển thi một danh sách các quốc gia, sau đó hiển thị một thông điệp chào mừng bằng ngôn ngữ bản xứ khi người dùng chọn quốc gia của họ.

Hình 19
Hình 19 (graphics15.png)
Hình 20
Hình 20 (graphics16.png)

Hình I.18: Lời chào các nước

Chẳng hạn: Tiếng Anh: Hello, programmer

Tiếng Đức: Hallo, programmierer

Tiếng Tây Ban Nha: Hola, programador

Tiếng Ý: Ciao, programmatori

  1. Sử dụng vòng lặp For.. Next

Sử dụng For.. Next để thay đổi độ lớn ký tự trên một Form bằng cách thay đổi thuộc tính FontSize của Form.

Thiết kế Form có giao diện:

Hình 21
Hình 21 (graphics17.png)
Hình 22
Hình 22 (graphics18.png)

Hình I.19: For…Next

Sự kiện Command1_Click()

Dim i As Integer

For i = 1 To 10

Form1.FontSize = 10 + i

Print "Line "; i

Next

Chạy chương trình.

  1. Thiết kế chương trình cho phép tính N! (N! = 1*2*3*…*N). Giao diện đề nghị:
Hình 23
Hình 23 (graphics19.png)

Hình I.20: Tính N!

  1. Thiết kế chương trình cho phép nhập vào một số nguyên N; sau đó tính các tổng sau:

a. S=1 + 2 + ... + n

b. S=1/2 + 2/3 + ... +n/(n+1)

c. S= - 1 +2 - 3 +4 - ... + (-1)nn

  1. Thiết kế chương trình cho phép nhập vào số nguyên dương N; sau đó tìm số nguyên dương k nhỏ nhất sao cho 213+324+...+k(k1)(k+1)213+324+...+k(k1)(k+1) size 12{ { {2} over {1*3} } + { {3} over {2*4} } + "." "." "." + { {k} over { \( k - 1 \) * \( k+1 \) } } >= {}} {}N.
  2. Thiết kế chương trình cho phép nhập vào 2 số nguyên A, B; sau đó tìm UCLN và BCNN của hai số a và b theo thuật toán sau ( Ký hiệu UCLN của a, b là (a,b) còn BCNN là [a,b])

- Nếu a chia hết cho b thì (a,b) = b

- Nếu a = b*q + r thì (a,b) = (b,r)

- [a,b] = a*b/(b,r)

  1. Thiết kế chương trình cho phép nhập vào số nguyên N; sau đó viết 1 hàm tính N!; cuối cùng hiển thị kết quả giá trị N!.
  2. Thiết kế chương trình cho phép nhập vào 2 số nguyên N, K; sử dụng hàm tính N! ở trên, viết một hàm tính giá trị tổ hợp chập K của N phần tử theo công thức CNK=N!K!*(NK)!CNK=N!K!*(NK)! size 12{C rSub { size 8{N} } rSup { size 8{K} } = { {N!} over {K"!*" \( N - K \) !} } } {}.
  3. Thiết kế chương trình cho phép nhập vào số thực X và số nguyên N; sau đó viết các hàm tính các tổng sau rồi hiển thị kết quả:

- S= 1 + x +x2 + x3 + ... + xn

- S= 1 - x +x2 - x3 + ... (-1)n xn

- S= 1 + x/1! +x2/2! + x3/3! + ... + xn/n!

  1. Sử dụng vòng lặp Do While … Loop thiết kế chương trình cho phép nhập vào một số nguyên, sau đó thông báo kết quả xem số đó có phải là số nguyên tố hay không?

Đoạn chương trình kiểm tra số nguyên N có nguyên tố hay không:

i = 2

Do While (i < N) And (N Mod i <> 0)

i = i + 1

Loop

If i = N Then N là số nguyên tố

Else N không là nguyên tố

  1. Làm lại bài tập 11 (tính N!) nhưng sử dụng vòng lặp Do While … Loop.
  2. Làm lại bài tập 15 (kiểm tra số nguyên tố) nhưng bằng cách sử dụng Do Until … Loop.
  3. Làm lại bài tập 11 (tính N!) nhưng sử dụng vòng lặp Do Until … Loop.
  4. Thiết kế chương trình cho phép nhập vào một số nguyên N; sau đó phân tích số nguyên này ra thừa số nguyên tố. Giao diện chương trình có thể như sau:
Hình 24
Hình 24 (graphics20.png)

Hình I.21: Thừa số nguyên tố

  1. Sử dụng điều khiển định thời (Timer).

Tạo một chương trình cho phép người dùng 15 giây để nhập mật khẩu trong một TextBox.

Nếu người dùng không nhập mật khẩu đúng trong thời gian nói trên, chương trình hiển thị thông báo “Time Expired” (Hết thời gian) và đóng chương trình.

Thời gian làm bài tập: 30 phút.

Giao diện đề nghị:

Hình 25
Hình 25 (graphics21.png)

Hình I.22: Giao diện

  • Nhập vào mật khẩu cần thiết (giả sử mật khẩu là: Secret)
  • Nếu nhập đúng mật khẩu, rồi nhầp nút Nhập, một hộp thông báo xuất hiện với nội dụng: Ban dang nhap thanh cong.
Hình 26
Hình 26 (graphics22.png)

Hình I.23: Lỗi đăng nhập

  • Nếu nhập mật khẩu sai, rồi nhấp nút Nhập, một thông báo xuất hiện với nội dung: Xin loi, chung toi khong biet ban!
Hình 27
Hình 27 (graphics23.png)

Hình I.24: Lỗi đăng nhập

Sau đó nhấp nút OK trên hộp thông báo này thì chương trình cho bạn nhập lại mật khẩu.

  • Nếu thời gian quá 15 giây mà người dùng chưa nhập đúng mật khẩu thì một thông báo sẽ hiện lên Xin loi, thoi gian da het; sau đó chương trình sẽ kết thúc.
Hình 28
Hình 28 (graphics24.png)

Hình I.25: Báo hết giờ

  1. Thiết kế chương trình tương tự như ứng dụng Canculator của Windows.

Content actions

Download module as:

Add module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks