220
Chương 6: Windows Form
Còn một cách khác để tạo form không thể di chuyển được và có kiểu đường viền giống điều
kiểm. Trước tiên, thiết lập các thuộc tính
ControlBox
,
MinimizeBox
, và
MaximizeBox
của form
là
false
. Kế tiếp, thiết lập thuộc tính
Text
là chuỗi rỗng. Khi đó, form sẽ có đường viền nổi
màu xám hoặc đường kẻ màu đen (tùy thuộc vào tùy chọn
FormBorderStyle
mà bạn sử dụng),
tương tự như
Button
.
15.
15.
Làm cho form không đ
ng vi n có th di chuy n đ
c
ườ
ề
ể
ể ượ
Làm cho form không đ
ng vi n có th di chuy n đ
c
ườ
ề
ể
ể ượ
Bạn muốn tạo một form không có đường viền nhưng vẫn có thể di chuyển được.
Điều này có thể gặp trong trường hợp bạn cần tạo một cửa sổ tùy biến có hình
dáng “độc nhất vô nhị” (ví dụ, các ứng dụng game hoặc media player).
Tạo một điều kiểm đáp ứng cho các sự kiện
MouseDown
,
MouseUp
, và
MouseMove
; và
viết mã để di chuyển form.
Người dùng thường sử dụng thanh tiêu đề để di chuyển form. Tuy nhiên, form không có
đường viền cũng không có thanh tiêu đề. Bạn có thể bù vào thiếu hụt này bằng cách thêm một
điều kiểm vào form để phục vụ cùng mục đích. Ví dụ, form trong hình 6.10 chứa một
Label
hỗ trợ việc kéo rê. Người dùng có thể nhắp vào
Label
này, và rồi kéo rê form đến một vị trí
khác trên màn hình trong lúc giữ chuột. Khi người dùng di chuyển chuột, form tự động được
di chuyển tương ứng (form được “gắn” với con trỏ chuột).
Hình 6.10 Form không có đường viền nhưng vẫn có thể di chuyển được
Để hiện thực giải pháp này, bạn cần thực hiện các bước sau:
1. Tạo một biến cờ mức-form dùng để theo vết form (form hiện có được kéo rê hay
không).
2. Khi người dùng nhắp vào
Label
, cờ sẽ được thiết lập để cho biết form đang ở chế độ
kéo rê. Cùng lúc này, vị trí hiện thời của chuột được ghi lại. Bạn cần thêm logic này
vào phương thức thụ lý sự kiện
Label.MouseDown
.
3. Khi người dùng di chuyển chuột trên
Label
, form được di chuyển tương ứng để vị trí
của chuột trên
Label
vẫn không thay đổi. Bạn cần thêm logic này vào phương thức thụ
lý sự kiện
Label.MouseMove
.
4. Khi người dùng thả chuột, chế độ kéo rê được chuyển thành off. Bạn cần thêm logic
này vào phương thức thụ lý sự kiện
Label.MouseUp
.
Dưới đây là phần mã hoàn chỉnh cho form: