hn4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com
Full version available at http://4u.jcisio.com/r/article350.htm

Vovisoft

III- Form và các Controls thông thường

Hầu hết các chương trình VB6 đều có ít nhất một Form. Khi ta chạy chương trình, Form nầy sẽ hiện ra trước hết để ta ra lệnh nó làm chuyện gì. Cái Form trống không chả làm được gì nhiều, nên ta đặt lên Form những controls như Textbox(hộp để đánh chữ vào), Label(nhãn), Commandbutton(nút bấm mệnh lệnh), .v.v.. Các controls cho ta enter các dữ kiện để chương trình dùng xử lý, và các controls cũng hiển thị (display) kết quả cho chúng ta xem.

Sắp đặt controls lên Form

Ta hãy bắt đầu thiết kế một chương trình mới (New Project) bằng cách chọn Standard EXE, môi trường triển khai lập trình (IDE) cho bạn sẵn một Form tên là Form1. Muốn đặt một Control lên Form, click hình cái Control trong Toolbox rồi Drag (bấm nút trái của con chuột rồi kéo cho thành hình chữ nhật trước khi buông nút trái ra) con chuột trên Form vẽ thành cở của Control. Một cách khác để đặt một control lên Form là doubleclick cái Control trong Toolbox, một hình control sẽ hiện ra trên Form. Kế đó bạn dời control đi đến chỗ mình muốn và resize nó. Nếu bất cứ lúc nào bạn không thấy Túi đồ nghề (Toolbox) nằm bên trái, bạn có thể dùng mệnh lệnh Menu View|Toolbox để bắt nó hiện ra. Có một cách khác là click lên toolbox icon trên toolbar chính của VB6.

http://hainam/data/knowledge/it/gif/vb/toolboxicon.jpg

Nên nhớ rằng Toolbox cũng là một window như các window khác. Khi nó hiện lên rồi bạn có thể nắm (bấm nút trái của con chuột và giữ như vậy chớ không buông ra) title nó để dời đi nơi khác. Bạn có thể đóng nó bằng cách click lên dấu x ở góc phải phía trên. Nếu right click trên Toolbox, nó sẽ display context sensitive menu, trong đó có property dockable (có thể đậu ở bến) . Nếu một window là dockable, sau khi bạn dời nó đi khỏi vi trí docked bình thường của nó, bạn có thể dock nó lại như củ bằng cách double click lên title của nó.

Resize và di chuyển control

Khi bạn select một control (click lên nó), chung quanh control sẽ hiện ra resize handle, 8 nút đen dọc theo chu vi của control.

http://hainam/data/knowledge/it/gif/vb/resize.jpg

Click lên các nút đen của resize handle, bạn có thể resize control. Có một cách khác để resize control là dùng Shift + ArrowKey. Bấm nút Shift trong khi bấm một arrow key, control sẽ lớn ra hay thu hẹp theo chiều của ArrowKey.

Lưu ý: Một số control có kích thước tối thiểu, bạn không thể làm cho nó nhỏ hơn được. Thí dụ như Combobox, nó phải cao đủ để display một hàng text.

Tương tự như thế, bấm nút Ctrl trong khi bấm một arrow key, control sẽ di chuyển theo chiều của ArrowKey.

Ngoài ra, nên nhớ rằng trong lúc chương trình chạy (at run-time), trong code ta có thể thay đổi kích thước và vị trí các controls dễ dàng, thậm chí có thể làm cho chúng hiện ra hay biến mất bằng cách sửa đổi value các property left, top, width, height và visible của các controls.

Alignment Grid

Để giúp bạn sắp đặt ngay ngắn các controls trên một form, VB6 cho bạn Alignment Grid. Nó là những dấu đen của các hàng dọc và xuôi trên form. Bạn có thể làm cho các dấu đen của grid trên form biến mất bằng cách dùng menu command Tools | Options để display Option Dialog, kế đó chọn Tag General và clear checkbox "Show Grid":

http://hainam/data/knowledge/it/gif/vb/optiongeneral.jpg

Bạn cũng có thể nhân dịp nầy thay đổi khoảng cách chiều rộng (Width) và chiều cao (Height) của các chấm đen của grid. Kích thước nhỏ nhất của Width hay Height là 24. Hãy so sánh hai trường hợp form có và không có Show Grid như dưới đây:

http://hainam/data/knowledge/it/gif/vb/formgrid.jpg

http://hainam/data/knowledge/it/gif/vb/formclear.jpg

Control Locking

Một khi bạn đã sắp đặt kích thước và vị trí của các control trên form rồi, rất dễ ta tình cờ thay đổi các đặc tính ấy vì vô ý click lên một control. Do đó VB6 cho ta Menu command Format | Lock Controls để khóa chúng lại. Sau khi khóa, cái hình ống khóa trên menu bị chìm xuống.

http://hainam/data/knowledge/it/gif/vb/lockicon.jpg

Nếu sau nầy bạn muốn thay đổi kích thước hoặc vị trí của chúng thì nhớ dùng Menu command Format | Lock Controls lại. Sau khi mở khóa, cái hình ống khóa trên menu hiện ra bình thường.

Cài đặt các Properties của Form

Nhiều property của một form ảnh hưởng đến diện mạo vật lý (physical appearance) của nó. Property Caption sẽ quyết định text được hiểu thị trong title. Nếu Property BorderStyle của form không phải là Sizable thì User không thể resize form at run-time. Property Icon quyết định hình icon đuợc dùng trong title của form, nhất là khi form thu nhỏ (minimized). Nếu bạn không muốn cho phép User minimize hay maximize form thì set value của property MinButton, MaxButton ra False. Nếu property ControlBox là False thì form sẽ không có nút minize, maximize hay close (x) trên góc phải của nó, đồng thời form cũng không display cả icon bên góc trái title như trong hình dưới đây:

http://hainam/data/knowledge/it/gif/vb/nocontrolbox.jpg

Vị trí đầu tiên (top,left) của form có thể được thay đổi trong design time bằng cách di chuyển hình nhỏ của nó trong window Form Layout:

http://hainam/data/knowledge/it/gif/vb/formlayout.jpg

Property WindowState xác định Form sẽ có kích thước bình thường (normal=0), hay minimized (=1), maximized =(2).

Lưu ý là property Font của Form sẽ được các control nằm trên nó thừa kế. Tức là khi bạn đặt một control lên form, property Font của control ấy sẽ tự động trở nên giống y như của form.

Vài Event thông dụng của Form

Nhìn từ một phương diện, Form cũng giống như Control. Ta có thể instantiate một form nhiều lần để có nhiều form tương tợ nhau. Trong thí dụ dưới đây, ta instantiate Form2 hai lần để có MyForm và YourForm: Private Sub CmdCreateForms_Click()

Mã lệnh (VB)
Dim MyForm, YourForm
Set MyForm = New Form2
MyForm.Caption = "This is My Form"
MyForm.Show
MyForm.Move 1000, 1000
Set YourForm = New Form2
YourForm.Caption = "YOUR FORM IS HERE"
YourForm.Show
YourForm.Move 2000, 2000
End Sub

Một Form cũng có nhiều Events rất hữu dụng.

TextBox

TextBox là control đuợc dùng nhiều nhất để display text và nhận keystroke của Userđể sửa đổi text có sẵn hay cho vào text mới. Property chính và default của Textbox là text, tức là thường thường Text2.text có thể được viết tắt là Text2. Ta có thể disable (khiến nó bất lực, không phản ứng gì hết và không cho sửa đổi) một text box bằng cách set Property Enable ra False (chữ sẽ bị mờ đi), hay Lock (không cho sửa đổi) một text box bằng cách set Property Locked ra True (chữ không bị mờ).

Text có thể được Align (Alignment Property) để display bên trái, chính giữa hay bên phải của hộp nó.

http://hainam/data/knowledge/it/gif/vb/alignment.jpg

Bạn có thể chọn BackColor và ForeColor cho background và text của TextBox. Dùng Tag Palette khi chọn màu để có đúng một màu bạn muốn.

http://hainam/data/knowledge/it/gif/vb/forcolor.jpg

Dĩ nhiên bạn có thể lựa chọn Font và cở chữ cho Text với Font Property.

Bạn giới hạn số characters mà User có thể enter cho TextBox bằng cách set MaxLength Property.

Nếu Property Multiline là True thì User có thể enter nhiều hàng. At Design time, nếu bạn muốn enter multiline thì phải nhớ bấm nút Ctrl khi press Enter mỗi khi xuống hàng. Nếu không VB6 IDE tưởng rằng bạn đã kết thúc editing.

http://hainam/data/knowledge/it/gif/vb/multiline.jpg

Muốn assign cho text box multiline text thì phải nhét vào mỗi cuối hàng CarriageReturn và LineFeed characters. Thí dụ như:

Mã lệnh (VB)
Private Sub Command1_Click()
Dim TextStr
TextStr = "Bau ra bau lay ong cau" & vbCrLf  ' Note: vbCrLf = chr(13) & chr(10)
TextStr = TextStr & "Bau cau ca bong ngat dau kho tieu"
Text1.Text = TextStr
End Sub

Nếu bạn muốn mách nước cho User về cách dùng một textbox nào đó thì có thể dùng Property ToolTipText để nó display mách nước mỗi khi mouse cursor nằm lên textbox.

http://hainam/data/knowledge/it/gif/vb/tooltip.jpg

Dùng Property TabIndex để ấn định thứ tự cho Tab Cursor dừng mỗi khi User bấm nút TAB để dời TAB Cursor đến Textbox kế tiếp. Nếu bạn không muốn Tab Cursor dừng ở một TextBox nào thì set Property TabStop nó thành False. Tab Cursor không dừng ở Textbox có Property Enabled bằng False, nhưng vẫn dừng ở Textbox có property Locked bằng True.

Nếu bạn muốn dùng Textbox làm một Password field thì set Property PasswordChar bằng "*". Làm như thế sẽ ép buộc Textbox display mọi character bằng PasswordChar, tức là "*", để người khác không đọc được trong khi User enter một Paswword.

http://hainam/data/knowledge/it/gif/vb/password.jpg

Properties SelLength, SelStart và SelText

Nếu bạn muốn biết được tình hình hiện thời của Textbox: SelText cho bạn dãy chữ đang được selected. SelStart cho bạn vị trí của insertion point (chỗ cursor flashing). SelLength cho biết con số characters đã được selected.

Nếu bạn muốn sửa đổi text trong Textbox: SelText cho bạn nhét vào một dãy chữ. SelStart cho bạn ấn định vị trí bắt đầu của dãy chữ bạn sắp select. SelLength ấn định số characters bạn muốn chọn, bắt đầu từ SelStart.

Dưới đây là một thí dụ trong đó ta highlight text tìm được:

Mã lệnh (VB)
Private Sub Form_Click ()
Dim Search, Where  ' Declare variables.
' Get search string from user.
Search = InputBox("Enter text to be found:")
Where = InStr(Text1.Text, Search)  ' Find the given string in Text1.Text.
If Where > 0 Then  ' If found,
Text1.SelStart = Where - 1  ' set selection start and
Text1.SelLength = Len(Search)  ' set selection length.
Else
MsgBox "String not found."  ' Notify user.
End If
End Sub

CommandButton

CommandButton rất tiện cho ta dùng vào việc xử lý một chuyện gì khi User click lên button. Event ta dùng thường nhất cho CommanButton là Click. Ta dùng Property Caption của CommandButton để enter cái gì ta muốn display trên button. Nếu muốn cho phép User dùng ALT+E (đè nút Atl trong lúc bấm nút E) để generate event click thì nhét dấu "&" trước chữ E trong Caption của button. Caption sẽ display chữ E với một gạch dưới.

Ngoài ra ta cũng có thể cho thêm một cái hình vào CommandButton bằng cách chọn một icon cho property Picture và set Property Style ra Graphical, thay vì Standard.

http://hainam/data/knowledge/it/gif/vb/exit.jpg

Lúc Run-time bạn có thể thay đổi hình hay Caption của CommandButton. Trong thí dụ dưới đây, Caption của CommandButton CmdOperation flip-flop giữa hai values Stop và Start:

Mã lệnh (VB)
Private Sub CmdOperation_Click()
If CmdOperation.Caption = "&Stop" Then
CmdOperation.Caption = "St&art"
Else
CmdOperation.Caption = "&Stop"
End If
End Sub

Label

Mục đích chính của Label là để display, không cho User Edit như Textbox. Do đó ta có thể dùng Property Font, ForeColor và Backcolor để làm cho nó đẹp. Ngoài ra Property BorderStyle có thể cho Label lỏm xuống nếu bạn set nó bằng Fixed Single. Nếu set property BackStyle bằng Transparent sẽ tránh trường hợp Backcolor của Label làm cho không đẹp.

Label cũng có Property Tabindex. Nếu bạn muốn dùng ALT key để mang Tab Cursor về một Textbox, hãy để một Label với TabIndex bằng TabIndex của TextBox trừ 1. Giả sử Label có Caption là "&Address" thì ALT+A sẽ mang Tab Cursor về TextBox màu vàng như trong thí dụ dưới đây:

http://hainam/data/knowledge/it/gif/vb/altcursor.jpg

Ngoài ra nhớ rằng bạn có thể thay đổi Caption của Label lúc run-time.

CheckBox

CheckBox được dùng để User xác nhận có đặc tính nào một cách nhanh chóng. Property Value của CheckBox có thể là Checked (làm cho hộp vuông có dấu, bằng 1), Unchecked (làm cho hộp vuông trống không, bằng 0) hay Grayed (làm cho hộp vuông có dấu màu nhạt, bằng 2). Một khi biết rằng CheckBox có Value bằng 1, ta có thể đọc Caption của CheckBox để dùng nếu cần.

http://hainam/data/knowledge/it/gif/vb/checkbox.jpg

Bạn có thể dùng Property Alignment để làm cho Caption đứng bên phải (Left Justify) hay bên trái (Right Justify) của hộp vuông.

OptionButton

OptionButton (còn gọi là RadioButton) có hình tròn với một chấm ở giữa, thay gì hình vuông với một gạch ở giữa như CheckBox. OptionButton luôn luôn được qui tụ thành một nhóm, chứa trong một container. Container là một Control có khả năng chứa các controls khác. Frame, PictureBox, hay chính Form đều là Container. Sau khi đặt một Container lên Form, nếu muốn để một OptionButton lên Container, trước hết ta phải Select container, rồi kế đó chọn OptionButton. Sở dĩ, tất cả OptionButtons phải nằm trong một container là vì bất cứ lúc nào, nhiều nhất là một OptionButton trong container có value True (vòng tròn có chấm ở giữa).

Muốn biết một OptionButton có thật sự nằm trong một container, bạn thử kéo cái container đi chỗ khác. Nếu OptionButton bị dời theo container thì nó nằm trong container. Một cách khác là thử kéo OptionButton ra khỏi container. Nếu kéo ra được thì nó không nằm trong container.

Muốn di chuyển một OptionButton từ container nầy sang container khác, bạn Cut OptionButton rồi Paste nó vô container kia.

http://hainam/data/knowledge/it/gif/vb/option.jpg

Đôi khi một container nằm che trên một control khác. Muốn mang một container ra phía sau các controls khác bạn Select container rồi dùng Menu command Format | Order | Send to Back.

http://hainam/data/knowledge/it/gif/vb/sendtoback.jpg


hainam4u @ Last updated 21/11/04 22:42
Go to my homepage at http://4u.jcisio.com