Là đối tượng dùng để chứa các bảng dữ liệu hay View cùng với các quan hệ của chúng mà Form cần sử dụng. DATA ENVIRONMENT tự động mở các bảng và View khi Form được khởi động và cũng tựđóng chúng khi kết thúc làm việc với Form.
Thiết lập DATA ENVIRONMENT:
• Mở Form cần làm việc ở chếđộ Form Design.
R_Click lên vùng trống trong Data Environment ->click Add để thêm các bảng, View. Một sốđối tượng trên Controls
• Các đối tượng điều khiển (Control) được sử dụng trong việc thiết kế giao diện trên Form, Report, Label. Ví dụ giao diện sau được thiết kế từ FORM và các control.
• Mỗi loại đối tượng thường được thiết kế cho một mục đích nhất định. Ví dụđối tượng Label (nhãn) được dùng để hiển thị
một chú thích, đối tượng TextBox được dùng để cho phép nhập liệu, đối tượng Command Button để thể hiện các nút lệnh... Tuy nhiên có thể sử dụng với mục đích khác.
• Các Control được xác định qua các Properties (thuộc tính), Methods (Phương thức) và Events (sự kiện - tương tự như
FORM).
• Thanh công cụ Form Controls: Khi đang mở Form ở chế độ
thiết kế (Form Designer), Visual Foxpro hiển thị thanh công cụ Form Controls như hình bên.
• Có thể hiển thị/ẩn Form Control bằng cách trong menu View chọn Form Control Toolbar.
• Muốn đưa đối tượng trên thanh Control vào form: 4 bước
o Kích chuột vào đối tượng cần đưa.
o Vẽ nó trên form để xác định vị trí.
o Thiết lập các thuộc tính thích hợp.
V. Tạo giao diện Single – Multiple Document
Multiple Document Interface (MDI): Là ứng dụng chứa một cửa sổ chính và các cửa sổ
khác của ứng dụng được chứa trong hay nằm trên cửa sổ chính.
Single Document Interface (SDI): Là ứng dụng chứa một hay nhiều cửa sổ độc lập, mỗi một cửa sổđều xuất hiện trên màn hình nền của Window.
Visual Foxpro cho phép tạo nhiều loại form:
• Child form: Là form nằm trong một form khác, được dùng trong một ứng dụng MDI. Form con không thêt di chuyển ra khỏi form cha. Khi bị thu nhỏ, nó nằm dưới cửa sổ form cha.
• Floating form: Là form thuộc về một form cha, có thể di chuyển khắp màn hình nhưng không thể di chuyển ra sau cửa sổ cha.
• Top-level Form: Là form độc lập, không ảnh hưởng đến form cha, nó được dùng
để tạo ứng dụng dạng SDI hay làm form cha cho các form con khác trong ứng dụng MDI.
• Yêu cầu của một Top-level form:
o Dùng form design tạo mới hoặc chỉnh sửa một form.
o Thuộc tính ShowWindow: 2 – As Top Level Form. • Yêu cầu của một form con:
o Dùng form design tạo mới hoặc chỉnh sửa một form.
o Thuộc tính ShowWindow: chọn một trong hai giá trị:
0 – Inscreen: Form cha sẽ trở thành cửa sổ chính của Visual Foxpro.
1 – In Top-Level Form: cửa sổ con xuất hiện bên trong một cửa sổ
dạng Top-Level.
VI. Form set
VII. Sử dụng Control
Control dùng để thao tác với cơ sở dữ liệu, có thể dùng để gõ nội dung vào, click và di chuyển chúng khắp trên Form. Có hai loại Control:
• Control gắn liền với dữ liệu: giá trị gõ vào hoặc được chọn sẽ được lưu vào trong dữ liệu nguồn thông qua việc thiết lập thuộc tính ControlSource hoặc RecordSource.
• Control không gắn liền với dữ liệu. Các loại chức năng muốn xây dựng trên Form:
• Cung cấp cho người sử dụng các giá trị có thể chọn.
• Cho phép người sử dụng nhập các giá trị không thểđịnh trước.
• Cho phép người sử dụng một giá trị nằm trong một khoảng nhất định. • Thể hiện thông tin.
Thêm một control vào form:
• Trên thanh công cụ Form Control, chọn nút Control cần dùng:
o Hoặc Click lên trên Form.
• Khai báo nguồn dữ liệu thông qua thuộc tính ControlSource hoặc RecordSource
1. Label:
Sử dụng cho: hiển thị nhãn, chú thích. Các Properties thường sử dụng:
• Alignment: Canh lề phần text hiển thị của label. Thuộc tính này có thể nhận các giá trị:
• 0 – Left
• 1-Right Canh phải; • 2 - Center canh giữa.
• Autosize: Tự động thay đổi kích thước phù hợp cho việc hiển thị thuộc tính Caption của nó.
• BackColor: Đặt mầu nền của Label. Trong khi thiết kế có thể dùng hộp mầu để
chọn hoặc khi chạy chương trình có thể sử dụng hàm RBG() để xác định mầu. • BackStyle: Thiết lập tính chất nền. Thuộc tính này có thể nhận một trong các giá trị:
• 0 - Transparent xác định tính chất trong suốt của nền (có thể nhìn thấy mọi
đối tượng “phía sau”);
• 1 - Opaque không cho quan sát các đối tượng phía sau. • BorderStyle: Thiết lập thuộc tính đường viên của đối tượng.
• Caption: Text hiển thị như một nhãn. Thuộc tính này nhận chuỗi text bất kỳ. • FontName: Đặt Font chữ.
• ForeColor: Đặt mầu chữ. Trong khi thiết kế có thể dùng hộp mầu để chọn hoặc khi chạy chương trình có thể sử dụng hàm RBG() để xác định.
• Height: Chiều cao • Left: Vị trí cạnh trái
• Name: Tên của đối tượng (dùng để sử dụng trong chương trình) • Top: Vị trí cạnh trên
• Visible: Thiết lập tính chất Hiện/ẩn. Thuộc tính này nhận 2 giá trị: .T. hoặc .F. • Width: Độ rộng của label.
Label cũng có nhiều Methods và Events, tuy nhiên vì mục đích của đối tượng này là hiển thị một đoạn text nên trong phần này không giới thiệu các methods và events này.
2. TextBox
Cho phép người sử dụng nhập dữ liệu không định trước hoặc chỉnh sửa dữ liệu trong các field không thuộc kiểu memo.
• ControlSource: Cho phép “gắn kết” (bound) textbox với 1 trường hoặc biến nào
đó (thông thường với 1 trường). Việc “Gắn kết” ởđây được hiểu là nếu text trên textbox thay đổi thì trường hoặc biến “gắn kết” với nó cũng thay đổi theo. Ví dụ, thêm 1 textbox vào form và đặt thuộc tính controlSource=”Hososv.hoten” - >Run Form.
• Enabled: Cho phép có hiệu lực hay vô hiệu khả năng đáp ứng sự kiện của textbox. Thuộc tính này nhận các giá trị: .T. - có hiệu lực; .F. - Vô hiệu lực • Format: Định dạng dữ liệu hiển thị. Visual Foxpro qui định kí hiệu sử dụng cho
Format của textbox. Ví dụ đặt Format là !A (! - Hiển thị chữ hoa, A - Chỉ nhập các ký tự)
• InputMask: Định dạng dữ liệu nhập. Visual Foxpro qui định kí hiệu sử dụng cho InputMask của textbox.
o Ví dụ đặt InputMask là ### (# - nhập chữ số) cho phép nhập 3 chữ số
hoặc 999,999.99 để giới hạn giá trị số nhập vào chỉ được nhỏ hơn 1000000 và chỉ có 2 số lẻ, dấu phẩy (,) và dấu chấm (.) sẽ tự động xuất hiện trong vùng nhập.
o Nội dung text box hiển thị dưới dạng Password: thuộc tính PasswordChar
được khai báo bằng kí tự hiển thị thay thế, chẳng hạn: dấu *
• MaxLength: Số ký tự tối đa có thể nhập (nếu MaxLength=0 thì số ký tự là bất kỳ, đây là giá trị mặc định).
• SelectOnEntry: Thiết lập chế độ đánh dấu text khi đối tượng này nhận quyền
điều khiển. Thuộc tính này nhận các giá trị: .T. - Cho phép chế độđánh dấu; .F. Không cho phép.
• TabIndex: Thứ tự theo Index của đối tượng (khi sử dụng phím Tab con trỏ sẽ di chuyển theo thứ tự Index từ thấp đến cao)
• TabStop: cho phép hay không việc sử dụng phím tắt để điều khiển, nếu không thì chỉđược sử dụng chuột để chọn textbox.
• Value: Giá trị là xâu text hiển thị trên đối tượng này. Nhập dữ liệu dạng ngày: thiết lập các thuộc tính
Property Diễn giải
Century Cho phép hay không xuất hiện 2 kí tự số dầu tiên của năm
Dateformat Định dạng ngày nhập theo 15 dạng quy ước theo Mỹ, Nhật, Đức,.. StrictDateEntry Cho phép gõ dạng ngày khác với mặc định là 99/99/99
• Các Methods và Event thường sử dụng:
• Refresh (method): “Làm tươi” lại dữ liệu hiển thị trên textbox. Ví dụ, đặt thuộc tính ControlSource = text1 (text1 là 1 biến), sau đó gán cho text1 =”Visual Foxpro”, khi đó cần thực hiện Refresh để làm tươi lại dữ liệu trên Text.
• Valid (Event): Sự kiện này xảy ra trước khi chuyển quyền điều khiển tới đối tượng khác. Vì lý do như vậy nên sự kiện này thường dùng để kiểm tra tính hợp lệ của dữ liệu, nếu không hợp lệ thì có thể yêu cầu người sử dụng nhập lại.
Ví dụ 1: Trong hình 1, xét ô text học kỳ. Ta có học kỳ chỉ nhận 2 giá trị là 1 hoặc 2, để đảm bảo yêu cầu này chúng ta sẽ viết đoạn lệnh đáp ứng sự kiện validđể kiểm.
Giá thiết textbox được thiết lập các thuộc tính Name = hocky
Maxlength=1
Khi đó sự kiện hocky.valid được viết như sau:
hk=this.value IF !hk$"1;2" then
WAIT WINDOW "Gia tri khong dung! Hoc ky = 1 hoac 2" NOWAIT RETURN 0
ENDIF
Ví dụ 2: Trong hình 1, xét ô text khóa. Ta thấy các khóa nhập vào ở đây phải nằm trong DMKHOA thì mới có nghĩa -> Viết sự kiện valid để kiểm tra tính hợp lệ này của ô text khóa.
Giá thiết textbox được thiết lập các thuộc tính: Name = Khoa
Maxlength=10
Khi đó sự kiện Khoa.valid được viết như sau:
khoahoc=this.Value SELECT dmkhoa
LOCATE FOR (ma=khoahoc)
IF FOUND() THEN
thisform.lblTenKhoa.Caption=dmkhoa.ten
ELSE
IF !EMPTY(khoahoc) THEN
WAIT WINDOW "Ma khoa khong dung!!" NOWAIT RETURN 0
ELSE
ENDIF ENDIF
• Đối tượng EditBox tương đối giống TextBox (khác biệt chủ yếu là cho phép soạn text trên nhiều dòng).
3. EditBox
Cho phép chỉnh sửa dữ liệu cho một field kí tự hay memo. Edit box có chế độ tựđộng Word-Wrapping, dùng các phím chức năng, Page Up, Page Down và thanh cuộn để di chuyển trong cửa sổ Edit box.
Property Diễn giải
ControlSource Khai báo nguồn dữ liệu gắn với Edit box, thường là 1 field của table AllowTabs Cho phép chèn Tab vào trong Edit box. Nếu cho phép điều này thì
người sử dụng phải sử dụng Ctrl+Tab để di chuyển đến các control khác trên Form.
ReadOnly Cho phép chỉnh sửa nội dung hay không.
ScrollBars Có hiển thị thanh cuộn trong khung Edit box hay không.
4. Spinner
Thường được dùng chọn hoặc nhập vùng giá trị kiểu số. Các thuộc tính thông dụng:
Property Diễn giải
Interval Độ tăng hay giảm mỗi khi người sử dụng click mũi tên lên/ xuống.
KeyboardHighValue Giá trị lớn nhất mà người sử dụng có thể nhập vào.
SpinnerHighValue Giá trị lớn nhất mà spinner hiển thị khi click vào mũi tên lên. KeyboardLowValue Giá trị nhỏ nhất mà người sử dụng có thể nhập vào.
SpinnerLowValue Giá trị nhỏ nhất mà spinner hiển thị khi click vào mũi tên lên.
5. Command Button và Command Button Group
Sử dụng cho: Tạo các nút lệnh. Các Properties thường sử dụng:
Property Diễn giải
Caption Text hiển thị như tên (khác với name) của nút lệnh DisabledPicture Hình sẽ hiển thị khi nút này không có tác dụng. DownPicture Hình sẽ hiển thị khi nút này được nhấn.
Enabled Nút này có thể chọn được hay không. Picture Cho phép đưa một ảnh vào nút lệnh.
• Click (Event): Sự kiện này xảy ra khi người sử dụng click chuột trái vào nút lệnh (nút lệnh được thiết kế chính đểđáp ứng sự kiện này).
Ví dụ 1: Thêm vào form nút lệnh “Thoát” đểđóng form, thiết lập các thuộc tính: Caption=Thoát
Name=cmdThoat
Khi đó dự kiện cmdThoat.Click được viết như sau:
IF MESSAGEBOX("Dong form nay lai?",4+32)=6 THEN thisform.Release
ENDIF
Đáp ứng thao tác Click trong nhóm các nút lệnh, có thể dùng thủ tục chung: DO CASE CASE THIS.Value=1 <Thực hiện thủ tục đối với nút 1> CASE THIS.Value=2 <Thực hiện thủ tục đối với nút 2> CASE THIS.Value=3 <Thực hiện thủ tục đối với nút 3> END CASE
Các thuộc tính thông dụng của Command Button Group
Property Diễn giải
ButtonCount Số lượng nút trong nhóm.
BackStyle Nền của nhóm nút sẽ trong suốt (transparent) hay mờđục.
6. Option button Group
Sử dụng cho: Cho phép người sử dụng chỉ chọn một giá trịđưa ra. Các Properties thường sử dụng:
• ControlSource: Nguồn dữ liệu gắn với option group.
• ButtonCount: Số option button. Mặc định là 2 và option button đầu tiên được chọn.
• Value: Giá tị trả về của option, giá trị này là số thứ tự mục chọn.
ControlSource thường là field số (0 hay 1) hoặc kiểu logic (.T., .F.). ControlSource của từng Option button không thể là kiểu kí tự.
Khi thiết kế, có thể thay đổi một số thuộc tính khác của OptionGroup bằng cách click chuột phải vào đối tượng, tiếp đến chon Builder..
Vì đây là một dạng container nên để thay đổi các thuộc tính của từng phần tử , R_Click vào đối tượng/ Edit và chọn phần tửđể thiết lập các thay đổi.
Các Methods và Events thường dùng: Không có methods, hoặc event nào đặt biệt.
7. CheckBox
Sử dụng cho: Lựa chọn một trong 2 khả năng: đúng hay sai, bật hay tắt, mở hay đóng. Bốn trạng thái của checkbox: 0 (.F.), 1 (.T.), 2, NULL (Ctrl+O)
Nếu ControlSource của checkbox là một field logic thì giá trị của record tương ứng sẽ được hiển thị: chọn nếu là .T. hoặc ngược lại, không chọn nếu là .F.
Các Properties thường dùng:
• Caption: Thể hiện phần text của đối tượng
• Value: Checked - Giá trị 1 hoặc .T.; Unchecked - Giá trị 0 hoặc .F. Các Methods và Events thường dùng:
• Click (Event): Xảy ra khi người sử dụng click chuột trái vào check box.
Ví dụ: Giả sử dùng check box để hiển thị thông tin về giới tính với qui ước checked - Nam, và Unchecked là nữ.
Khi đó sự kiện click được viết như sau:
IF this.Value THEN
this.Caption="Nam"
ELSE
this.Caption="N÷"
ENDIF
8. List box và Drop-down List box
Cung cấp cho người sử dụng một danh sách cuốn, chứa một số thông tin để chọn. Trong List box, nhiều mục được thể hiện một lúc. Drop-down list box chỉ có một mục
được thể hiện nhưng có mũi tên xuống để thể hiện danh sách các mục.
• 0 (Drop-down Combo): vừa cho phép chọn một mục trong danh sách, vừa có thể gõ giá trị cần tìm để di chuyển nhanh đến một mục.
• 2 (Drop-down List): chỉ cho phép chọn mục từ danh sách. Các thuộc tính và Method thông dụng:
Method Diễn giải
AddItem Thêm một mục vào danh sách với điều kiện giá trị thuộc tính RowSource là 0
RemoveItem Gỡ bỏ một mục ra khỏi danh sách với điều kiện giá trị thuộc tính RowSource là 0
Requery Cập nhật danh sách nếu giá trị trong RowSource bị thay đổi.
Điền giá trị:
Thông tin cho List box và Combo box có thể từ nhiều nguồn khác nhau thông qua việc thiết lập các thuộc tính RowSourceType và RowSource
RowSourceType Nguồn dữ liệu cho các mục của danh sách
0: None Người sử dụng phải tự thêm các mục vào danh sách. Có thể sử
dụng method AddItem và RemoveItem.
1: Value Phải chỉ rõ giá trị trong thuộc tính RowSource.
2: Alias Nguồn giá trị từ một hay nhiều field của Table. Thuộc tính ColumnCount cho phép khai báo các field đầu tiên cần thể hiện. 3: SQL statement Thêm câu lệnh SQL vào thuộc tính RowSource. Có thể thể hiện
thông tin từ nhiều Table.
4: Query Nội dung của danh sách là kết quả của một Query được thiết kế
trong Query Designer. Khai báo tên của query trong RowSource. 5: Array Nguồn dữ liệu là từ các phần tử của mảng.
6: Fields Chỉ rõ field hay danh sách field cần thể hiện. Dùng dấu phẩy để
phân cách giữa các field trong RowSource. Sử dụng thuộc tính ColumnWidths để quy định độ rộng của các cột.
7: Files Nội dung thể hiện là danh sách các file có trong thư mục hiện hành Chọn nhiều mục một lúc trong ListBox: khai báo thuộc tính MultiSelect = .T.
Các thuộc tính của Combo box
Property Diễn giải
ControlSource Chỉ rõ field trong table, nơi dùng để lưu giá trị được chọn hay gõ vào từ danh sách.
DisplayControl Chỉ rõ số lượng mục được hiển thị trong danh sách. InputMask Chỉ rõ loại dữ liệu có thể gõ vào trong combo box
IncrementalSearch Có so khớp mục đầu tiên trong danh sách khi người sử dụng gõ từng kí tự hay không.
RowSource Chỉ rõ nguồn dữ liệu của các mục trong danh sách.
9. Grid Dùng để thể hiện dữ liệu theo dạng bảng. Các thuộc tính thường dùng. • Row Source: Xác định bảng dữ liệu cần thể hiện.