CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 297

297

Chương 8: Đồ họa, đa phương tiện, và in ấn

Point[] pointsB = new Point[]

{new Point(this.Width - 40, this.Height - 60),

new Point(this.Width, this.Height),

new Point(10, this.Height)};

path.AddCurve(pointsB);

path.CloseAllFigures();

this.Region = new Region(path);

}

private void cmdClose_Click(object sender, System.EventArgs e) {

this.Close();

}

}

Đối với ví dụ tạo điều kiểm không phải hình chữ nhật, bạn hãy tham khảo mục 8.4.

4.

4.

T o đi u ki m có hình d ng tùy bi n

ạ ề

ế

T o đi u ki m có hình d ng tùy bi n

ạ ề

ế

Bạn cần tạo một shape mà người dùng có thể thao tác với nó trên form như kéo
rê, thay đổi kích thước....

Tạo một điều kiểm tùy biến, và chép đè painting logic để vẽ shape. Gán shape
của bạn vào thuộc tính

Control.Region

. Kế đó, bạn có thể sử dụng

Region

này để

thực hiện “hit testing”.

Nếu muốn tạo một giao diện người dùng phức tạp kết hợp nhiều phần tử được vẽ tùy biến, bạn
cần có phương cách để theo vết các phần tử này và cho phép người dùng tương tác với chúng.
Cách tiếp cận dễ nhất trong .NET là tạo một điều kiểm chuyên biệt bằng cách dẫn xuất một
lớp từ

System.Windows.Forms.Control

. Kế đó, bạn có thể tùy biến phương cách mà điều kiểm

này được vẽ dựa theo tập các sự kiện cơ bản của nó.
Điều kiểm được trình bày dưới đây mô tả một hình ellipse đơn giản trên form. Tất cả các điều
kiểm đều được liên hợp với một vùng chữ nhật trên form, do đó điều kiểm

EllipseShape

sẽ

tạo một ellipse lắp đầy các đường biên này (được cấp thông qua thuộc tính

Control.ClientRectangle

). Một khi shape đã được tạo, thuộc tính

Control.Region

được thiết

lập dựa theo biên trên ellipse. Điều này bảo đảm các sự kiện như

MouseMove

,

MouseDown

,

Click

... sẽ xảy ra chỉ khi chuột ở trên ellipse, chứ không phải toàn bộ hình chữ nhật.

Dưới đây là phần mã đầy đủ của lớp

EllipseShape

:

using System;

using System.Windows.Forms;

using System.Drawing;

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.