1 Lập trình xử lý giao diện
1.1 Menu
Có 2 loại menu:
- Menu thả xuống(Drop-down menu): là dạng menu thông dụng nhất.
- Menu bật ra (Popup menu): Thường hiển thị khi ta nhấn nút phải chuột
Menu cũng là một loại điều khiển, nhưng windows sẽ kiểm soát việc vẽ menu. Lập trình viên
chỉ quản lý phần xử lý các sự kiện mà thôi.
1.1.1 Dùng trình soạn thảo menu để tạo menu
Menu không chứa trong hộp công cụ như những điều khiển khác, mà được thiết kế bằng trình
soạn thảo menu. Từ menu tools, chọn Menu editor để mở rộng chương trình này hoặc dùng Ctrl +
E hoặc nhấn biểu tượng trong menu của Visual basic
Chú ý nếu chưa có biểu mẫu thì biểu tượng này không xuất hiện trên thanh công cụ.
1.1.1.1Các thuộc tính của menu
Thuộc tính của menu không chứa trong cửa sổ thuộc tính như các điều khiển khác mà đặt trong
trình soạn thảo menu.
Thuộc tính caption: Là chuỗi ký tự hiển thị trên menu.
Thuộc tính name: Phải được đặt duy nhất và dễ nhớ. Có 2 cách đặt tên:
- Nhóm các mục có cùng cha trên menu vào chung một dãy các điều khiển và dùng chung
một tên. Cách này được Visual basic hết sức khuyến khích.
- Mỗi mục có một tên riêng, nhưng nên bắt đầu bằng mnu. ví dụ mnuFile
Thuộc tính index: Dùng với dãy các điều khiển menu. Trong đó, vì có nhiều mục cùng tên nên
index được dùng cho phân biệt giữa chúng với nhau.
Thuộc tính shortcut: Người sử dụng có thể nhấn chuột để chọn menu theo cách bình thường,
hoặc dùng phím tắt. VD: nhấn Ctrl+C thay vì chọn Copy.
Thuộc tính Windows list: dùng trong các ứng dụng MDI. Đây là những ứng dụng có một biểu
mẫu chính và nhiều biểu mẫu con. Thuộc tính windowsList ra lệnh cho Visual basic hiển thị
tiêu đề của các cửa sổ con trên menu.
Thuộc tính Checked: Nếu chọn thuộc tính này, trên menu sẽ hiển thị một dấu bên cạnh. Tuy
nhiên, thuộc tính này không được gán cho những mục menu đang chứa menu con.
Thuộc tính enable: Nếu thuộc tính này không được chọn người sử dụng không thể chọn và đó
được.
kiểu hộp thoại:
- Thông điệp
- Hộp nhập
- Các hộp thoại thông dụng
- Hộp thoại hiệu chỉnh.
1.2.1 Thông điệp(Message box)
Là dạng hộp thoại đơn giản nhất, gồm hai loại:
- Chỉ cung cấp thông tin
- Tương tác với người sử dụng.
1.2.1.1Chiều dài thông điệp
Windows tự động cắt chuỗi khi nó quá dài, nhưng đôi khi việc này không đúng ý muốn của lập
trình viên. Ta có thể làm bằng tay:
MsgBox “This is a multi-line” & chr$(10) & “message.”
Hàm chr$() trả về ký tự có mã ASCII là tham số truyền vào chr$(10) trả về dòng ký tự mới.
1.2.1.2Các loại thông điệp
Hằng số Thể hiện
vbOKOnly OK
vbOKCancel OK, Cancel
vbAbortRetryIgnore Abort, Retry, Ignore
vbYesNoCancel Yes, No, Cancel
vbYesNo Yes, No
vbRetryCancel Retry, Cancel
1.2.2 Hộp nhập(Input box)
Input box ít được dùng. Lý do là:
- Không có cách nào để kiểm định dữ liệu mà người sử dụng đưa vào khi họ chưa nhấn
Enter. Nếu dùng biểu mẫu do chính mình thiết kế, ta có thể đưa vào hộp văn bản và viết
chương trình để xử lý sự kiện liên quan đến việc kiểm tra dữ liệu mà với Input box không
thể làm được.
- InputBox chỉ cho người sử dụng nhập rất ít thông tin. Muốn lấy ra được nhiều thông tin,
nên dùng biểu mẫu tự thiết kế.
NegotiateMenus của biểu mẫu. Khi thuộc tính này là True (mặc định), và nơi chứa có dùng menu
hoặc thuộc tính này là False, menu của đối tượng không thể “trộn” được.
Lưu ý thuộc tính này không có trong biểu mẫu MDI.
Thuộc tính NegotiateToolbars của biểu mẫu MDI quyết định toolbar của đối tượng nhúng có
được đặt trong biểu mẫu chứa hay không. Nhưng nó đòi hỏi nơi chứa phải có toolbar. Nếu thuộc
tính này là True toolbar của đối tượng nhúng được hiển thị trong nơi chứa. Nếu là False Toolbar
được hiển thị “di động” trong nơi chứa.
Lưu ý rằng thuộc tính này chỉ áp dụng cho biểu mẫu MDI.
Nếu biểu mẫu MDI có toolbar, nghĩa là nó có một hộp hình. Thuộc tính Negotiate của hộp hình
quyết định toolbar của nơi chứa vẫn hiển thị hoặc sẽ bị thay thế bằng toolbar của đối tượng nhúng
khi nó được chọn. Nếu Negotiate là True, toolbar nhngs trộn vào toolbar chính. Ngược lại toolbar
nhúng thay thế toolbar chính.
1.4 Thanh trạng thái
Điều khiển thanh trạng thái (statusBar) cung cấp một cửa sổ, thường ở phần cuối cùng của cửa
sổ chính, trên đó, ứng dụng có thể hiển thị các trạng thái dữ liệu khác nhau. StatusBar có thể được
chia tối đa thành 16 panel dùng để chứa hình ảnh hay văn bản. Thuộc tính kiểm soát cách thể hiện
của từng panel bao gồm Width, Alignment (của văn bản và hình ảnh) và Bevel. Ngoài ra ta có thể
dùng một trong 7 giá trị của Style để tự động hiển thị dữ liệu thông dụng như ngày, giờvà trạng
thái bàn phím.
Vào lúc thiết kế, ta có thể tạo các bảng báo và hiệu chỉnh cách thể hiện của chúng bằng cách
đổi các giá trị trong tab panel của hộp thoại Property page. Hộp thoại này được mở thông qua cửa
sổ thuộc tính của điều khiển Statusbar.
Vào lúc thi hành, các đối tượng Panel có thể được cấu hình lại để phản ánh các chức năng khác
nhau, tuỳ theo trạng thái của ứng dụng.
Thanh công cụ và thanh trạng thái cung cấp những công cụ giúp tạo ra một giao diện tiết kiệm
mà đầy đủ thông tin.
1.5 Xử lý chuột và bàn phím
1.5.1 sự kiện chuột
Sự kiện Giải thích
MouseDown Xảy ra khi người sử dụng nhấn một nút chuột bất kỳ.
KeyPress Khi một phím có mã ASCII được nhấn
KeyDown Khi một phím bất kỳ được nhấn
KeyUp Khi một phím bất kỳ được thả.
Chỉ có sự kiện đang forcus mới bắt sự kiện bàn phím. Đối với biểu mẫu, nó chỉ bắt được khi nó được kích hoạt
và mọi điều khiển trên biểu mẫu đều không có forcus. Điều này chỉ xảy ra với biểu mẫu trống hoặc biểu mẫu có điều
khiển bị cấm. Tuy nhiên nếu quy định thuộc tính KeyPreview của biểu mẫu thành True, biểu mẫu sẽ nhận mọi sự
kiện bàn phím của mọi điều khiển trên nó trước khi các điều khiển này nhận được. Cách này hữu dụng khi ta muốn
thi hành cùng một hoạt động khi một phím bất kỳ được nhấn, bất kể điều khiển nào đang forcus.
KeyDown và KeyUp có thể phát hiện những tình huống mà KeyPress không thể phát hiện:
- Tổ hợp phím SHIFT, CTRL và ALT
- Phím định hướng (← → ↑ ↓) lưu ý rằng một số điều khiển (nút lệnh, nút tuỳ chọn, và hộp
đánh dấu) không bắt sự kiện phím định hướng. Thay vào đó, các phím này gây ra sự dịch
chuyển của một điều khiển khác.
- PAGEUP và PAGEDOWN
- Phân biệt được phím số ở bàn phím phải với phím số ở bàn phím trái
- Đáp ứng khi thả phím
- Phím chức năng không trùng với menu.