Tải bản đầy đủ (.pdf) (132 trang)

Bài giảng lập trình hướng sự kiện it09 Đại học mở hà nội

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.71 MB, 132 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>BÀI I: TỔNG QUAN </b>

<i><b>Mục tiêu: </b></i>

<b>Trong bài này, Anh/Chị cần đạt được những mục tiêu sau: </b>

1. Hiểu được khái niệm về Lập trình Hướng sự kiện 2. Hiểu được kiến trúc tổng quát của .NET Framework 3. Biết lập trình các bài tốn cơ bản với ngơn ngữ Visual C# 4. Hiểu biết về bài tốn ví dụ dành cho cả môn học

<b>2. Xử lý (phản ứng với) sự kiện </b>

- Mỗi sự kiện xảy ra sẽ thay đổi trạng thái hiện tại của môi trường

- Cần có những phản ứng thích hợp với mỗi thay đổi đó (với mỗi sự kiện)

- HĐH cung cấp cho ứng dụng thông tin để biết là có gì (sự kiện nào) đã xảy ra với thành phần nào của ứng dụng

- Ứng dụng tự quyết định (theo kịch bản viết sẵn) sẽ làm gì với sự kiện đã xảy ra (xử lý sự kiện như thế nào?)

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Lập trình hướng sự kiện có liên hệ chặt chẽ với lập trình hướng đối tượng.

<b>II. LẬP TRÌNH VỚI .NET FRAMEWORK </b>

<b>1. Cài đặt .NET Framework và Visual Studio.NET </b>

- Tải .NET Framework 2.0: (free) - Cài đặt

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

Thao tác Tổ hợp phím Menu

Mở cửa sổ Solution Explorer

Solution Explorer Chuyển chế độ Design

và code

F7, Shift F7

<b>3. Các thành phần của .NET Framework </b>

Common Language Runtime: (Bộ thực thi ngôn ngữ chung)

<b>Base Classes </b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

- .NET Framework cung cấp một tập hợp các lớp có thứ bậc, có thể mở rộng và được sử dụng bởi bất cứ ngơn ngữ lập trình nào.

- Các lớp cơ sở có thể được sử dụng để:

 Xử lý các CTDL như xâu, mảng, danh sách, ….  Truy nhập hệ thống file, registry

 Mã hoá, bảo mật  Kết nối mạng

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Phương thức get, set

Phương thức Method 1

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>5.1. Console </b>

<b>5.2. Windows Application </b>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>6. Một số ví dụ với ngơn ngữ lập trình C# 6.1. Chương trình “Hello World” </b>

<b>6.2. Chương trình “Tính trung bình cộng 2 số” </b>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b> </b>

<b>6.3. Nhập các số cho đến khi tổng >= 100 thì dừng. </b>

<b>6.4. Nhập 1 xâu, hiện ra: </b>

- Dạng chữ thường. - Dạng chữ hoa - Số từ có trong xâu

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>III. BÀI TỐN VÍ DỤ MƠN HỌC 1. Phát biểu bài tốn </b>

Một đơn vị nhập hàng hoá từ nhiều nhà cung cấp khác nhau cần một chương trình để quản lý hàng hố nhập kho. Biết rằng:

- Một nhà cung cấp có thể cung cấp nhiều hàng hoá khác nhau

- Mỗi hàng hố lại có thể được nhập từ nhiều nhà cung cấp khác nhau

- Trước khi đưa hàng hoá vào kho thì cần lập giấy nhập kho để ghi nhận thời gian nhập, người lập, số lượng nhập kho của từng loại hàng hố

- Chương trình cần thống kê được hàng hoá nhập theo: Khoảng thời gian, Nhà cung cấp, Loại hàng hoá

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>2. Cơ sở dữ liệu </b>

<i>Sơ đồ CSDL của Bài toán quản lý hàng hoá nhập kho </i>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<i><b>Chúc Anh/Chị học tập tốt </b></i>

<b>TÀI LIỆU THAM KHẢO </b>

<i><b>1. Bài giảng Lập trình Hướng sự kiện, Nhóm tác giả, Khoa CNTT – Viện Đại học Mở </b></i>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<b>BÀI 2: TRUY CẬP CSDL VỚI ADO.NET </b>

<i><b>Mục tiêu: </b></i>

<b>Trong bài này, Anh/Chị cần đạt được những mục tiêu sau: </b>

- Hiểu rõ được khái niệm, mơ hình các đối tượng và lợi ích của ADO.NET - Nắm vững được cách truy xuất CSDL

- Làm quen với các đối tượng của ADO.NET - Nắm vững các ví dụ của bài học

<i><b>Nội dung: </b></i>

<b>I. GIỚI THIỆU 1. Đặc điểm chung </b>

- ADO.NET là một tập hợp các lớp (classes) cho phép các ứng dụng trên nền .NET có thể truy xuất thơng tin trong các CSDL và các nguồn dữ liệu khác.

- ADO.NET cung cấp các phương pháp truy xuất thích hợp với nhiều loại dữ liệu, bao gồm CSDL MS SQL Server, các CSDL tương thích OLEDB, các CSDL phi quan hệ như MS Exchange Server, và các văn bản XML

- ADO.NET làm việc theo mơ hình ngắt kết nối với nguồn dữ liệu.

<b>2. Lợi ích của ADO.NET </b>

- Mơ hình lập trình tương tự như ADO - Làm việc theo mơ hình CSDL ngắt kết nối.

- Sẵn có trong .NET Framework  dễ dàng xây dựng, triển khai ứng dụng

- Hỗ trợ chuyển đổi dễ dàng giữa mơ hình CSDL quan hệ và định dạng dữ liệu XML

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b>3. Mô hình các đối tượng trong ADO.NET </b>

- ADO.NET sử dụng các trình cung cấp dữ liệu (hay cịn gọi là các trình điều khiển dữ liệu) .NET(.NET Data Providers) để liên kết ứng dụng với nguồn dữ liệu.

 System.Data.SqlClient - Dành cho SQL Server 7 trở lên.

2. Khai báo các đối tượng ADO.NET cần thiết (Connection, Command, …) 3. Thiết lập các thông số cho Command

4. Mở kết nối 5. Thực thi truy vấn

6. [Xử lý kết quả truy vấn] 7. Đóng, huỷ các đối tượng

<b>5. OLEDB ConnectionString </b>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

SqlServer:

<b>Provider=SqlOLEDB.1; </b>

Data Source=<tên|IP DB Server>; Initial Catalog=<tên Database>; User ID=<tên truy cập>;

Password=<mật khẩu>;

<b>Provider=SqlOLEDB.1; </b>

Data Source=<tên|IP DB Server>; Initial Catalog=<tên Database>; Integrated Security=TRUE|SSPI; Có thể thay:

 Data Source ~ Server  Initial Catalog ~ Database  User ID~UID

Access 2000-2003:

Provider=Microsoft.JET.OLEDB.4.0; Data Source=<đường dẫn tệp MDB>; Tham khảo: www.ConnectionStrings.com

Thông số kết nối nên đặt trong tệp cấu hình (App.Config) của ứng dụng

<b>II. Các đối tượng của ADO.NET - System.Data.SqlClient </b>

 SqlDataConnection  SqlCommand  SqlParameter  SqlDataReader  SqlDataAdapter

<b>- System.Data.Oledb </b>

 OledbConnection  OledbCommand

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

 OledbParameter  OledbDataReader  OledbDataAdapter

<b> DataSet  DataTable  DataView  …. </b>

o ConnectionState.Open o ConnectionState.Closed o ConnectionState.Connecting o ConnectionState.Fetching o ConnectionState.Broken - Phương thức:

 Open():  Close():

 CreateCommand() tạo ra đối tượng Command  BeginTransaction(): tạo ra đối tượng Transaction  Dispose():

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

 SqlCommand <tênObj>= new SqlCommand(commandText, connection);  SqlCommand <tênObj>= <đối tượng Connection>.CreateCommand(); - Thuộc tính:

- Phương thức:

 ExecuteNonQuery():  int

 ExecuteReader():  <DataReader>  ExecuteScalar():  <Object>

Chú ý: trước khi thực thi truy vấn thì phải Open Connection của Command

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

- Chương trình:

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<i><b>2. </b></i> <b>Ví dụ II.3.1 </b>

<i><b>Yêu cầu: Thêm dữ liệu vào bảng Nhà cung cấp sử dụng Stored Procedure </b></i>

<i>- Tạo Stored procedure </i>

<i><b>Stored Procedure spNhacungcap_Insert </b></i>

- Lập trình C#

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

- Chương trình:

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<i><b>Chúc Anh/Chị học tập tốt! </b></i>

<b>TÀI LIỆU THAM KHẢO </b>

<i><b>1. Bài giảng Lập trình Hướng sự kiện, Nhóm tác giả, Khoa CNTT – Viện Đại học </b></i>

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<b>BÀI 3: TRUY CẬP CSDL VỚI ADO.NET (TIẾP THEO) </b>

<i><b>Mục tiêu: </b></i>

<b>Trong bài này, Anh/Chị cần đạt được những mục tiêu sau: </b>

- Biết cách làm việc với các đối tượng còn lại của ADO.NET: o DataReader

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

o Close(): đóng reader

o Get<type>(i): đọc dữ liệu trường thứ i theo kiểu <type> Có thể truy xuất tới 1 trường trong reader bằng cách <tên reader>[“tên trường”]

• Ví dụ: Hiện danh sách Nhà cung cấp sử dụng DataReader

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

o InsertCommand: Command sẽ dùng để thêm mới bản ghi từ bộ nhớ vào CSDL khi phương thức Update được gọi và có bản ghi mới trong bộ nhớ

o UpdateCommand: Command sẽ dùng để cập nhật bản ghi từ bộ nhớ vào CSDL khi phương thức Update được gọi và có bản ghi cần cập nhật trong bộ nhớ

o DeleteCommand: Command sẽ dùng để xoá bản ghi tương ứng với bản ghi bị xoá trong bộ nhớ vào CSDL khi phương thức Update được gọi và có bản ghi trong bộ nhớ bị xoá

o NewRow(): tạo ra 1 DataRow mới theo cấu trúc của bảng.

o GetChanges([RowState]): trả ra các bản ghi thỏa mãn theo trạng thái Added/Updated/Deleted

o AcceptChanges(): chấp nhận các thay đổi o RejectChanges(); từ chối các thay đổi

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

o Select([filter] [,order] [, DataViewRowState]):

lấy ra mảng các DataRow thỏa mãn [filter] theo trạng thái qui định bởi [DataViewRowState] và sắp xếp theo [order]

o ColumnName: Tên trường

o DataType = System.Type.GetType(<tên kiểu dữ liệu trong .NET Framework>): kiểu dữ liệu của trường

o DefaultValue: giá trị mặc định cho trường ở bản ghi mới o Expression: biểu thức tính giá trị cho trường

o MaxLength: độ dài của trường kiểu xâu

o Table: tham chiếu đến DataTable đang chứa DataColumn

o Unique: true|false: xác định tính duy nhất cho dữ liệu trong trường

o HasErrors:true|false: có lỗi trên DataRow khơng

o RowState: trạng thái của bản ghi (DataRowState enum) o Table: tham chiếu đến đối tượng DataTable chứa bản ghi  Phương thức:

o Delete(): đánh dấu xoá bản ghi (State=DataRowState.Deleted) o GetChildRows(DataRelation|relationName): DataRow[]

tập hợp bản ghi ở phía nhiều (∞) của quan hệ chỉ định bởi đối tượng DataRelation

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>Ví dụ: Hiển thị dữ liệu sử dụng DataTable </b>

Stored procedure:

Hàm getHangByNhacungcap

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

Hàm Main

<b>6. DataView </b>

 Thể hiện một cách nhìn (view) khác đối với dữ liệu trong DataTable.  DataView có thể dùng để:

o Kết gán dữ liệu (DataBind) với các điều khiển

o Sắp xếp, lọc, tìm kiếm, cập nhật và duyệt các bản ghi.  Khai báo:

DataView <tênObj>= new DataView([DataTable]);  Thuộc tính:

o Table: DataTable nguồn của DataView.

o Sort: biểu thức sắp xếp dữ liệu trong DataView o RowFilter=<điều kiện lọc bản ghi>

<b>7. DataSet </b>

DataSet là đối tượng quan trọng trong ADO.NET. Mơ hình của DataSet tương tự như 1 DB trong bộ nhớ (In Memory DB). Trong DataSet có thể có nhiều DataTable (bảng) nằm trong tập hợp Tables. Giữa các DataTable, có thể thiết lập quan hệ bằng DataRelation. DataSet chỉ chứa dữ liệu, không giữ kết nối (Disconnected DataSource). Dữ liệu được đưa từ CSDL vào DataSet bằng cách sử dụng phương thức Fill của DataAdapter. Ta có thể cập nhật (thêm, sửa, xóa) các bản ghi trong các DataTable của DataSet, sau đó cập nhật ngược trở lại CSDL bằng cách gọi phương thức Update của DataAdapter. Ngoài ra, DataSet còn cho phép chuyển đổi dữ liệu sang định dạng XML, thích hợp để xây dựng ứng dụng theo mơ hình hướng dịch vụ (SOA).

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

o WriteXml(fileName): ghi dữ liệu trong DataSet ra dạng XML

o ReadXml(filename): đọc cấu trúc và dữ liệu từ tài liệu xml vào DataSet

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<b>TÀI LIỆU THAM KHẢO </b>

<i><b>1. Bài giảng Lập trình Hướng sự kiện, Nhóm tác giả, Khoa CNTT – Viện Đại học </b></i>

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

<b>BÀI 4: WINDOWS FORM – CÁC ĐIỀU KHIỂN NỘI TẠI </b>

<i><b>Mục tiêu: </b></i>

Trong bài này, Anh/Chị cần đạt được những mục tiêu sau: 1. Nắm được các khái niệm về đối tượng điều khiển. 2. Sử dụng các điều khiển để thiết kế giao diện ứng dụng.

<i><b>Nội dung: </b></i>

<b>4.1. Giới thiệu. </b>

Windows Form là một phần của Microsoft .NET Framework, nó sử dụng các cơng nghệ mới như: tích hợp tính bảo mật, hướng đối tượng, tốc độ thực thi,… Ngoài ra, Windows Forms hỗ trợ hoàn toàn việc kết nối với dữ liệu XML, hỗ trợ các điều khiển để dễ dàng kết nối dữ liệu thông qua ADO.NET.

Với môi trường phát triển ứng dụng Visual Studio .NET, nhà phát triển có thể sử dụng bất kỳ ngôn ngữ nào mà .NET platform hỗ trợ để tạo các ứng dụng bằng Windows Forms, kể cả VB.NET và C#.NET.

Microsoft .NET Framework chứa một tập phong phú các lớp dùng để tạo các ứng

System.Windows.Forms. Các lớp này có phạm vi từ các phần cơ bản như các lớp TextBox, Button, và MainMenu đến các điều kiểm chuyên biệt như TreeView, LinkLabel, và NotifyIcon. Ngồi ra, bạn sẽ tìm thấy tất cả các công cụ cần thiết để quản lý các ứng dụng giao diện đa tài liệu (Multiple Document Interface - MDI), tích hợp việc trợ giúp theo ngữ cảnh, và ngay cả tạo các giao diện người dùng đa ngôn ngữ - tất cả đều không cần nhờ đến sự phức tạp của Win32 API.

Windows form cung cấp các lớp điều khiển hỗ trợ lập trình và xử lý dữ liệu trực quan, hầu hết các nhà phát triển C# đều có thể tự nắm bắt nhanh chóng mơ hình lập trình Windows Form.

<b>4.1.1. Môi trường làm việc trên Visual Studio.NET </b>

<i><b>a) Giới thiệu VS.NET </b></i>

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

Visual Studio.NET (VS.NET) là phần mềm dùng để phát triển các ứng dụng trên nền .NET, nó có các đặt tính nỗi bật như sau:

 Có thể sử dụng bất kỳ ngơn ngữ nào mà .NET platform hỗ trợ.  Quản lý các thành phần bên trong theo cửa sổ.

 Cung cấp môi trường thiết kế trực quan giúp người dùng có thể thiết kế giao diện rất dễ dàng.

o Hỗ trợ các công cụ mạnh có thể thao tác với database thông qua ADO.NET…

VS.NET quản lý ứng dụng theo kiểu các giải pháp (Solution) và dự án (Project). Project là một ứng dụng xử lý một hệ thống, solution là tổng hợp của các project tạo nên một ứng dụng có thể giải quyết mọi công việc trong hệ thống.

<i><b>b) Các thành phần bên trong môi trường phát triển VS.NET </b></i>

Giao diện mơi trường phát triển winform:

Hình 1 – Cửa sổ làm việc của VS.NET Trong đó:

 Solution Explorer: hiển thị tất cả các project, các files theo dạng cây.

 Toolbox: chứa các điều khiển cơ bản có thể sử dụng trên Webforms và trên Winforms, ngoài ra cịn có các điều khiển ActiveX, XML Web services, các

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

 Server Explorer: cung cấp môi trường điều khiển và quản lý các servers nắm ngoài ứng dụng thông qua VS.NET.

 Class View: mô tả cấu trúc logic của các lớp, các thành phần trong lớp theo dạng cây.

 Properties: cho phép người sử dụng thiết đặt thuộc tính của các controls, classes và projects.

<i><b>c) Các bước để tạo project </b></i>

Để tạo một ứng dụng windows form, ta làm theo các bước sau: Bước 1. Vào New - > Project

Bước 2. Trong cửa sổ New project ta chọn:

 Project Types: chọn ngôn ngữ chúng ta sử dụng để xây dựng project.  Templates: chọn Windows Forms Application.

 Name: Gõ vào tên của project.  Location: chọn nơi lưu trữ.

<b>4.1.2. Tổng quan về đối tượng: thuộc tính, phương thức và sự kiện. </b>

Visual Studio cung cấp rất nhiều điều khiển giúp người lập trình dễ dàng triển khai giao diện chương trình. Các điều khiển được gom nhóm theo các nhóm chức năng, bao gồm:

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

 Các điều khiển vật chứa  Các điều khiển menu  Các điều khiển dữ liệu  Các thành phần

 Các điều khiển hỗ trợ in  Các điều khiển hộp thoại

Mỗi đối tượng điều khiển đều có 3 thành phần cơ bản liên quan, đó là:  Thuộc tính của đối tượng.

 Sự kiện xảy ra khi có hành động nào đó tác động lên đối tượng.  Phương thức - khả năng mà đối tượng có thể làm được.

<i><b>a) Thuộc tính (Properties). </b></i>

Thuộc tính (Propertiy): Là các đặc điểm quy định lên đối tượng, ví dụ độ cao (height), độ rộng (width), mầu nền (BackColor),…

Mỗi đối tượng ta có thể thay đổi thuộc tính thơng qua 2 cách:

 Thay đổi khi thiết kế (Design): Nhấp chuột vào đối tượng, nhấn F4. Trong cửa sổ Properties ta chọn thuộc tính của đối tượng và nhập vào giá trị theo

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

 Thay đổi khi chương trình đang được kích hoạt (RunTime): Viết lệnh trong chương trình để gán giá trị cho thuộc tính của đối tượng theo cú pháp:

<i><Tên_đối_tương>.<Tên_thuộc_tính> = <Giá_trị> </i>

Chú ý: Có một số thuộc tính của đối tượng chỉ có thể thay đổi giá trị tại thời điểm thiết kế chương trình, ví dụ: ScrollBars của TextBox, Style của ComboBox,…. Giới thiệu một số thuộc tính chung (Có ở hầu hết các đối tượng):

 Name: Tên của đối tượng.

 Height, Width: Độ cao và độ rộng.

 Left, Top: Tọa độ lề trái và tọa độ cạnh trên cùng so với đối tượng chứa nó.  Font, ForeColor, BackColor: Font chữ, mầu chữ, mầu nền.

 Enabled: (Yes/No): Quy định có cho hay khơng cho truy nhập và tác động lên đối tượng.

 Visible: (Yes/No): Quy định có hay khơng hiển thị đối tượng.

 TabIndex: Qui định thứ tự nhận focus khi dịch chuyển bằng phím TAB.

Để gọi phương thức của đối tượng ta sử dụng cú pháp sau: <Tên_đối_tượng>.<Phương_thức> [Danh sách tham số] Ví dụ:

 textbox1.Focus(): Đưa con trỏ hội tụ vào đối tượng có tên Text1

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

Giới thiệu 1 số sự kiện:

 Click: Sự kiện xảy ra khi ta click chuột trái lên đối tượng.  Change: Xảy ra khi ta thay đổi nội dung (giá trị) của đối tượng.  MouseMove: Xảy ra khi ta di chuyển con chuột trên đối tượng.

<i><b>4.1.3. Kiến trúc (Architecture) của Windows Forms. </b></i>

Trong mơ hình cây thừa kế các lớp đều thừa kế từ lớp Object. Dưới đây là danh sách các lớp mà lớp form kế thừa:

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

<small>Object </small> <sup>Lớp cơ sở đầu trong .NET, superclass cao nhất từ đó sinh ra con </sup><small>cháu. </small>

<small>MarshalByRefObject Cung cấp các code cần thiết để quản lý vòng đời của objects. </small>

<small>Component </small> <sup>Cung cấp sự gây dựng căn bản của IComponent interface và cho </sup><small>phép các chương trình khác nhau dùng chung một object </small>

<small> Control </small>

<small>Đây là base class của mọi component dùng để hiển thị. Nó hỗ trợ những khả năng liên hệ đến vóc dáng và công tác hiển thị từ Show, BringtoFront, Font, Color cho đến Dock, Anchor. Ngồi ra nó cịn cung cấp các Events của keyboard, mouse và có method WndProc để cho ta truy cập các thông điệp của Windows. </small>

<small>ScrollableControl </small> <sup>Cung cấp chức năng tự động cuốn khi có chứa bên trong một </sup><small>control cần thêm chỗ để hiển thị. </small>

<small>ContainerControl Cho phép một component chứa các controls khác. </small>

<small>Form Cửa sổ chính của một chương trình. </small>

<b>4.2. Giới thiệu các điều khiển nội tại cơ bản. </b>

<i><b>4.2.1. Những điểm căn bản của Windows Forms. </b></i>

Trong các bài học và thí dụ trước đây ta đã nói qua, bây giờ ta tóm tắc những điểm căn bản của Windows Forms:

 Một Windows Form thật sự là một class. Trong .NET khơng có từ đặc biệt như "form module" để dùng cho nó.

 Tất cả mọi form đều thừa kế từ class System.Windows.Forms.Form.

 Tất cả các đối tượng kiểu form đều phải được khai báo và khởi tạo tường minh nếu ta muốn sử dụng (load).

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

 Giống như tất cả các classes trong .NET Framework, Windows Forms có các hàm tạo (constructors) và hủy bỏ (destructors).

 Các sự kiện (events) được xử lý bằng nhiều cách và rất linh động. Một sự kiện có thể được xử lý bởi nhiều điều khiển (control) cùng một lúc và mỗi điều khiển có một cách xử lý khác nhau. Ngược lại, nhiều sự kiện khác nhau có thể được xử lý bằng một Event Handler duy nhất.

Điểu khiển (control): là các đối tượng nằm trong Form. Mỗi điều khiển có một tập các thuộc tính (property), phương thức (method), sự kiện (event) cho những mục đích riêng.

<i><b>4.2.2. Làm việc với các điều khiển nội tại thường dùng. 4.2.2.1. Form </b></i>

Form là đối tượng cửa sổ không thể thiếu trong môi trường Windows. Form được dùng để chứa các đối tượng khác như nút lệnh (Button), hộp nhập văn bản (TextBox),…

Phân loại:

 Single Document Interface (SDI):

o Chỉ hỗ trợ một document hoặc một cửa sổ tại một thời điểm.

o Dạng ứng dụng như NotePad, MS Paint với các đặc tính xử lý ảnh và văn bản giới hạn.

o Để làm việc với nhiều tài liệu thì phải mở các instance khác của ứng dụng.

o Việc quản lý ứng dụng SDI khá đơn giản.

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

 Multiple Document Interface (MDI)

o Ứng dụng cho phép xử lý nhiều document tại một thời điểm.

o Các ứng dụng hiện tại thường là dạng MDI: MS Office, MS Studio.NET, Adobe Photoshop, …

o Ứng dụng MDI thường phức tạp và chức năng xử lý đa dạng:

 Xử lý cùng một dạng document: MS Word, Adobe Photoshop.  Xử lý nhiều dạng document :Visual Studio 6: code, design,

image…

<i><b>a) Thuộc tính (Properties). </b></i>

<i><b> Name: Tên của Form. Trong một Project tên của các Form phải khác nhau. </b></i>

<i><b> AcceptButton: Giá trị mà thuộc tính này nhận là tên của một Button trên </b></i>

Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím Enter thì sự

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

kiện Click của Button mà bạn chọn được thực thi mà khơng cần nhấn chuột vào Button đó.

<i><b> Autosize: Nhận một trong hai giá trị True hay False </b></i>

- True: Không cho phép thay đổi kích thước Form mà che đi các điều khiển khác chứa trên Form.

- False: Ngược lại

<i><b> AutoSizeMode: Cho phép thay đổi kích thước của Form hay khơng? (Khi di </b></i>

chuyển chuột vào các mép của Form mà hiện nên biểu tượng ↔ là cho phép). Và nhận một trong hai giá trị:

- GrowOnly: Cho phép

- GrowAndShrink: Không cho phép <i><b> BackColor: Chọn màu nền cho Form </b></i>

<i><b> BackGroundImage: Chọn ảnh làm nền cho Form </b></i>

<i><b> CancelButton: Giá trị mà thuộc tính này nhận là tên của một Button trên </b></i>

Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím ESC thì sự kiện Click của Button mà bạn chọn được thực thi mà không cần nhấn chuột vào Button đó (tương tự như thuộc tính AcceptButton ).

<i><b> ControlBox: Nhận một trong hai giá trị True hay False </b></i>

- True: Cho phép các các nút: MaximizeBox, MinimizeBox, Close trên Titlebar xuất hiện.

- False: Không Cho phép các các nút: MaximizeBox, MinimizeBox, Close trên Titlebar xuất hiện (Khi đó các thuộc tính MaximizeBox, MinimizeBox của Form cũng mất đi).

<i><b> Font: Chọn kiểu Font chữ cho Form (Khi đó tất cả các điều khiển </b></i>

được thêm vào Form sẽ có thuộc tính Font giống như thuộc tính Font của Form).

<i><b> ForeColor: Tương tự như thuộc tính Font nhưng áp dụng đối với màu </b></i>

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<i><b> FormBorderStyle: Chọn Style cho Form (Có 7 lựa chọn khác nhau). </b></i>

<i><b> KeyPreview: Nhận một trong hai giá trị True hay False </b></i>

- True: Cho phép các sự kiện về bàn phím của Form (KeyUp, KeyDown, KeyPress… của Form) có hiệu lực.

- False: Ngược lại.

<i><b> Opacity: Độ trong suốt của Form b) Sự kiện (Events). </b></i>

<i><b> AutoSizeChanged: Xảy ra khi thuộc tính Autosize của Form chuyển từ True </b></i>

→ False hay ngược lại là False → True.

<i><b> Click: Xảy ra khi người dùng Click chuột vào vùng làm việc thuộc </b></i>

Form.

<i><b> ControlAdded: Xảy ra khi một điều khiển được Add vào Form. </b></i>

<i><b> ControlRemoved: Xảy ra khi một điều khiển bị xóa khỏi Form. </b></i>

<i><b> FormClosed: Xảy ra khi Form đã đóng (Nhấn vào nút X màu đỏ trên </b></i>

Titlebar).

<i><b> FormClosing: Xảy ra khi Form đang đóng (2 sự kiện FormClosed và </b></i>

FormClosing thường dùng trong lập trình CSDL: khi xảy ra sự kiện này thì đóng kết nối CSDL).

<i><b> KeyDown, KeyPress, KeyUp: Bấm, nhả phím. </b></i>

<i><b> Một số ví dụ minh họa </b></i>

Sự kiện FormClosed

//Sự kiện FormClosed - Sự kiện này được gọi khi Form đã đóng

<b><small>privatevoid frmForm_FormClosed(object sender, FormClosedEventArgs e) { </small></b>

<b><small>MessageBox.Show("Sự kiện FormClosed được gọi", </small></b>

<b><small>"FormClosed",MessageBoxButtons.OK,MessageBoxIcon.Information); } </small></b>

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

Sự kiện FormClosing

<small>//Sự kiện FormClosing xảy ra khi Form đang đóng (chưa hồn tồn đóng) </small>

<b><small>privatevoid frmForm_FormClosing(object sender, FormClosingEventArgs e) { </small></b>

<b><small>if (MessageBox.Show("Bạn có muốn đóng Form lại hay khơng?", "FormClosing", </small></b>

<b><small> MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) </small></b>

<b><small>e.Cancel = false;// Đóng Form lại else</small></b>

<b><small>e.Cancel = true;//Khơng đóng Form nữa } </small></b>

Sự kiện MouseClick

<b><small>private void frmForm_MouseClick(object sender, MouseEventArgs e) </small></b>

<b><small>{ //Nếu bạn không muốn biết người dùng nhấn chuột TRÁI hay PHẢI hay GIỮA thì khi nhấn bất kì nút chuột nào cũng xảy ra sự kiện MouseClick của Form. </small></b>

<b><small>if (e.Button == MouseButtons.Left) </small></b>

<b><small>MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột TRÁI"); else if (e.Button==MouseButtons.Middle) </small></b>

<b><small>MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột GIỮA"); else if (e.Button==MouseButtons.Right) </small></b>

<b><small>MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột PHẢI"); } </small></b>

</div>

×