SlideShare a Scribd company logo
1 of 7
Download to read offline
Giới thiệu

Các lớp control của VB.NET (cũng như .NET Framework) có dạng cây kế thừa như sau:

                                                            Control




                  TextBoxBase                    ListView                                ...       UserControl




    RichTextBox                      TextBox




                                User-defined Control              User-defined Control         User-defined Control




Đầu tiên, tạo 1 Windows Application Project, đặt tên tùy ý (ở đây là
VBUserControlCustomControl). Visual Studio tạo 1 solution tên là
“VBUserControlCustomControl”; trong đó có sẵn 1 project dạng WinForm cùng tên. Form1
của project này được dùng để chạy thử các control sắp được định nghĩa.

Sau đó tiến hành thêm các control. Các control do người dùng định nghĩa (user-defined) đều
có thể được sử dụng tương tự các control có sẵn (built-in) của .NET Framework. Sau khi
build ứng dụng thành công, các control mới do người lập trình (người dùng) tự định nghĩa
được thêm vào Toolbox.

Để tạo control mới, người lập trình thường thừa kế từ một control có sẵn (như TextBox,
ListView,…), từ lớp System.Windows.Forms.UserControl hay từ lớp
Systems.Windows.Forms.Control.

Custom Control – RoundButton

Custom Control là các control được tạo thành bằng cách kế thừa lớp
System.Windows.Forms.Control.

Mục tiêu: tạo 1 Custom Control dạng Button nhưng có hình ellipse.

Trong cửa sổ Solution Explorer, nhấp chuột phải vào tên project, chọn Add → New Item….

Trong cửa số Add New Item, chọn Custom Control. Nhập tên cho Custom Control mới:
RoundButton. Nhấn OK.

Trong cửa sổ Solution Explorer, nhấp chuột phải vào RoundButton.vb, chọn View Code.
Thêm data member m_BackgroundColor vào lớp RoundButton, data member này lưu trữ
màu nền của đối tượng RoundButton:



Khai báo và định nghĩa Property cho m_BackgroundColor; nhờ phần này, BackgroundColor
sẽ xuất hiện ở dạng 1 mục chọn trong cửa sổ Properties của control RoundButton:




Override hàm OnPaint của lớp Control trong lớp RoundControl:




Đối tượng RoundButton khi thể hiện trong 1 Form sẽ có hình dạng 1 ellipse, màu nền là
m_BackgroundColor. Thông tin về kích thước (Width & Height) và dòng chữ (Text) trên
hình ellipse này có thể được thay đổi bằng cách kéo thả hay / và thao tác trong cửa sổ
Properties.

Build ứng dụng. Sửa lỗi nếu có thông báo lỗi.

Nhấp đôi chuột trái vào Form1.vb để mở màn hình thiết kế Form1.

Lúc này trong phần Toolbox đã có thêm control RoundButton. Ta có thể kéo thả control này
vào Form1 và sử dụng như 1 Button. Nhấp đôi chuột trái vào control này để vào hàm xử lí sự
kiện OnClick.

Tuy nhiên, khi ta nhấp chuột trái ngoài hình ellipse (nhưng vẫn còn trong control) thì sự kiện
OnClick vẫn xảy ra. Để sự kiện OnClick chỉ xảy ra khi người dùng nhấp chuột trong hình
ellipse ta phải kiểm tra điểm nhấp chuột có nằm trong hình ellipse hay không.

Cách đơn giản nhất là dùng 1 GraphicsPath có hình ellipse khớp với hình của RoundButton,
sau đó dùng hàm IsVisible của GraphicsPath để kiểm tra điểm nhấp chuột có nằm trong
GraphicsPath hay không. Lưu ý: phải chuyển điểm nhấp chuột từ hệ tọa độ Form1 sang hệ
tọa độ của control, dùng hàm PointToClient của Form1.
Các bước thực hiện:

   -   Bước 1: thêm data member m_VisibleArea kiểm GraphicsPath. Đây là biến giữ thông
       tin vùng có thể xảy ra sự kiện OnClick.



   -   Bước 2: chỉnh sửa hàm OnPaint để đưa thông tin vào m_VisibleArea.




   -   Bước 3: override hàm OnClick của RoundButton. Cursor.Position là vị trí của chuột
       trên Form1.




Extended Control – PowerTextBox

Extended Control là control được tạo ra bằng cách kế thừa một control có sẵn (TextBox,
ListView,…).

Mục tiêu: tạo 1 TextBox có cho phép chọn loại dữ liệu nhập (chữ, số, không phân biệt).

Trong cửa sổ Solution Explorer, nhấp chuột phải vào tên project, chọn Add → User
Control….

Nhập tên cho Control mới: PowerTextBox. Nhấn OK.

Mở tập tin PowerTextBox.Designer.vb (bằng Notepad hay Notepad++). Lưu ý: Visual Studio
không hiển thị tập tin này trong Solution Explorer, chỉ có thể chọn xem tập tin này trong
Windows Explorer (hoặc trình duyệt tập tin khác).

Sửa System.Windows.Forms.UserControl thành System.Windows.Forms.TextBox: control
PowerTextBox kế thừa từ lớp TextBox.
Sau khi sửa xong, có thể bị báo lỗi ở hàm InitializeComponent. Đó là do một số thuộc tính
của TextBox khác so với UserControl, chỉ cần bỏ (comment) những dòng báo lỗi là được.

Định nghĩa enum kiểu nhập trong lớp PowerTextBox:




Thêm các data member và property: m_TypeMode để lưu kiểu nhập và m_ErrorText để lưu
thông báo lỗi.




Viết hàm tạo (contructor) cho lớp PowerTextBox:




Chuyển qua màn hình Designer của PowerTextBox (bằng cách nhấp đôi chuột vào
PowerTextBox.vb trong Solution Explorer), gán hàm xử lí sự kiện KeyPress (nhấn phím) cho
control này. Hàm xử lí sự kiện được gán bằng cách nhấp đôi chuột vào dòng KeyPress.
Viết hàm xử lí sự kiện:




Composite Control

Composite Control là control chứa một số control khác. Thường được tạo bằng cách thừa kế
lớp System.Windows.Forms.UserControl.

Trong cửa sổ Solution Explorer, nhấp chuột phải vào Solution “…” (cấp cao nhất), chọn Add
→ New Project. Chọn loại project là Class Library. Đặt tên là FileChooserControl. Project
này sẽ chứa control mới do người lập trình tự định nghĩa và ở dạng thư viện DLL. Control
mới này bao gồm 1 TextBox và 1 Button, cho phép người dùng chọn tập tin và trả về đường
dẫn tập tin đó.

Để sử dụng control mới ở trên trong project VBUserControlCustomControl (project dạng
WinForm có chứa Form1.vb), nhấp chuột phải vào tên project
VBUserControlCustomControl, chọn Add Reference, chọn tab Projects, chọn
FileChooserControl, nhấn OK.

Quay lại project FileChooseControl, thêm UserControl bằng cách nhấp chuột phải vào
FileChooserControl, chọn Add… → User Control…, đặt tên là FileChooser.

Kéo từ Toolbox vào màn hình Designer của FileChooser 2 control:

   -   TextBox: trong cửa sổ Properties, gán Name = txtPath.
   -   Button: trong cửa sổ Properties, gán Name = btnBrowse, Text = Browse.




Nhấp đôi chuột vào button btnBrowse để nhảy đến hàm xử lí sự kiện OnClick
(btnBrowse_Click).

Trong lớp FileChooser, thêm enum biểu diễn loại cửa sổ cần mở (chọn đường dẫn mở file
hay lưu file):




Định nghĩa data member và property cho người dùng chọn loại cửa sổ:




Khai báo data member cửa sổ sẽ hiển thị cho người dùng chọn tập tin, lớp
System.Windows.Forms.FileDialog là lớp cha của lớp OpenFileDialog và SaveFileDialog:



Thêm data member lưu đường dẫn mà người dùng đã chọn:
Xử lí sự kiện OnClick của btnBrowse:




Tùy vào chọn lựa của người dùng mà cửa sổ OpenFileDialog hay SaveFileDialog được hiển
thị. Sau đó nếu người dùng nhấn nút OK, đường dẫn tập tin sẽ được đưa vào txtPath.Text
(thuộc tính nội dung của TextBox txtPath) và m_Path. Người dùng có thể truy xuất đến
đường dẫn này qua property Path (ví dụ: FileChooser1.Path).

Sau khi build solution thành công, chuyển qua màn hình Designer của Form1.vb (trong
project VBUserControlCustomControl), control FileChooser đã được gắn vào Toolbox và
chúng ta có thể dùng như 1 control thông thường. Người dùng có thể chọn DialogType bằng
cách vào cửa sổ Properties của control hay thao tác trực tiếp trong mã nguồn.

Nếu chúng ta quan sát kết quả sau khi build của project FileChooserControl thì thấy có một
tập tin DLL (FileChooserControl.dll) thay vì một tập tin .exe. Trong thư mục chứa kết quả
build của project VBUserControlCustomControl cũng có file FileChooserControl.dll do đã có
tham chiếu (reference) trước đó. Nếu muốn chạy được VBUserControlCustomControl.exe,
chúng ta phải chép file FileChooserControl.dll đi theo cùng thư mục.

Tài liệu tham khảo

http://msmvps.com/blogs/deborahk/archive/2009/10/13/winforms-user-controls-101.aspx

http://ondotnet.com/pub/a/dotnet/2002/06/03/custom.html

http://msdn.microsoft.com/en-us/library/ms996437.aspx

http://msdn.microsoft.com/en-us/library/ms996439.aspx

http://www.caulacbovb.com/forum/viewtopic.php?f=23&t=868

More Related Content

What's hot

Bai tap testing junit…..
Bai tap testing junit…..Bai tap testing junit…..
Bai tap testing junit…..Mua Xuong
 
Tai lieu wincc flexible tieng viet
Tai lieu wincc flexible tieng vietTai lieu wincc flexible tieng viet
Tai lieu wincc flexible tieng viethautruyphong
 
Chuong 3 windows forms
Chuong 3   windows formsChuong 3   windows forms
Chuong 3 windows formsHarees Seni
 
Bài giảng ACCESS - VBA
Bài giảng ACCESS - VBABài giảng ACCESS - VBA
Bài giảng ACCESS - VBAhg4ever
 
P3 web server control
P3   web server controlP3   web server control
P3 web server controltancntt89
 
Chuong vb.net
Chuong vb.netChuong vb.net
Chuong vb.netkienbom
 
Chuong 08 menu and toolbar
Chuong 08   menu and toolbarChuong 08   menu and toolbar
Chuong 08 menu and toolbarHung Pham Thai
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Minh Tri Lam
 

What's hot (16)

Bai tap testing junit…..
Bai tap testing junit…..Bai tap testing junit…..
Bai tap testing junit…..
 
63 2601
63 260163 2601
63 2601
 
Tai lieu wincc flexible tieng viet
Tai lieu wincc flexible tieng vietTai lieu wincc flexible tieng viet
Tai lieu wincc flexible tieng viet
 
Oop 11
Oop 11Oop 11
Oop 11
 
Introduction Android For Begineer
Introduction Android For BegineerIntroduction Android For Begineer
Introduction Android For Begineer
 
Chuong 3 windows forms
Chuong 3   windows formsChuong 3   windows forms
Chuong 3 windows forms
 
Bài giảng ACCESS - VBA
Bài giảng ACCESS - VBABài giảng ACCESS - VBA
Bài giảng ACCESS - VBA
 
P7 controls 2010
P7  controls 2010P7  controls 2010
P7 controls 2010
 
P3 web server control
P3   web server controlP3   web server control
P3 web server control
 
Chuong vb.net
Chuong vb.netChuong vb.net
Chuong vb.net
 
C# co ban 8
C# co ban 8C# co ban 8
C# co ban 8
 
Chuong 08 menu and toolbar
Chuong 08   menu and toolbarChuong 08   menu and toolbar
Chuong 08 menu and toolbar
 
Bai tap3 java
Bai tap3 javaBai tap3 java
Bai tap3 java
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
 
Do xuanthai
Do xuanthaiDo xuanthai
Do xuanthai
 
access
accessaccess
access
 

Similar to Hdth03 ltudql02-user control

Core java 5
Core java 5Core java 5
Core java 5. .
 
Microstation v8
Microstation v8Microstation v8
Microstation v8Ttx Love
 
Sử dụng Microstation v8 căn bản
Sử dụng Microstation v8 căn bảnSử dụng Microstation v8 căn bản
Sử dụng Microstation v8 căn bảnThiều Nem
 
Hướng dẫn lập trình với visual basic
Hướng dẫn lập trình với visual basicHướng dẫn lập trình với visual basic
Hướng dẫn lập trình với visual basicnataliej4
 
Về Visual Basic 20 5
Về Visual Basic 20 5Về Visual Basic 20 5
Về Visual Basic 20 5Phong Lữ
 
Giáo trình tổng quan về Vb
Giáo trình tổng quan về VbGiáo trình tổng quan về Vb
Giáo trình tổng quan về VbSun Down
 
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnOop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnTráng Hà Viết
 
Bài 2: Hướng dẫn làm việc với các điều khiển - Giáo trình FPT - Có ví dụ kèm ...
Bài 2: Hướng dẫn làm việc với các điều khiển - Giáo trình FPT - Có ví dụ kèm ...Bài 2: Hướng dẫn làm việc với các điều khiển - Giáo trình FPT - Có ví dụ kèm ...
Bài 2: Hướng dẫn làm việc với các điều khiển - Giáo trình FPT - Có ví dụ kèm ...MasterCode.vn
 
IT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldIT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldMultiUni
 
Bài 7: Toast – Dialog, ListView & Binding
Bài 7: Toast – Dialog, ListView & BindingBài 7: Toast – Dialog, ListView & Binding
Bài 7: Toast – Dialog, ListView & Bindinghoccungdoanhnghiep
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpngohanty13
 
Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Calvin Nguyen
 
Vi du chi tiet giai thich lap trinh gui trong matlab
Vi du chi tiet  giai thich lap trinh gui trong matlabVi du chi tiet  giai thich lap trinh gui trong matlab
Vi du chi tiet giai thich lap trinh gui trong matlabPhạmThế Anh
 
Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Giang Nguyễn
 

Similar to Hdth03 ltudql02-user control (20)

Core java 5
Core java 5Core java 5
Core java 5
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Window Form
Window FormWindow Form
Window Form
 
Microstation v8
Microstation v8Microstation v8
Microstation v8
 
Sử dụng Microstation v8 căn bản
Sử dụng Microstation v8 căn bảnSử dụng Microstation v8 căn bản
Sử dụng Microstation v8 căn bản
 
Hướng dẫn lập trình với visual basic
Hướng dẫn lập trình với visual basicHướng dẫn lập trình với visual basic
Hướng dẫn lập trình với visual basic
 
Về Visual Basic 20 5
Về Visual Basic 20 5Về Visual Basic 20 5
Về Visual Basic 20 5
 
Giáo trình tổng quan về Vb
Giáo trình tổng quan về VbGiáo trình tổng quan về Vb
Giáo trình tổng quan về Vb
 
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiệnOop unit 12 đồ họa và xử lý sự kiện
Oop unit 12 đồ họa và xử lý sự kiện
 
Bài 2: Hướng dẫn làm việc với các điều khiển - Giáo trình FPT - Có ví dụ kèm ...
Bài 2: Hướng dẫn làm việc với các điều khiển - Giáo trình FPT - Có ví dụ kèm ...Bài 2: Hướng dẫn làm việc với các điều khiển - Giáo trình FPT - Có ví dụ kèm ...
Bài 2: Hướng dẫn làm việc với các điều khiển - Giáo trình FPT - Có ví dụ kèm ...
 
IT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldIT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello World
 
Bai tap-vb
Bai tap-vbBai tap-vb
Bai tap-vb
 
Bài 7: Toast – Dialog, ListView & Binding
Bài 7: Toast – Dialog, ListView & BindingBài 7: Toast – Dialog, ListView & Binding
Bài 7: Toast – Dialog, ListView & Binding
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharp
 
Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206
 
Vi du chi tiet giai thich lap trinh gui trong matlab
Vi du chi tiet  giai thich lap trinh gui trong matlabVi du chi tiet  giai thich lap trinh gui trong matlab
Vi du chi tiet giai thich lap trinh gui trong matlab
 
Hdsd eclipse
Hdsd eclipseHdsd eclipse
Hdsd eclipse
 
Vb6 16 (4)
Vb6 16 (4)Vb6 16 (4)
Vb6 16 (4)
 
Ltctwd
LtctwdLtctwd
Ltctwd
 
Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206Joomla administratormanual vi_20060206
Joomla administratormanual vi_20060206
 

More from Dũng Đinh

Hdth08 ltudql02-linq
Hdth08 ltudql02-linqHdth08 ltudql02-linq
Hdth08 ltudql02-linqDũng Đinh
 
Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Dũng Đinh
 
Hdth06 ltudql02-multi languages
Hdth06 ltudql02-multi languagesHdth06 ltudql02-multi languages
Hdth06 ltudql02-multi languagesDũng Đinh
 
Hdth04 ltudql02-dotnet bar
Hdth04 ltudql02-dotnet barHdth04 ltudql02-dotnet bar
Hdth04 ltudql02-dotnet barDũng Đinh
 
Hdth02 ltudql02--tuan02 tt-
Hdth02 ltudql02--tuan02 tt-Hdth02 ltudql02--tuan02 tt-
Hdth02 ltudql02--tuan02 tt-Dũng Đinh
 
Hdth02 ltudql02-su dungsubversion-2
Hdth02 ltudql02-su dungsubversion-2Hdth02 ltudql02-su dungsubversion-2
Hdth02 ltudql02-su dungsubversion-2Dũng Đinh
 
Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Dũng Đinh
 
Hdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbHdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbDũng Đinh
 
Hdth09 ltudql02-linq-e3
Hdth09 ltudql02-linq-e3Hdth09 ltudql02-linq-e3
Hdth09 ltudql02-linq-e3Dũng Đinh
 
Thiet kegiaodien
Thiet kegiaodienThiet kegiaodien
Thiet kegiaodienDũng Đinh
 
07bis.thiet kedulieu
07bis.thiet kedulieu07bis.thiet kedulieu
07bis.thiet kedulieuDũng Đinh
 
06.mo hinhhoayeucau
06.mo hinhhoayeucau06.mo hinhhoayeucau
06.mo hinhhoayeucauDũng Đinh
 
05.thu thapyeucau
05.thu thapyeucau05.thu thapyeucau
05.thu thapyeucauDũng Đinh
 
01.lap trinhhuongdoituong
01.lap trinhhuongdoituong01.lap trinhhuongdoituong
01.lap trinhhuongdoituongDũng Đinh
 

More from Dũng Đinh (19)

Report
ReportReport
Report
 
Linq2 sql
Linq2 sqlLinq2 sql
Linq2 sql
 
Hdth08 ltudql02-linq
Hdth08 ltudql02-linqHdth08 ltudql02-linq
Hdth08 ltudql02-linq
 
Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1
 
Hdth06 ltudql02-multi languages
Hdth06 ltudql02-multi languagesHdth06 ltudql02-multi languages
Hdth06 ltudql02-multi languages
 
Hdth04 ltudql02-dotnet bar
Hdth04 ltudql02-dotnet barHdth04 ltudql02-dotnet bar
Hdth04 ltudql02-dotnet bar
 
Hdth02 ltudql02--tuan02 tt-
Hdth02 ltudql02--tuan02 tt-Hdth02 ltudql02--tuan02 tt-
Hdth02 ltudql02--tuan02 tt-
 
Hdth02 ltudql02-su dungsubversion-2
Hdth02 ltudql02-su dungsubversion-2Hdth02 ltudql02-su dungsubversion-2
Hdth02 ltudql02-su dungsubversion-2
 
Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1Hdth02 ltudql02-su dungsubversion-1
Hdth02 ltudql02-su dungsubversion-1
 
Hdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vbHdth01 ltudql2-lap tinhduongdoituong-vb
Hdth01 ltudql2-lap tinhduongdoituong-vb
 
Hdth09 ltudql02-linq-e3
Hdth09 ltudql02-linq-e3Hdth09 ltudql02-linq-e3
Hdth09 ltudql02-linq-e3
 
Thiet kegiaodien
Thiet kegiaodienThiet kegiaodien
Thiet kegiaodien
 
07bis.thiet kedulieu
07bis.thiet kedulieu07bis.thiet kedulieu
07bis.thiet kedulieu
 
06.mo hinhhoayeucau
06.mo hinhhoayeucau06.mo hinhhoayeucau
06.mo hinhhoayeucau
 
05.thu thapyeucau
05.thu thapyeucau05.thu thapyeucau
05.thu thapyeucau
 
04.mo daucnpm
04.mo daucnpm04.mo daucnpm
04.mo daucnpm
 
03.ke thua daxa
03.ke thua daxa03.ke thua daxa
03.ke thua daxa
 
02.thiet kelop
02.thiet kelop02.thiet kelop
02.thiet kelop
 
01.lap trinhhuongdoituong
01.lap trinhhuongdoituong01.lap trinhhuongdoituong
01.lap trinhhuongdoituong
 

Recently uploaded

vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptxvat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptxlephuongvu2019
 
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...cogiahuy36
 
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfGieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfXem Số Mệnh
 
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem Số Mệnh
 
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docxNỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx7E26NguynThThyLinh
 
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Xem Số Mệnh
 
.................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam........................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam.......thoa051989
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...Nguyen Thanh Tu Collection
 
đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21nguyenthao2003bd
 
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"LaiHoang6
 
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
chủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìchủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìanlqd1402
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ haoBookoTime
 
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTrangL188166
 
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Xem Số Mệnh
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...Nguyen Thanh Tu Collection
 
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptxGame-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptxxaxanhuxaxoi
 

Recently uploaded (20)

vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptxvat li 10  Chuyen de bai 4 Xac dinh phuong huong.pptx
vat li 10 Chuyen de bai 4 Xac dinh phuong huong.pptx
 
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
TƯ TƯỞNG HỒ CHÍ MINH VỀ NHÀ NƯỚC CỦA NHÂN DÂN, DO NHÂN DÂN, VÌ NHÂN DÂN VÀ VẬ...
 
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfGieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
 
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
 
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docxNỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
 
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
Lập lá số tử vi trọn đời có luận giải chi tiết, chính xác n...
 
.................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam........................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam.......
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
 
đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21đồ án thương mại quốc tế- hutech - KDQTK21
đồ án thương mại quốc tế- hutech - KDQTK21
 
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
syllabus for the book "Tiếng Anh 6 i-Learn Smart World"
 
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
chủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kìchủ nghĩa xã hội khoa học về đề tài cuối kì
chủ nghĩa xã hội khoa học về đề tài cuối kì
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
1第一课:你好.pptx. Chinese lesson 1: Hello.Nỉ hao
 
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
 
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
Luận giải tử vi của 12 con giáp năm 2024 chi tiết và chính xác -...
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
 
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptxGame-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
Game-Plants-vs-Zombies để ôn tập môn kinh tế chính trị.pptx
 

Hdth03 ltudql02-user control

  • 1. Giới thiệu Các lớp control của VB.NET (cũng như .NET Framework) có dạng cây kế thừa như sau: Control TextBoxBase ListView ... UserControl RichTextBox TextBox User-defined Control User-defined Control User-defined Control Đầu tiên, tạo 1 Windows Application Project, đặt tên tùy ý (ở đây là VBUserControlCustomControl). Visual Studio tạo 1 solution tên là “VBUserControlCustomControl”; trong đó có sẵn 1 project dạng WinForm cùng tên. Form1 của project này được dùng để chạy thử các control sắp được định nghĩa. Sau đó tiến hành thêm các control. Các control do người dùng định nghĩa (user-defined) đều có thể được sử dụng tương tự các control có sẵn (built-in) của .NET Framework. Sau khi build ứng dụng thành công, các control mới do người lập trình (người dùng) tự định nghĩa được thêm vào Toolbox. Để tạo control mới, người lập trình thường thừa kế từ một control có sẵn (như TextBox, ListView,…), từ lớp System.Windows.Forms.UserControl hay từ lớp Systems.Windows.Forms.Control. Custom Control – RoundButton Custom Control là các control được tạo thành bằng cách kế thừa lớp System.Windows.Forms.Control. Mục tiêu: tạo 1 Custom Control dạng Button nhưng có hình ellipse. Trong cửa sổ Solution Explorer, nhấp chuột phải vào tên project, chọn Add → New Item…. Trong cửa số Add New Item, chọn Custom Control. Nhập tên cho Custom Control mới: RoundButton. Nhấn OK. Trong cửa sổ Solution Explorer, nhấp chuột phải vào RoundButton.vb, chọn View Code.
  • 2. Thêm data member m_BackgroundColor vào lớp RoundButton, data member này lưu trữ màu nền của đối tượng RoundButton: Khai báo và định nghĩa Property cho m_BackgroundColor; nhờ phần này, BackgroundColor sẽ xuất hiện ở dạng 1 mục chọn trong cửa sổ Properties của control RoundButton: Override hàm OnPaint của lớp Control trong lớp RoundControl: Đối tượng RoundButton khi thể hiện trong 1 Form sẽ có hình dạng 1 ellipse, màu nền là m_BackgroundColor. Thông tin về kích thước (Width & Height) và dòng chữ (Text) trên hình ellipse này có thể được thay đổi bằng cách kéo thả hay / và thao tác trong cửa sổ Properties. Build ứng dụng. Sửa lỗi nếu có thông báo lỗi. Nhấp đôi chuột trái vào Form1.vb để mở màn hình thiết kế Form1. Lúc này trong phần Toolbox đã có thêm control RoundButton. Ta có thể kéo thả control này vào Form1 và sử dụng như 1 Button. Nhấp đôi chuột trái vào control này để vào hàm xử lí sự kiện OnClick. Tuy nhiên, khi ta nhấp chuột trái ngoài hình ellipse (nhưng vẫn còn trong control) thì sự kiện OnClick vẫn xảy ra. Để sự kiện OnClick chỉ xảy ra khi người dùng nhấp chuột trong hình ellipse ta phải kiểm tra điểm nhấp chuột có nằm trong hình ellipse hay không. Cách đơn giản nhất là dùng 1 GraphicsPath có hình ellipse khớp với hình của RoundButton, sau đó dùng hàm IsVisible của GraphicsPath để kiểm tra điểm nhấp chuột có nằm trong GraphicsPath hay không. Lưu ý: phải chuyển điểm nhấp chuột từ hệ tọa độ Form1 sang hệ tọa độ của control, dùng hàm PointToClient của Form1.
  • 3. Các bước thực hiện: - Bước 1: thêm data member m_VisibleArea kiểm GraphicsPath. Đây là biến giữ thông tin vùng có thể xảy ra sự kiện OnClick. - Bước 2: chỉnh sửa hàm OnPaint để đưa thông tin vào m_VisibleArea. - Bước 3: override hàm OnClick của RoundButton. Cursor.Position là vị trí của chuột trên Form1. Extended Control – PowerTextBox Extended Control là control được tạo ra bằng cách kế thừa một control có sẵn (TextBox, ListView,…). Mục tiêu: tạo 1 TextBox có cho phép chọn loại dữ liệu nhập (chữ, số, không phân biệt). Trong cửa sổ Solution Explorer, nhấp chuột phải vào tên project, chọn Add → User Control…. Nhập tên cho Control mới: PowerTextBox. Nhấn OK. Mở tập tin PowerTextBox.Designer.vb (bằng Notepad hay Notepad++). Lưu ý: Visual Studio không hiển thị tập tin này trong Solution Explorer, chỉ có thể chọn xem tập tin này trong Windows Explorer (hoặc trình duyệt tập tin khác). Sửa System.Windows.Forms.UserControl thành System.Windows.Forms.TextBox: control PowerTextBox kế thừa từ lớp TextBox.
  • 4. Sau khi sửa xong, có thể bị báo lỗi ở hàm InitializeComponent. Đó là do một số thuộc tính của TextBox khác so với UserControl, chỉ cần bỏ (comment) những dòng báo lỗi là được. Định nghĩa enum kiểu nhập trong lớp PowerTextBox: Thêm các data member và property: m_TypeMode để lưu kiểu nhập và m_ErrorText để lưu thông báo lỗi. Viết hàm tạo (contructor) cho lớp PowerTextBox: Chuyển qua màn hình Designer của PowerTextBox (bằng cách nhấp đôi chuột vào PowerTextBox.vb trong Solution Explorer), gán hàm xử lí sự kiện KeyPress (nhấn phím) cho control này. Hàm xử lí sự kiện được gán bằng cách nhấp đôi chuột vào dòng KeyPress.
  • 5. Viết hàm xử lí sự kiện: Composite Control Composite Control là control chứa một số control khác. Thường được tạo bằng cách thừa kế lớp System.Windows.Forms.UserControl. Trong cửa sổ Solution Explorer, nhấp chuột phải vào Solution “…” (cấp cao nhất), chọn Add → New Project. Chọn loại project là Class Library. Đặt tên là FileChooserControl. Project này sẽ chứa control mới do người lập trình tự định nghĩa và ở dạng thư viện DLL. Control mới này bao gồm 1 TextBox và 1 Button, cho phép người dùng chọn tập tin và trả về đường dẫn tập tin đó. Để sử dụng control mới ở trên trong project VBUserControlCustomControl (project dạng WinForm có chứa Form1.vb), nhấp chuột phải vào tên project
  • 6. VBUserControlCustomControl, chọn Add Reference, chọn tab Projects, chọn FileChooserControl, nhấn OK. Quay lại project FileChooseControl, thêm UserControl bằng cách nhấp chuột phải vào FileChooserControl, chọn Add… → User Control…, đặt tên là FileChooser. Kéo từ Toolbox vào màn hình Designer của FileChooser 2 control: - TextBox: trong cửa sổ Properties, gán Name = txtPath. - Button: trong cửa sổ Properties, gán Name = btnBrowse, Text = Browse. Nhấp đôi chuột vào button btnBrowse để nhảy đến hàm xử lí sự kiện OnClick (btnBrowse_Click). Trong lớp FileChooser, thêm enum biểu diễn loại cửa sổ cần mở (chọn đường dẫn mở file hay lưu file): Định nghĩa data member và property cho người dùng chọn loại cửa sổ: Khai báo data member cửa sổ sẽ hiển thị cho người dùng chọn tập tin, lớp System.Windows.Forms.FileDialog là lớp cha của lớp OpenFileDialog và SaveFileDialog: Thêm data member lưu đường dẫn mà người dùng đã chọn:
  • 7. Xử lí sự kiện OnClick của btnBrowse: Tùy vào chọn lựa của người dùng mà cửa sổ OpenFileDialog hay SaveFileDialog được hiển thị. Sau đó nếu người dùng nhấn nút OK, đường dẫn tập tin sẽ được đưa vào txtPath.Text (thuộc tính nội dung của TextBox txtPath) và m_Path. Người dùng có thể truy xuất đến đường dẫn này qua property Path (ví dụ: FileChooser1.Path). Sau khi build solution thành công, chuyển qua màn hình Designer của Form1.vb (trong project VBUserControlCustomControl), control FileChooser đã được gắn vào Toolbox và chúng ta có thể dùng như 1 control thông thường. Người dùng có thể chọn DialogType bằng cách vào cửa sổ Properties của control hay thao tác trực tiếp trong mã nguồn. Nếu chúng ta quan sát kết quả sau khi build của project FileChooserControl thì thấy có một tập tin DLL (FileChooserControl.dll) thay vì một tập tin .exe. Trong thư mục chứa kết quả build của project VBUserControlCustomControl cũng có file FileChooserControl.dll do đã có tham chiếu (reference) trước đó. Nếu muốn chạy được VBUserControlCustomControl.exe, chúng ta phải chép file FileChooserControl.dll đi theo cùng thư mục. Tài liệu tham khảo http://msmvps.com/blogs/deborahk/archive/2009/10/13/winforms-user-controls-101.aspx http://ondotnet.com/pub/a/dotnet/2002/06/03/custom.html http://msdn.microsoft.com/en-us/library/ms996437.aspx http://msdn.microsoft.com/en-us/library/ms996439.aspx http://www.caulacbovb.com/forum/viewtopic.php?f=23&t=868