chuong 3

Màu nền
Font chữ
Font size
Chiều cao dòng

Chương 3: Giới thiệu về Window Form

Đặng Thành Trung

Nội dung chính

 Xây dựng ứng dụng Windows Form

 Thuộc tính của Windows Form

 Bắt sự kiện (Event Handling)

 Sử dụng namespace System.Drawing

• Xây dựng ứng dụng Windows Form

1.1. Sử dụng lớp System.Windows.Forms.Form

 Một ứng dụng Windows thường có một hoặc nhiều Windows Form.

 Window Form là một vùng màn hình được sử dụng để thiết kế giao diện.

 Là nơi để đặt các thành phần giao diện khác như: Textbox, Button,Llist, Grid, Menu...

 Window Form là một thể hiện cụ thể của lớp Form trong namespace System.Windows. Forms

1.2. Thiết kế Windows Form

 Sử dụng Visual Studio .NET để xây dựng Windows Form

 Khi tạo ra một ứng dụng Windows mới, VS.NET tự động bổ sung một form vào ứng dụng.

 Mỗi form có một file mã lệnh tương ứng (vd:Form1.cs).

 File này chứa các định nghĩa về Windows Form để ta có thể nhìn thấy khi thực thi chương trình.

 Phân biệt Project và Solution:

 Solution được sử dụng để nhóm một hoặc nhiều Project.

 Có thể tạo ra một Solution và sau đó bổ sung các Project vào Solution đó.

 Nếu trực tiếp tạo ra Project thì VS.NET sẽ tự động tạo ra một Solution để chứa Project này.

1.3. Tìm hiểu những mã lệnh được tạo ra tự động

 VS.NET nhóm mã lệnh thành các block (gọi là kỹ thuật code outlining).

 Ta có th ể m ở ho ặc đóng các block này.

 Directive: #region và #endregion đánh d ấu đi ểm b ắt đ ầu và k ết thúc c ủa m ột kh ối l ệnh.

 Có th ể đ ặt tên cho block, đ ể khi đóng block ta v ẫn th ấy tên c ủa nó.

 Khi d ịch chương trình directive này s ẽ b ị b ỏ qua.

Tìm hiểu những mã lệnh được tạo ra tự động ...

 Sử dụng using để xác định những namespace cần sử dụng.

 Khi tạo ra một Windows Form, VS.NET sẽ định nghĩa một lớp kế thừa lớp Form trong namespace System.Windows.Forms.

public class Form1 : System.Windows.Forms.Form

{

// ...

}

 Có thể thay đổi trực tiếp tên lớp trên code hoặc thông qua thuộc tính Name.

Tìm hiểu những mã lệnh được tạo ra tự động ...

 VS.NET tự động bổ sung hàm tạo mặc định Form1, hàm này gọi đến phương thức InitializeComponent().

public Form1()

{

InitializeComponent();

}

 Phương thức InitializeComponent() lưu những thuộc tính đã thay đổi của form khi thiết kế.

private void InitializeComponent()

{

this.components = new System.ComponentModel.Container();

this.Size = new System.Drawing.Size(300,300);

this.Text = "Form1";

}

Tìm hiểu những mã lệnh được tạo ra tự động ...

 Phương thức Dispose() được sử dụng để dọn dẹp vùng nhớ khi ta đã kết thúc công việc với lớp.

 CLR có khả năng dọn dẹp rác tự động (garbage collection). Tất cả những vùng nhớ không còn sử dụng nữa sẽ tự động được dọn dẹp.

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

Tìm hiểu những mã lệnh được tạo ra tự động ...

 Một ứng dụng phải có điểm bắt đầu thực thi - được định nghĩa trong phương thức Main().

 Một Project chỉ có một Form chứa hàm Main().

[STAThread]

static void Main()

{

Application.Run(new Form1());

}

 Dòng lệnh đầu tiên là thuộc tính được gán cho phương thức Main() để xác định ứng xử trong lúc thực thi.

 Thuộc tính STAThread cho phép ứng dụng tham gia vào môi trường COM (Component Object Model) hoặc làm bất kỳ việc gì sử dụng Object Linking and Embedding (như thao tác kéo thả hoặc sử dụng Clipboard).

 Câu lệnh viện dẫn tới phương thức Run() của lớp Application.

 Sử dụng Form1() trong lệnh Application.Run sẽ gọi tới hàm tạo của Form1, để trả về một thể hiện mới của lớp Form1 và sẽ được hiển thị trên màn hình khi ứng dụng bắt đầu

1.4. Lớp Application

 Lớp Application chịu trách nhiệm quản lý ứng dụng Window.

 Các phương thức và thuộc tính của lớp Application đều là static.

 Không thể tạo ra một thể hiện cụ thể của lớp Application

 Sử dụng các thuộc tính và phương thức trực tiếp thông qua tên lớp.

 Ví dụ: Sử dụng các thuộc tính của lớp Application

Một số thuộc tính và phương thức của lớp Application

1.5. Lớp MessageBox

 Thuộc vào Namespace System.Windows.Forms và thừa kế từ lớp Object.

 Cung cấp phương thức Show(), có thể sử dụng theo 12 cách khác nhau để hiển thị thông điệp.

 Tham s ố MessageBoxButtons - xác đ ịnh ki ểu thông báo

 Tham s ố MessageBoxIcons - xác đ ịnh bi ểu tư ợng trên thông báo

2. Thuộc tính của Windows Form

2.1. Thuộc tính của Windows Form

 Tất cả các thuộc tính được truy nhập dễ dàng thông qua cửa sổ Properties của VS.NET.

 Ví dụ: Sử dụng Visual Designer để thay đổi thuộc tính của Windows Form

Một số thuộc tính quan trọng của lớp Form

Thuộc tính của Windows Form ...

 Visual Designer chỉ cho phép gán các thuộc tính tại thời điểm thiết kế.

 Mã lệnh tương ứng với sự thay đổi thuộc tính của Form được lưu trong phương thức InitalizeComponent().

 Muốn thay đổi thuộc tính của Form vào lúc thực thi thì phải viết mã lệnh.

 Ví dụ: Thay đổi thuộc tính của Windows Form thông qua mã lệnh

2.2. Bổ sung thuộc tính mới cho Windows Form

public enum State{Idle, Connecting, Processing}

private State formState;

[Browsable(true),EditorBrowsable(EditorBrowsableState.Never),

Description("Sets the custom Form state"),Category("Custom")]

public State FormState {

get { return formState; }

set {

formState = value;

switch (formState) {

case State.Idle:

this.BackColor = Color.Red;

this.Text = "Idle";

break;

case State.Connecting:

this.BackColor = Color.Orange;

this.Text = "Connecting...";

break;

case State.Processing:

this.BackColor = Color.Green;

this.Text = "Processing";

break;

}

}

}

2.3. Thừa kế trực quan (Visual Inheritance)

 Kỹ thuật thừa kế được áp dụng cho Windows Form được gọi là thừa kế trực quan

 Kế thừa các thuộc tính trực quan của Form như: size, color, ...

 Ví dụ: thừa kế Windows Form

3. Bắt sự kiện (Event Handling)

3.1. Sự kiện và bắt sự kiện

 Khi ta thực hiện một hành động trên đối tượng, đối tượng sẽ tạo ra các sự kiện trong ứng dụng.

 Bắt sự kiện là một phương thức được thực hiện để đáp ứng cho một sự kiện.

 Phân loại sự kiện

 Sự kiện được kích hoạt bởi người sử dụng.

 Sự kiện được kích hoạt bởi sự thay đổi của môi trường như gửi/nhận thư, chỉnh sửa file, thay đổi thời gian ...

 Có thể tự định nghĩa các sự kiện hoặc viết mã lệnh để bắt các sự kiện.

3.2. Bắt sự kiện bằng cách gán Delegate

 Lớp Form có một tập các sự kiện đã được định nghĩa và có thể truy nhập thông qua cửa sổ Properties.

 Nếu chương trình phải thực hiện hành động khi một sự kiện được kích hoạt, thì phải định nghĩa bộ bắt sự kiện thích hợp.

 Bộ bắt sự kiện phải được đăng ký với nguồn của sự kiện

 Khi sự kiện xảy ra, bộ bắt sự kiện tương ứng sẽ được viện dẫn.

 Có thể có nhiều bộ bắt sự kiện đáp ứng một sự kiện hoặc một bộ bắt sự kiện đáp ứng nhiều sự kiện.

Ví dụ: Bắt sự kiện MouseDown()

private void C03_7_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{...}

 B ộ b ắt s ự ki ện có ki ểu tr ả v ề là void và có 2 tham s ố.

 Tham s ố th ứ nh ất là đ ối tư ợng mà s ự ki ện x ảy ra trên nó

 Tham s ố th ứ hai là ki ểu EventArgs ho ặc m ột ki ểu th ừa k ế t ừ EventArgs có ch ứa d ữ li ệu liên quan đ ến s ự ki ện.

Gán bộ bắt sự kiện

this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.C03_7_MouseDown);

 MouseDown: tên của sự kiện. Khi sự kiện được kích hoạt, nó sẽ viện dẫn tất cả các event handler được gắn với nó.

 MouseEventHandler: delegate của sự kiện MouseDown.

public delegate void MouseEventHandler(object sender, MouseEventArgs e);

 MouseEventHandler có khả năng lưu trữ các tham chiếu tới bất kỳ phương thức nào trả về kiểu void và có 2 tham số kiểu System.Object và kiểu MouseEventArgs.

 C03_7_MouseDown: tên của EventHandler.

3.2. Bắt sự kiện bằng cách chồng phương thức của lớp cơ sở

 Một số lớp cung cấp các phương thức protected có thể kích hoạt sự kiện.

 Ví dụ: phương thức OnMouseDown() của lớp Form kích hoạt sự kiện MouseDown.

protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)

{ ... }

 OnMouseDown() là phương thức chính được viện dẫn khi nhấn chuột và chịu trách nhiệm báo hiệu cho tất cả các đối tượng được đăng ký về sự kiện MouseDown.

protected virtual void OnMouseDown(System.Windows.Forms.MouseEventArgs e);

 OnMouseDown() sẽ gọi tới delegate khi sự kiện xảy ra.

 Từ khoá virtual cho biết lớp dẫn xuất có thể override phương thức đó.

 Khi override phương thức trong lớp dẫn xuất thì phương thức của lớp cơ sở sẽ không được gọi tới nữa.

4. Sử dụng namespace System.Drawing

4.1. Hệ toạ độ của Windows Form

 Window Form là đối tượng có hệ toạ độ 2 chiều.

 Vị trí của control đặt trên Form được xác định bởi một tập hợp điểm.

 Điểm là một cặp số (x,y) thể hiện toạ độ tính từ gốc của Form.

 G ốc c ủa form là góc trên bên trái c ủa vùng client.

 Vùng client là vùng bên trong form b ỏ qua ph ần tiêu đ ề, biên, menu,...

 Điểm gốc có toạ độ là (0,0).

 Giá trị của toạ độ x tăng dần về phía bên phải Form

 Giá trị của toạ độ y tăng dần về phía dưới Form.

4.2. Lớp Graphics

 FCL cung cấp một tập hợp các cài đặt có sẵn của giao diện thiết kế đồ hoạ Windows (GDI+).

 Lớp Graphics cung cấp các phương thức để thực hiện các thao tác trên đối tượng đồ hoạ.

 Là lớp sealed.

 Không có hàm tạo. Có 4 cách để nhận được một đối tượng Graphics:

 Thông qua thuộc tính Graphics của tham số PainEventArgs được truyền tới bộ bắt sự kiện Paint của Control hoặc Form.

 Gọi phương thức CreateGraphics() của Control hoặc Form

 Gọi phương thức Graphics.FromHwnd().

 Gọi phương thức static Graphics.FromImage().

Một số cấu trúc định nghĩa trong namespace System.Drawing

Một số phương thức vẽ của lớp Graphics

Phương thức DrawString

 Lớp Graphics cung cấp phương thức DrawString() để vẽ một string.

private void C03_9_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

Graphics grfx = e.Graphics;

String str = String.Format("Form Size is: Width={0}, Height={1}",Width, Height);

grfx.DrawString(str, Font, Brushes.Black, 0, 0);

}

 Phương thức Paint:

 Event handler của sự kiện Paint cung cấp truy nhập tới đối tượng Graphics.

 Sự kiện Paint được kích hoạt bất kỳ khi nào form được vẽ lại

Phương thức DrawString ...

 Khi thay đổi kích thước của Form, sự kiện Paint không được kích hoạt, mà kích hoạt sự kiện Resize().

 Phương thức Invalidate() tạo ra một thông điệp vẽ gửi tới Form.

 Invalidate() không có tham s ố s ẽ g ọi t ới s ự ki ện Paint trên toàn Form.

 Invalidate() có tham s ố ki ểu Rectangle s ẽ v ẽ l ại m ột ph ần c ủa Form.

 Thuộc tính ResizeRedraw của lớp Form được gán bằng true thì sẽ chỉ thị cho Control hoặc Form vẽ lại khi Form bị thay đổi kích thước.

Một số phương thức tô màu

Phân biệt phương thức Draw và Fill

 Cú pháp của phương thức Fill cũng tương tự như phương thức Draw.

 Để tô màu đối tượng cần vẽ.

 Phương th ức Fill s ử d ụng đ ối tư ợng Brush

 Phương th ức Draw s ử d ụng đ ối tư ợng Pen

4.3. Lớp Image

 Lớp System.Drawing.Image cung cấp các chức năng cơ bản để làm việc với ảnh.

 Lớp Image là trừu tượng => Phải sử dụng thông qua các lớp sau:

 Bitmap: được sử dụng để làm việc với các file đồ hoạ được lưu theo các pixel như: BMP, GIF, JPEG.

 Icon: tạo ra các ảnh bitmap nhỏ, là các icon trong Window.

 MetaFile: kết hợp bitmap với các chuỗi bản ghi nhị phân để biểu diễn các thao tác đồ hoạ như vẽ đường thẳng.

Bạn đang đọc truyện trên: Truyen2U.Pro

#chương