[Trick] Make Borderless Form Moveable

Make Borderless Form Moveable

Nghĩ hoài không biết đặt tiêu đề tiếng Việt cho bài viết như thế nào cho dễ hiểu nên tôi để nguyên là tiếng Anh.

Đúng như tên tiêu đề, chúng ta sẽ tạo 1 Windows Form trên C# ở dạng không có Border, tức là giống như giao diện MetroUI phẳng và có thể di chuyển cửa sổ đó dễ dàng như có Border vậy.

Hiển thị tốt trên Windows XP, Windows 7 mà không cần dùng thư viện hỗ trợ nào khác.

Có thể một vài bạn sẽ không hiểu Border là gì, Border trong Windows Form là phần viền bao ngoài cửa sổ ứng dụng, chứa tiêu đề và các nút đóng – phóng to – thu nhỏ cửa sổ.

Windows Form Border

 

Tôi sẽ demo 1 ví dụ hoàn chỉnh.

 

Bước 1. Tạo Form không có Border

Các bạn cứ tạo fom như bình thường, phần Properties có chỉnh sửa một chút:

  • FormBorderStyle: Chọn None

Tạo Form

Chúng ta được 1 form không có border như hình trên.

 

Bước 2. Tạo 1 vùng để có thể di chuyển cửa sổ

Tạo vùng này thì tôi dùng đối tượng Panel, muốn vùng có thể di chuyển cửa sổ như thế nào thì bạn vẽ ra như vậy.

Ở đây tôi để vùng đó ở trên cùng của cửa sổ cho quen thuộc.

Tạo Panel

Phần này sẽ nhận biết hành động MouseDown để xử lý việc di chuyển cửa sổ.

Nếu bạn muốn di chuyển cửa sổ ở bất kỳ vị trí nào thì không cần tạo Panel mà dùng ngay đối tượng Form.

 

Bước 3. Tạo Button trong suốt

Tất nhiên khi tạo 1 form thì phải có nút phóng to hoặc thu nhỏ hoặc nút đóng cửa sổ hoặc gì đó mà các bạn muốn. :D

Ở đây tôi làm nút đóng và ẩn cửa sổ.

  • BackgroundImage là 1 ảnh png.
  • BackgroundImageLayout: để hình ở giữa button luôn.
  • FlatAppearance:
    + BorderColor: để cùng màu với màu nền của Form (Nếu không thì lúc click vào nút sẽ hiện ra cái đường viền quanh nút rất xấu)
    + BorderSize: 0
    + MoveDownBackColor: Transparent (Màu nền khi nhấn nút)
    + MoveOverBackColor: Transparent (Màu nền khi bạn di chuyển chuột qua nút)
  • FlatStyle: Flat

Tạo button trong suốt

Vậy là xong phần thiết kế giao diện, tiếp theo là phần mã nguồn.

 

Cần add thêm thư viện System.Runtime.InteropServices vào đầu chương trình.

Đưa đoạn mã này vào thân chương trình, đoạn mã này có nhiệm vụ xử lý sự kiện MouseDown với đối tượng, ở đây là đối tượng Panel.

 

Toàn bộ mã nguồn của Demo:

 

Chương trình sau khi biên dịch:

Kết quả

Enjoy!

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz