Cách dễ dàng nhất để giới thiệu Smart Device Extensions là bằng ví dụ. Chúng ta sẽ tạo ra một chương trình ứng dụng đơn giản có tên là “Hello World” bằng ngôn ngữ C#.
Trang 1Tìm hiểu về công nghệ NET Compact Framework và lập trình ứng dụng trên Pocket PC.
Mục Lục
Lời Nói Đầu:
Chương 1 : Thiết lập môi trường phát triển ứng dụng
1.1 Smart Device Extension và NET Compact Framework 1.2 Những thiết bị phi chuẩn
Chương 2:Thiết kế những ứng dụng GUI băng Windows Forms.
2.1 Tìm hiểu những điều khiển không được hỗ trợ trong NET Compact Framework2.2 Những hàm System.Windows.Forms không được hỗ trợ trong NET Compact Framework
2.3 Làm việc với cửa sổ Form Designer của Visual Studio NET 2.4 Tìm hiểu về các nền tảng khác nhau của Windows Forms 2.5 Làm việc với Control của Form
2.6 Điều khiển Button
2.7 Sử dụng điều khiển TextBox 2.8 Sử dụng điều khiển Label 2.9 Điều khiển RadioButton
2.10 Sử dụng điều khiển CheckBox 2.11 Sử dụng điều khiển ComboBox2.12 Sử dụng điều khiển ListBox 2.13 Các điều khiển khác
Chương 3: Tìm hiểu ADO.NET trên NET Compact Framework
3.1 Giới thiệu ADO.NET trên NET Compact Framework 3.2 Lưu dữ liệu với DataSet
3.3 Tìm hiểu về các ràng buộc dữ liệu
3.4 Thiết lập cho các trường tự động tăng giá trị 3.5 Mô hình dữ liệu quan hệ với DataSet
3.6 Tạo các khung ràng buộc của dữ liệu với một DataView
Chương 4: Lập trình với Microsoft SQL Server CE
4.1 Tìm hiểu các tính chất hỗ trợ bởi Microsoft SQL Server 2000 Windows CE Edition
4.2 Tạo CSDL Microsoft SQL Server CE
4.3 Thêm cấu trúc vào một CSDL Microsoft SQL Server CE 4.4 Lưu trữ (Populating) CSDL Microsoft SQL Server CE4.5 Lấy dữ liệu bằng SqlCeDataReader
Trang 2Mục Lục
Lời Nói Đầu: 2
-Chương 1 : Thiết lập môi trường phát triển ứng dụng 2
1.1 Smart Device Extension và NET Compact Framework 2
1.2 Những thiết bị phi chuẩn 13
-Chương 2:Thiết kế những ứng dụng GUI băng Windows Forms. 15
-2.1 Tìm hiểu những điều khiển không được hỗ trợ trong NET Compact Framework - 15 -
2.2 Những hàm System.Windows.Forms không được hỗ trợ trong NET Compact Framework - 16 -
2.3 Làm việc với cửa sổ Form Designer của Visual Studio NET 16
2.4 Tìm hiểu về các nền tảng khác nhau của Windows Forms 20
2.5 Làm việc với Control của Form 22
2.6 Điều khiển Button 24
2.7 Sử dụng điều khiển TextBox 25
2.8 Sử dụng điều khiển Label 26
2.9 Điều khiển RadioButton 26
2.10 Sử dụng điều khiển CheckBox 27
2.11 Sử dụng điều khiển ComboBox 28
2.12 Sử dụng điều khiển ListBox 31
2.13 Các điều khiển khác 32
-Chương 3: Tìm hiểu ADO.NET trên NET Compact Framework 60
3.1 Giới thiệu ADO.NET trên NET Compact Framework 60
3.2 Lưu dữ liệu với DataSet 60
Trang 33.3 Tìm hiểu về các ràng buộc dữ liệu 65
3.4 Thiết lập cho các trường tự động tăng giá trị 67
3.5 Mô hình dữ liệu quan hệ với DataSet 68
3.6 Tạo các khung ràng buộc của dữ liệu với một DataView 73
-Chương 4: Lập trình với Microsoft SQL Server CE 77
-4.1 Tìm hiểu các tính chất hỗ trợ bởi Microsoft SQL Server 2000 Windows CE Edition - 77 -
4.2 Tạo CSDL Microsoft SQL Server CE 77
4.3 Thêm cấu trúc vào một CSDL Microsoft SQL Server CE 78
4.4 Lưu trữ (Populating) CSDL Microsoft SQL Server CE 83
4.5 Lấy dữ liệu bằng SqlCeDataReader 84
4.6 Lọc một DataSet bằng SqlCeDataAdapter 89
4.7 Cập nhật CSDL Microsoft SQL Server CE sử dụng SqlCeDataAdapter 91
4.8 Đối tượng SqlCommand với SqlCeCommandBuilder 92
-Chương 5: Tài Liệu Tham Khảo 94
-Lời Nói Đầu
Như chúng ta thấy, hiện nay các thiết bị di động ngày càng trở nên đa dạng và rấtphong phú, nó bao gồm rất nhiều loại máy tính xách tay và các loại máy điện thoại diđộng khác nhau Những chiếc máy tính xách tay hay những chiếc điện thoại di động đangngày càng trở nên rẻ hơn, thiết kế cải tiến hơn, kiểu dáng nhỏ gọn và đẹp mắt hơn, chúngcó nhiều tính năng tiện dụng hơn Những thiết bị di động đang trở nên càng ngày càng lôicuốn nhiều công ty và cá nhân sử dụng hơn Mặt khác những thiết bị này rất hữu dụng vàtiện lợi Cũng chính vì nhu cầu đó, việc phát triển phần mềm để chạy trên những thiết bịdi động này cũng ngày càng yêu cầu những kỹ thuật đặc biệt hơn
Sự phát triển những ứng dụng cho các thiết bị di động sẽ cần đến những kỹ năngđặc biệt Những thiết bị cầm tay ngày càng được thiết kế với kích thước nhỏ gọn, xâydựng những ứng dụng tốt hơn, phù hợp với nhu cầu tự nhiên của con người Vì vậy,với NET Compact Framework và Smart Device Extensions (SDE) của Visual StudioNET, Microsoft đã cung cấp một kỹ thuật phát triển phần mềm thích hợp cho các loạithiết bị di động và những người thiết kế các thiết bị di động Và sau đây ta sẽ tìm hiểuvề NET Compact Framework và Smart Device Extensions.
Tìm hiểu về công nghệ NET Compact Framework vàlập trình ứng dụng trên Pocket PC.
Sau đây chúng ta sẽ tìm hiểu về công nghệ NET Compact Framework và lậptrình ứng dụng trên Pocket PC trên nền Windows mobile Trong tài liệu này, các ví dụ
được triển khai bằng ngôn ngữ lập trình C#, trong Visual Studio.NET 2003.
Trang 4Chương 1 : Thiết lập môi trường phát triển ứng dụng
1.1 Smart Device Extension và NET Compact Framework
1.1.1 Giới thiệu về NET Compact Framework
- .NET Compact Framework là nền tảng dữ liệu cho các ứng dụng VisualStudio NET được phát triển cho các thiết bị di động sử dụng hệ điều hành Windows CEhoặc Windows Mobile
- NET Compact Framework là một thư viện lớp phong phú, cung cấp một APIđồng dạng mà những người phát triển có thể dung cả C#, Visual Basic NET, và cả nhữngngôn ngữ trong tương lai sẽ được hỗ trợ NET Compact Framework
- NET Compact Framework gồm những lớp truy nhập dữ liệu rất đa dạng vàrộng, những lớp thao tác XML, có một tập hợp những kiểu dữ liệu cơ bản phong phú, cósự hỗ trợ nối mạng dễ sử dụng hơn, và v v…
- NET Compact Framework 2.0 là nền tảng cho 1 số ứng dụng cho PPC đượcphát triễn trên code Visual Studio NET
NET Compact Framework là một phiên bản thu nhỏ của NET Framework đượcsử dụng để tạo, xây dựng, gỡ lỗi và triển khai các ứng dụng chạy trên NET CompactFramework trong các PDA, điện thoại di động và các thiết bị thông minh khác NETCompact Framework sử dụng một số những thư viện lớp thông thường giống như NETFramework và ngoài ra còn sử dụng một vài thư viện được thiết kế đặc biệt dành chonhững thiết bị di động như Windows CE InputPanel.
.NET Compact Framework là nền tảng của Microsoft để phát triển các ứng dụngdi động, hỗ trợ khả năng khai thác sức mạnh của các dịch vụ web trên thiết bị di động.Ngoài ra, lập trình viên có thể tận dụng những tính năng cao cấp của Visual Studio"Everett" để xây dựng các ứng dụng hữu ích cho doanh nghiệp một cách nhanh chóng.Smart Device Extensions, một phần mở rộng cho IDE của Visual Studio NET, cung cấpcác chức năng giúp đơn giản hoá việc lập trình ứng dụng di động.
Sự khác nhau giữa NET Compact Framework và NET Framework: NET
Compact Framework là một phiên bản thu nhỏ của NET Framework .NET CompactFramework và NET Framework, tuy cả 2 đều là nền tảng của Visual Studio NET,nhưng:
*.NET Compact Framework: phát triển chủ yếu cho các ứng dụng của WindowsMobile Khi cài đặt NET Compact Framework (phiên bản giành cho Windows) thìchương trình cũng sẽ tự động cập nhật phiên bản mới cho điện thoại (nếu phiên bản càiđặt là bản mới hơn bản được tích hợp sẵn của hệ điều hành WM) Và NET compactframwork cho Pocket PC giới hạn hơn và chỉ có khoảng 2.5 M
* NET Framework là nền tảng phát triển các ứng dụng cho PC.
Trang 51.1.2 Những yêu cầu về hệ thống.
Smart Devices Extensions (Mở rộng những thiết bị thông minh) là môi trườngphát triển tích hợp (IDE) thông qua mục đích của những người thiết kế NET CompactFramework Nó bao gồm phiên bản Visual Studio NET 7.1 hoặc các phiên bản về sau,Enterprise Developer và Enterprise Architect Editions Để chạy Visual Studio NET 7.1Enterprise Developer hay Enterprise Architect, bạn cần một hệ thống máy tính với nhữngyêu cầu tối thiểu được phác thảo trong bảng 1.1.
Bảng 1.1 Những yêu cầu hệ thống trong Visual Studio NET 2003
Operatingsystem and
ActiveSync 3.5 hoặc lớn hơn
Ngoài ra, ta cần có một thiết bị được hỗ trợ để chạy những chương trình .NETCompact Framework tương thích với mọi thiết bị có khả năng chạy hệ điều hành PocketPC
Việc truy nhập Smart Device Extensions xảy ra tự động khi bạn tạo ra một ứngdụng mới cho một Pocket PC hay thiết bị Windows CE hoặc khi bạn mở một Pocket PCđược tạo ra trước đó hay một ứng dụng Windows CE
1.1.3 Sử dụng Smart Device Extensions
Cách đơn giản nhất để phát triển NET Compact Framework là sử dụng SmartDevice Extensions (những mở rộng thiết bị thông minh) trong Visual Studio NET 7.1.Để đơn giản cho một mở rộng của Visual Studio 7.1, thì Smart Device Extensions giớithiệu những kiểu dự án mới, cho phép chúng ta chạy trên Windows CE, những Thiết bị
Trang 6hỗ trợ NET Compact Framework, như Pocket PC Điều này có nghĩa là sử dụng SmartDevice Extensions để phát triển những ứng dụng cho Windows CE dễ dàng như việc pháttriển những ứng dụng cho Windows 2000 hay XP Nếu bạn đã làm một ứng dụng bằngviệc sử dụng những phiên bản trước đây của Visual Basic, thì bạn cũng không phải lolắng gì với Smart Device Extensions của Visual Studio Smart Device Extensions đủthông minh để biên dịch ứng dụng của bạn
1.1.4 Tạo một ứng dụng mới cho những thiết bị Pocket PC
Cách dễ dàng nhất để giới thiệu Smart Device Extensions là bằng ví dụ Chúng tasẽ tạo ra một chương trình ứng dụng đơn giản có tên là “Hello World” bằng ngôn ngữC# Chúng ta sẽ thực hiện theo những bước sau:
- Bước 1: Khi Visual Studio NET bắt đầu chạy, nó sẽ hiển thị một của sổ StartPage, như hình 1 Để tạo ra một ứng dụng mới, bạn kích vào nút New Project nằm ở gầnđáy của màn hình; Ta sử dụng thực đơn kéo xuống bằng việc lựa chọn File -> New->,Project; hay sử dụng tổ hợp phím bấm Ctrl+ Shift+ N.
Hình 1: Của sổ Start Page hiển thị khi khởi động chương trình Visual Studio.
- Bước 2: Sau khi chúng ta kích vào New Project, một hộp thoại hiện ra, nó hiểnthị kiểu của project Chúng ta chọn thư mục Visual Basic Projects và mẫu Smart
Trang 7Device Application, như hình 2 Bạn sẽ đặt một tên và chỉ vị trí để lưu ứng dụngmới và tiếp theo là kích nút OK.
Hình 2: Hộp thoại tạo một Visual Basic Smart Device Application
- Bước 3: Hộp thoại tiếp theo, như hình 3
Trang 8Hình 3: chọn một nền đích và một mẫu ứng dụng
- Bước 4: Sau khi chúng ta đã lựa chọn như hình 3 và kích OK, Visual Studio tựđộng kích hoạt Smart Device Extensions và đưa ra những trình thiết kế mẫu, như hình 4.
Trang 9Hình 1.5: Trình thiết kế Forms hiện ra sau khi một dự án được tạo.
- Bước 5: Bên trái của khung thiết kế Forms là một nút nhỏ có tên là Toolbox.Việc kích nút này sẽ đưa ra hộp Toolbox, như được minh hoạ trong hình 5.
Trang 10Hình 5: Hiển thị hộp ToolBox.
- Bước 6: Mỗi mục trong Toolbox là một điều khiển sẵn có để những người thiếtkế dùng trong NET Compact Framework Hầu hết điều khiển đều có liên quan đếnWinforms Cho hướng dẫn này, chúng ta sẽ lựa chọn một TextBox, kéo nó lên Form, vàtiếp theo, lại lựa chọn một Button và kéo nó lên Form Hình 6 cho thấy kết quả.
Trang 11Hình 6: Hiển thị kết quả sau khi kéo TextBox và Button vào Form
-Bước 7: Bây giờ ta kích kép vào nút Button1, và IDE đưa ra code với con trỏ
nhấp nháy ở ngay phương thức Button1_click Bất cứ code nào được nhập vào đều được
thực hiện khi ta kích vào nút Button1 Bây giờ chúng ta sẽ nhập một vài code VisualBasic như hình 7.
Trang 12Hình 7: Hiển thị code sau khi kích vào nút button trên Form
- Bước 8 Cách làm này rất giống cách làm cho máy để bàn, và nó là điểm củaSmart Device Extensions và NET Compact Framework Dự án lúc này đã sẵn sàng đểbiên dich và chạy trên thiết bị Để chạy ứng dụng trên thiết bị, chọn Debug, Start WithoutDebugging Đầu tiên Visual Studio sẽ biên dịch mã nguồn và sau đó đưa ra hộp thoạiDeploy Smart Device Application, như trong hình 8.
Trang 13Hình 8: Trước khi triển khai một ứng dụng cho một thiết bị,Visual Studio cho thấy hộp thoại triển khai.
-Bước 9: Ta sẽ chọn một trong các bộ mô phỏng có trong hình 8 để chạy ứngdụng Trong ứng dụng này ta chọn Pocket PC 2002 Emulator Nếu muốn chạy thử trêncác thiết bị thực, chúng ta chọn Pocket PC Device nhưng phải đảm bảo rằng thiết bị đãđược kết nối thông qua đường ActiveSyne trước khi triển khai ứng dụng trên thiết bị Sauđó chọn Deploy.
- Bước 10: Visual Studio cài đặt NET Compact Framework và khởi chạy ứngdụng của bạn trên thiết bị Nếu bạn kích vào nút Button, bạn sẽ nhìn thấy kết quả của ứngdụng như hình 9.
Trang 14Hình 9: Thiết bị mô phỏng chạy ứng dụng Hello World.
1.2 Những thiết bị phi chuẩn
.NET Compact Framework có thể chạy trên rất nhiều các thiết bị phần cứng chạyhệ điều hành Windows CE Bảng 1.2 cho chúng ta thấy các bộ xử lý được hỗ trợbởi NET Compact Framework và các hệ điều hành hỗ trợ cho các bộ xử lý.
.NET Compact Framework được lưu trữ như một file CAB trên Desktop Chỉ cómột file CAB duy nhất cho mỗi hệ điều hành và kiểu bộ xử lý mà NET CompactFramework hỗ trợ Smart Device Extensions đưa file CAB phù hợp vào thiết bị khi nóxác định thiết bị không cài đặt NET Compact Framework.
Trang 15Tên CPUPhiên bản hệ điều hành hỗ trợ
Intel ARM 4 Pocket PC 2000, 2002, 2003, and WinCE 4.1 hoặc mới hơn
Intel ARM 4i Pocket PC 2000, 2002, 2003, and WinCE 4.1 hoặc mới hơn
Hitachi SH3 Pocket PC 2000, 2002, 2003, and WinCE 4.1 hoặc mới hơn
Hitachi SH4 Pocket PC 2003 and WinCE 4.1 hoặc mới hơn
Intel 80x86 Pocket PC 2000, 2002, 2003, and WinCE 4.1 hoặc mới hơn
MIPS 16 Pocket PC 2000, 2002, 2003, and WinCE 4.1 hoặc mới hơn
MIPS II Pocket PC 2000, 2002, 2003, and WinCE 4.1 hoặc mới hơn
MIPS IV Pocket PC 2000, 2002, 2003, and WinCE 4.1 hoặc mới hơn
Bảng 1.2: Bộ xử lý và hệ điều hành được hỗ trợ bởi NET Compact Framework
Tất cả các thiết bị Pocket PC chạy hệ điều hành Pocket PC version 2003 hoặc mớihơn đều có NET Compact Framework trong ROM Nếu chúng ta không thể triển khaihoặc gỡ lỗi ứng dụng trên các thiết bị, trong phần này chúng ta sẽ học cách làm thế nàođể Smart Device Extensions kết nối với các thiết bị để gỡ lỗi, triển khai và thảo luân mộtvài vấn đề liên quan Có ba mức hỗ trợ phi chuẩn:
- Hỗ trợ đầy đủ triển khai và gỡ lỗi thông thường, mức hỗ trợ này có nghĩa rằngIDE có thể triển khai hệ nhị phân tới thiết bị và gỡ lỗi mã nguồn đang chạy trên thiết bị.
- Chỉ hỗ trợ triển khai: có nghĩa rằng IDE có thể chỉ triển khai hệ nhị phân tớithiết bị nhưng không thể gỡ lỗi mã chạy trên thiết bị được.
- Chỉ hỗ trợ đích (Target) Mức hỗ trợ này có nghĩa là chúng ta có thể phát triểnứng dụng của chúng ta trong Visual Studio, nhưng chúng ta phải cài đặt CompactFramework trên thiết bị và sao chép vào thiết bị
* Kết nối Visual Studio với các thiết bị
Để thiết lập giao tiếp Visual Studio với thiết bị, chúng ta làm theo các bước sau:
Trang 16+ Bước 1: chọn Tools -> Options trong Visual Studio.
+ Bước 2: kích đúp trên mục Device Tools và chọn Devices Xem hình 10
Hình 10: Sử dụng hộp thoại kết nối thiết bị để chọn kiểu thiết bị muốn kết nối.
+ Bước 3: Chọn nền tảng Pocket PC hay Windows CE.
+ Bước 4: Chọn kiểu thiết bị mà chúng ta muốn triển khai ứng dụng trên đó Hình 10 cho
phép chọn Emulator hoặc thiết bị Pocket PC.
+ Bước 5: Lựa chọn cách thức truyền tin được dụng Thiết bị Pocket PC có hai lựa chọn
+ Bước 6: Nếu chọn TCP Connect Transport, sau đó chúng ta có thể thay đổi bằng cách
chọn nút Configure…sau đó sẽ nhận được như hình 11.
Trang 17Hình 11: TCP Connect Transport cho phép thiết lập kết nối tới thiết bị TCP.
+ Bước 7: Hộp thoại như hình 11 cho phép chúng ta thiết lập địa chỉ IP cho thiết bị Nếu
thiết bị nối kết bằng ActiveSyne, Visual Studio có thể tự động điều khiển nhận ra địa chỉ.Chúng ta có thể lựa chọn sử dụng số hiệu cổng khác với cổng 5656 Để không sử dụngcổng mặc định, bạn phải tự cấu hình ConmanClient.exe trên thiết bị.
Chương 2:Thiết kế những ứng dụng GUI băng WindowsForms.
.NET Compact Framework cung cấp rất nhiều chức năng để xây dựng giao diện đồhoạ cho ứng dụng của bạn Tuy nhiên, những chức năng này là chỉ một tập con của tậpcác chức năng mà NET Framework đã cung cấp Trước khi giới thiệu những điều khiểnmà NET Compact Framework hỗ trợ, thì chúng ta hãy tìm hiểu một số điều khiển mà nókhông hỗ trợ.
2.1 Tìm hiểu những điều khiển không được hỗ trợ trong NET Compact Framework
Danh sách sau đây chứa những control mà không được hỗ trợ trên NET CompactFramework.
Trang 18 Drag and drop
All printing capabilities
Hosting ActiveX controls
2.3 Làm việc với cửa sổ Form Designer của Visual Studio NET
Trình thiết kế Form Visual Studio NET cho phép chúng ta thiết kế giao diệnngười dùng cho ứng dụng một cách trực quan bằng những điều khiển được kéo lên Formứng dụng Mỗi một control được kéo lên form, chúng ta có thể nhìn thấy và định vị trí
Trang 19cho những control đó, và đặt những thuộc tính cho các control đó thông qua cửa sổProperties, và tạo ra những bộ xử lý sự kiện cho những sự kiện của những control.
2.3.1 Cửa sổ thiết kế Forms
Khi chúng ta tạo ra một dự án Smart Device Extension (SDE) mà là một ứngdụng Windows, thì Visual Studio NET sẽ mở dự án trong khung Designer Ngoài ra,chúng ta cũng có thể chọn Designer từ menu View để đưa dự án vào khung Designer.Form Designer thường là cửa sổ nằm ở giữa của môi trường Visual Studio NET Hình2.1 hiển thị Form Designer của một dự án SDE Pocket PC trong khung thiết kế Designer.
Chú ý thành phần mainMenu1 ở đáy của cửa sổ Designer
Hình 2.1: Khung Designer của SDE Pocket PC.
Chú ý: Khi Form Designer được sử dụng để xây dựng một ứng dụng, phương
thức InitializeComponent chứa đựng mã nguồn để xây dựng một giao diện người dùng
của ứng dụng Mã nguồn này có ảnh hưởng lớn đến quá trình thực thi nếu form củachúng ta chứa vài control được lồng vào nhau Chẳng hạn, nếu có một panel được đặt
Trang 20trên một form và panel chứa vài control, thì panel cần phải được thêm vào form trước,sau đó những control sẽ được thêm vào panel
2.3.2 Cửa sổ ToolBox.
Cửa sổ ToolBox chứa tất cả những control của NET Compact Việc thêm mộtcontrol cho một ứng dụng ở thời điểm thiết kế rất dễ dàng, ta chỉ việc kéo control từ hộpToolBox và thả nó trên form của ứng dụng trong cửa sổ Form Designer Hình 2.2 minhhoạ ToolBox cho một dự án SDE Pocket PC.
Hình 2.2: Cửa sổ ToolBox của một dự án SDE Pocket PC.
2.3.3 Của sổ Properties
Cửa sổ Properties chứa tất cả những đặc tính của control hiện thời đang đượcchọn trong cửa sổ Form Designer Bạn có thể thay đổi những thuộc tính này bởi việc gõnhững giá trị vào trong điều khiển TextBox bên cạnh tên thuộc tính Nếu thuộc tính cómột số giới hạn giá trị, thì một cái hộp thả xuống được hiển thị bên cạnh tên thuộc tínhmà chứa những giá trị có thể xảy ra cho thuộc tính Cuối cùng, nếu giá trị của thuộc tínhlà một tập hợp của các đối tượng hay một đối tượng phức tạp, ở đó có thể là một dấu ba
Trang 21chấm được định vị bên cạnh tên thuộc tính Việc kích vào dấu ba chấm này sẽ hiển thị ramột hộp thoại cho phép bạn tự nhập thêm giá trị của thuộc tính Hình 2.3 hiển thị cửa sổProperties khi một TextBox được lựa chọn.
Hình 2.3: Cửa sổ Properties của một điều khiển TextBox.
Adding Events Handlers (Thêm bộ xử lý sự kiện)
Khi một control được thao tác ở tại thời điểm đang thực thi, nó sẽ xuất hiện mộtsự kiện để thông báo ứng dụng mà trạng thái của điều khiển đang thay đổi Để xử lý mộtsự kiện được đưa ra bởi một control, đầu tiên bạn phải tạo ra một phương thức chứa mãđể thực hiện khi sự kiện được dùng Tiếp theo bạn gắn phương thức cho sự kiện đượccông bố của điều khiển Điều này có thể được làm thông qua cửa sổ Properties.
Của sổ Properties liệt kê những sự kiện mà được đưa ra bởi control Kích vào nútEvents tại vị trí gần trên cùng của cửa sổ Properties, nó sẽ liệt kê ra những sự kiện Hình2.4 hiển thị cửa sổ Properties, va nó đang hiển thị sự kiện của control Button.
Trang 22Hình 2.4: Của sổ Properties hiển thị những sự kiện của control Button.
Ngoài ra, chúng ta cũng có thể thêm một sự kiện xử lý bằng cách kích đúp lêntên sự kiện Việc làm này sẽ chuyển dự án đến khung viết code Mã để viết bộ xử lý sựkiện cho control cũng tự động được phát sinh Chúng ta có thể tìm thấy mã này trongphương thức InitializeComponent của lớp Form của ứng dụng
2.4 Tìm hiểu về các nền tảng khác nhau của Windows Forms
Những dự án Smart Device Extensions (SDE) có thể chọn một trong hai hệ điềuhành: hệ điều hành Pocket PC hay là hệ điều hành Windows CE NET Hai nền tảng nàycó APIs giao diện người dùng khác nhau Một dự án SDE xử lý điều này bằng cách gọinhững thư viện khác nhau trên mỗi nền tảng.
2.4.1 Tìm hiểu những nền tảng Windows CE NET
Những dự án Windows CE NET cũng tương tự như những dự án ứng dụng NETFramework thông thường trên Windows Đầu tiên, khi mới bắt đầu tạo dự án thì trongform thiết kế có 3 nút, đó là: nút minimize, nút maximize và nút close xuất hiện trong cáihộp điều khiển của ứng dụng, chúng cũng giống như trong đối tượng Form của NETFramework Bạn có thể loại bỏ cái hộp điều khiển từ form bằng cách đặt thuộc tính của
Trang 23ControlBox là false Bạn có thể loại bỏ nút minimize, và nút maximize bằng cách đặtthuộc tính của MinimizeBox và MaximizeBox là false
Khi một form ứng dụng của Windows CE NET được tạo ra bằng trình thiết kếVisual Studio NET, thì kích thước của nó được tự động đặt ra là 640 X 450 Bạn có thể
thay đổi thuộc tính size này nếu nó không thích hợp cho ứng dụng của bạn Mặc dù lớpform trình bày thuộc tính FormBorderSytle, nhưng việc đặt thuộc tính của Sizable sẽ
không ảnh hưởng đến đường viền của cửa sổ Trong Windows CE NET thì không có ứngdụng nào thay đổi kích thước Nó có thể chỉ thu nhỏ, làm phóng to cực đại màn hình, hay
là theo kích cỡ của thuộc tính size.
2.4.2 Tìm hiểu nền tảng Pocket PC
Những ứng dụng trên Pocket PC lệch xa hơn so với những dự án của ứng dụngWindows NET Framework thông thường Đầu tiên, khi mới bắt đầu tạo dự án một đốitương MainMenu luôn luôn được thêm vào một ứng dụng Pocket PC Bạn có thể loại bỏthực đơn này, nhưng việc làm này sẽ gây ra một ngoại lệ, và nó sẽ được đưa vào khitương tác với Soft Input Panel (SIP) SIP là một sự thi hành phần mềm của bàn phímQWERTY.
Cửa sổ ToolBox của Visual Studio NET chứa một điều khiển InputPanel Trên
Pocket PC, điều khiển này cho phép bạn tương tác với SIP InputPanel cho phép bạn tăngvà giảm SIP Ngoài ra, InputPanel sẽ thông báo cho ứng dụng của bạn khi SIP đã đượccho phép Một điều cần chú ý là form của bạn phải có một control MainMenu trên nó vàtrong control InputPanel để được thêm vào form Nếu không có control MainMenu trênform thì một ngoại lệ sẽ được đưa vào ở thời điểm đang chạy khi bạn cố gắng làm hiện rõInputPanel
Những ứng dụng Pocket PC phải bám sát vào những hướng dẫn và những nguyêntắc nhất định Nguyên tắc đầu tiên là chỉ có một trường hợp của một ứng dụng đang chạytại một thời điểm Ở ngay thời điểm chạy, NET Compact Framework sẽ bảo đảm chứcnăng này, như vậy không cần viết mã mà vẫn bảo đảm rằng chỉ một trường hợp của ứngdụng của bạn đang chạy.
Nguyên tắc thứ hai là mỗi một lần một ứng dụng đang chạy, người sử dụng khôngnên đóng ứng dụng lại Những trạng thái nguyên tắc mà ứng dụng cần phải lưu giữ bất kỳdữ liệu nào, giải thoát cho bất kỳ tài nguyên nào, và ngắt kết nối bất kỳ kết nối nào (ví dụnhư những kết nối cơ sở dữ liệu) khi nó ngừng hoạt động Nếu ứng dụng được bắt đầuchạy lần nữa, thì nó sẽ được kích hoạt bởi OS Khi nó được kích hoạt, ứng dụng cần phảicó những tài nguyên định vị đúng (reallocate resources) và reestablish (thiết lập chínhxác) bất kỳ kết nối nào Ứng dụng sẽ được thông báo khi nó được kích hoạt hay không
hoạt động bởi các sự kiện Form.Activate và Form.Deactivate Chú ý, những sự kiện
Trang 24Activate và Deactivate không được liệt kê trong Properties Designer, vì vậy bạn phải tựviết và gán những sự kiện này
2.4.3 Kết hợp một Icon (biểu tượng) với ứng dụng
Một ứng dụng chưa thật sự hoàn thiện khi nó chưa có biểu tượng của nó Việc kếthợp một biểu tượng với một ứng dụng có thể được thông qua Visual Studio NET bằng
cách mở hộp thoại Property Pages dự án Sau đó lựa chọn General ở dưới folder CommonProperties Tiếp theo kích vào dấu ba chấm bên cạnh thuộc tính Application Icon Việc
này sẽ hiển thị OpenFileDialog Xác định vị trí biểu tượng trong hộp thoại
2.5 Làm việc với Control của Form.
Điều khiển Form là nơi chứa toàn bộ các điều khiển của ứng dụng Lớp form cóvài thuộc tính mà gây ra cho form hoạt động khác nhau phụ thuộc vào nền tảng đích.
2.5.1 Tìm hiểu tác động của thuộc tính FormBorderStyle
Thuộc tính FormBorderStyle xác định kiểu đường viền của Form Giá trị mặc
định cho đặc trưng này là FormBorderStyle.FixedSingle.
Trên Pocket PC, việc đặt thuộc tính cho FormBorderStyle.None tạo ra một formkhông có đường viền và không có thanh tiêu đề Kiểu này của form có thể được thay đổikích thước và di chuyển trong mã nhưng không phải bởi người sử dụng Đặt thuộc tínhFillBorderStyle.FixedSingle hay bất kỳ giá trị nào khác sẽ tạo ra một form mà chiếm toànmàn hình, và form sẽ không di chuyển hay thay đổi kích thước được.
Trên Windows CE .NET, đặt thuộc tính FormBorderStyle.FixedDialog hayFormBorderStyle.None sẽ tạo ra một form không có viền hay thanh tiêu đề Form sẽ dichuyển và thay đổi kích thước chỉ thông qua mã Đặt thuộc tínhFormBorderStyle.FixedSingle hay mọi giá trị khác sẽ tạo ra một form được đo cỡ cho
thuộc tính size với một đường viền và một thanh tiêu đề Form chỉ được thay đổi kích
thước hay di chuyển thông qua mã, và người sử dụng sẽ có khả năng để di chuyển form.
2.5.2 Sử dụng thuộc tính ControlBox
Thuộc tính ControlBox của form xác định xem hộp điều khiển có được hiển thịhay không Sự Thiết đặt thuộc tính ControlBox là true sẽ hiển thị hộp điều khiển Đặtthuộc tính là false thì sẽ ẩn hộp điều khiển đi.
2.5.3 Tìm hiểu các thuộc tính MinimizeBox và MaximizeBox
Trên Pocket PC thì hộp điều khiển chỉ chứa nhiều nhất một nút, hoặc là nútminimize có dán nhãn là X, hoặc là nút close gắn nhãn là OK Trên Windows CE NETthì hộp điều khiển có thể chứa cả ba nút: nút minimize, nút maximize, và nút close Tínhrõ ràng của những nút này được kiểm soát bởi những thuộc tính MinimizeBox vàMaximizeBox Bảng 2.1 mô tả những giá trị có thể xảy ra của thuộc tính MinimizeBox
Trang 25và những tác dụng của chúng trên mỗi nền tảng đích Bảng 2.2 mô tả những thuộc tínhtương tự cho MaximizeBox
Bảng 2.1: Mô tả những giá trị có thể xảy ra của thuộc tính MinimizeBox và nhữngtác dụng của chúng trên mỗi nền tảng đích.
POCKET PCAPPLICATION
WINDOWS CE NETAPPLICATION
True Nút X (minimize) trongthanh tiêu đề
Nút minimize truyền thống củaWindows trong thanh tiêu đề
False Nut OK (close) trong thanhtiêu đề
Không có nút minimize trong thanhtiêu đề.
Bảng 2.2 mô tả những giá trị có thể xảy ra của thuộc tính MaximizeBox và nhữngtác dụng của chúng trên mỗi nền tảng đích.
POCKET PCAPPLICATION
WINDOWS CE NETAPPLICATION
True Không có tác dụng Nút maximize truyền thống củaWindows trong thanh tiêu đề.
False Không có tác dụng Không có nút maximize trong thanh tiêuđề.
2.5.4 Tìm hiểu thuộc tính WindowsState
Thuộc tính WindowsState xác định trạng thái hiện rõ ban đầu của cửa sổ Thuộctính này chỉ có thể được thiết lập cho FormWindowState.Normal hayFormWindowState.Maximized Bảng 2.3 mô tả giá trị và tác dụng của nó trên một ứngdụng được chạy trên cả hai nền tảng đích.
Trang 26Bảng 2.3: Mô tả những giá trị có thể xảy ra của thuộc tính WindowState và nhữngtác dụng của chúng trên mỗi nền tảng đích.
MEMBER NAMEPOCKET PC APPLICATION
WINDOWSCE NETAPPLICATION
Normal Ứng dụng sẽ chiếm toàn bộ màn hìnhcủa desktop trừ một vùng của thanh
start menu và một vùng của thanhmain menu.
Ứng dụng có kíchthước theo thuộc tính
2.5.5 Tìm hiểu thuộc tính Size
Thuộc tính size xác định kích thước của cửa sổ ứng dụng Nó phụ thuộc vào giá
trị của thuộc tính FormBorderStyle, ứng dụng có thể lờ đi giá trị của thuộc tính size hoặclờ đi việc đưa ra cho ứng dụng một kích thước theo lý thuyết Trên Pocket PC, thì chỉ cóthuộc tính size hợp lệ mới được đánh giá, FormBorderStyle phải được thiết lập từFormBorderSytle.None Trên Windows CE, thuộc tính size luôn luôn được đánh giá.
2.5.6 Thiết đặt Location (vị trí) của Form bằng cách sử dụng thuộc tính Location.
Thuộc tính Location xác định vị trí ở góc trên, bên trái của của form Trên PocketPC thuộc tính Location không có tác dụng trừ khi thuộc tính FormBorderSytle thiết đặt làFormBorderSytle.None Trên Windows CE thì sự định vị của cửa sổ luôn luôn bằng nhauvề kích thước cho thuộc tính Location, trừ khi ứng dụng được đặt trong trạng tháiminimize hoặc maximize.
2.6 Điều khiển Button
Lớp System.Windows.Forms.Button là lớp thực hiện NET của một điều khiển
nút bấm Khi người sử dụng kích vào nút bấm bằng một cái bút, thì một sự kiện click
được xuất hiện Bạn có thể điều khiển sự kiện này bởi một phương thức (một lớp)delegate System.EventHandler Code dưới đây thực thi sự kiện EventHandler được hiểnthị ở ngay thời gian hiện tại.
Trang 27Private void button_Click(object sender, System.EventArgs e) {
MessageBox.Show(DateTime.Now.ToShortTimeString(), "The Current Time Is",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);}
Hình 2.5 hiển thị chương trình đang chạy trên bộ mô phỏng Pocket PC Cái nútbấm có nhãn là What is the Time?, và khi nó được kích thì nó sẽ hiển thị thời gian hiệntại trong một hộp thoại.
Hình 2.5: Chạy ứng dụng GiveEmTime trên bộ mô phỏngPocket PC 2002
Bảng 2.4: KeyCodes tự phát sinh bởi Directional Pad trên một thiết bị Pocket PCKeyCode VALUEASSOCIATED HARDWARE BUTTON
Keys.Up The top of the pad was pressed.
Trang 28Bảng 2.4: KeyCodes tự phát sinh bởi Directional Pad trên một thiết bị Pocket PCKeyCode VALUEASSOCIATED HARDWARE BUTTON
Keys.Down The bottom of the pad was pressed.
Keys.Left The left side of the pad was pressed.
Keys.Right The right side of the pad was pressed.
Keys.Return The center of the pad was pressed.
2.7 Sử dụng điều khiển TextBox
Điều khiển TextBox được sử dụng để nhận dữ liệu từ người dùng nhập vào Điềukhiển TexBox hỗ trợ các thuộc tính BackColor và ForeColor, nó không giống như đa số
các điều khiển khác trong NET Compact Framework sự kiện click không được hỗ trợ,
nhưng những sự kiện KeyPress, KeyUp, và KeyDown lại được hỗ trợ Thuộc tínhPasswordChar được hỗ trợ Và khi ta thiết lập thuộc tính này thì các kí tự nhập vào sẽđược chuyển thành các dâu sao (*) để che dấu các kí tự đó.
2.8 Sử dụng điều khiển Label.
Điều khiển Label cho phép bạn trình bày đoạn văn bản đến người sử dụng Đây làmột điều khiển đơn giản mà nó không cấn giải thích nhiều Thuộc tính Text của điều
khiển xác định điều mà văn bản sẽ hiển thị rõ ràng tới người sử dụng Hiển thị đoạn vănbản có thể có sự liên kết khác nhau dựa trên thuộc tính TextAlign Có thể xảy ra nhữnggiá trị canh lề như: TopLeft, TopCenter, và TopRight Sự kiện TextChanged được thực
thi khi đoạn văn bản trong một điều khiển Label thay đổi.
HANDLING THE POCKET PC HARDWARE BUTTONS
Pocket PC có một pad (miếng đệm) đinh hướng mà có thể sử dụng để tương tácvới những ứng dụng Pocket PC Nó có thể thực hiện bắt những sự kiện mà pad này sinhra Khi nào pad được nhấn, thì một sự kiện KeyDown được phát sinh phù hợp với đốitượng form Bộ xử lý sự kiện nhận được một đối tượng KeyEventArgs Đối tươngKeyEventArgs đưa ra thuộc tính KeyCode Bạn có thể kiểm tra giá trị của thuộc tínhKeyCode để xác định rõ điều khiển nào trên pad được nhấn Bảng 2.4 là bảng liệt kê
những thành phần key mà có thể là gán cho thuộc tính KeyCode và nút kết hợp với
chúng.
Trang 292.9 Điều khiển RadioButton.
Những điều khiển nút Radio phổ biến hiện nay đưa cho những người sử dụng mộtmảng những sự lựa chọn, và người sử dụng chỉ được chọn một trong các lựa chọn đó.Khi một nút rađiô trong một nhóm được lựa chọn, thì các nút còn lại sẽ tự động xoá.Những nút Rađiô được đặt vào cùng một nhóm giống nhau, nếu chúng giống nhau Mộtứng dụng có thể có nhiều nhóm nút rađiô.
Lớp RadioButton đưa ra hai sự kiện mà được thực thi khi trạng thái kiểm tra củamột RadioButton thay đổi: click và CheckedChanged Sự kiện click được đưa ra khi mộtngười sử dụng kích vào nút rađiô bằng bút nhọn Bạn có thể xử lý sự kiện click này giốngnhư bạn xử lý sự kiện click cho lớp Botton Sự kiện CheckedChanged được đưa ra khi tathay đổi trạng thái kiểm tra của RadioButton
Sự kiện click sẽ không được đưa ra nếu thuộc tính Checked của RadioButton được thayđổi theo chương trình Ứng dụng Arnie.exe giải thích việc sử dụng một nhóm điều khiểnRadioButton như thế nào (Bạn có thể tìm thấy mã cho ứng dụng này trong chương trìnhmẫu Arnie của quyển sách này.) Hình 2.6 hiển thị ứng dụng đang chạy trong bộ môphỏng Pocket PC
Hình 2.6: Chạy ứng dụng Arnie trên bộ mô phỏng Pocket PC 2002.
Khi một phim (movie) được lựa chọn, ứng dụng sẽ bắt sự kiện CheckedChangedcủa RadioButton, và một hộp thoại được hiển thị nếu đúng RadioButton được kiểm tra.
Trang 30Mã sau đây trình bày việc xử lý sự kiện CheckedChanged như thế nào cho một câu trả lờisai.
("Wrong, The Terminator (1984) O.J Simpson almost got the role ", "Wrong!");
2.10 Sử dụng điều khiển CheckBox
Điều khiển CheckBox tương tự như điều khiển RadioButton, chúng cũng có mộttập danh sách để lựa chọn Nhưng nó khác với điều khiển RadioButton là nếu trong điềukhiển RadioButton, người sử dụng chỉ được chọn một lựa chọn trong danh sách các lựachọn, còn với điều khiển CheckBox thì người sử dụng có thể được chọn nhiều lựa chọnkhác nhau cùng một lúc Điều khiển CheckBox thông thường là một GUI có giá trị kiểuBoolean hoặc là một biểu thức
Điều khiển CheckBox cung cấp thuộc tính CheckState, mà nó xác định rằng liệuCheckBox có được kiểm tra hay không Thuộc tính CheckState thật sự là một bảng liệtkê, bảng liệt kê CheckState Những hàm thành phần của nó là Unchecked, Checked, vàIndeterminate Unchecked và Check thì ta không phải giải thích gì thêm Trạng tháiIndeterminate có thể chỉ được sử dụng khi thuộc tính ThreeState của điều khiểnCheckBox là true Khi CheckState là Indeterminate và thuộc tính ThreeState là true, thìđiều khiển sẽ được đánh dấu là màu xám nhưng nó vẫn được kiểm tra Điều đó báo hiệurằng trạng thái đó đã được kiểm tra Điều khiển sẽ không phản ứng lại với điều kiện làthuộc tính AutoCheck là false Khi thuộc tính AutoCheck thiết đặt là true thì một sự kiệnclick với bút bấm sẽ cho phép điều khiển.
Ứng dụng Apples.exe là một ví dụ đơn giản khác mà nó thử xác định xem ngườisử dụng thích kiểu apples gì Hình 2.7 hiển thị ứng dụng đang chạy trong bộ mô phỏngPocket PC Mã đầy đủ cho ứng dụng này có thể được tìm thấy trong mã nguồn của quyểnsách này.
Trang 31Hình 2.7: Một ứng dụng của các điều khiển CheckBoxchạy trên bộ mô phỏng Pocket PC 2002.
2.11 Sử dụng điều khiển ComboBox.
Điều khiển ComboBox là điều khiển lý tưởng để đưa ra một danh sách của nhữnglựa chọn trong một số lượng được hạn chế của không gian màn hình ComboBox xuấthiện như một điều khiển TextBox với một mũi tên bên phải Một danh sách của nhữngtùy chọn được thả xuống ở dưới điều khiển khi người sử dụng kích vào mũi tên Khingười sử dụng lựa chọn một tùy chọn họăc kích vào mũi tên lần nữa, thì danh sách củanhững tùy chọn sẽ cuộn lên.
Thêm những mục chọn cho điều khiển ComboBox có thể được làm ở cả lúc thiếtkế và cả ở thời điểm chạy Để thêm những mục chọn cho ComboBox trong lúc thiết kế,đơn giản ta chọn ComboBox trong Form Designer Sau đó kích vào dấu ba chấm ở bêncạnh thuộc tính Items trong cửa sổ Properties Nó sẽ đưa ra cửa sổ String CollectionEditor ( Chúng ta sẽ nhìn thấy trong hình 2.8) Trong String Collection Editor, ta sẽ nhậpvào danh sách mục chọn để nó xuất hiện trong ComboBox Mỗi mục chọn phải xuất hiệntrên một hàng riêng biệt.
Trang 32Hình 2.8:Cửa sổ String Collection Editor.
Mục chọn cũng có thể được thêm vào điều khiển ComboBox ở thời điểm Việcnày có thể được hoàn thành trong hai cách khác nhau Đầu tiên, ta gọi phương thức Add
trên thuộc tính tập hợp Items của điều khiển ComboBox Những mục chọn có thể đượcloại bỏ thông qua phương thức Remove trên tập Items, hay tất cả các mục chọn có thể
được loại bỏ bằng cách gọi phương thức Clear Đoạn mã sau đây thực hiện việc thêm bachuỗi cho một điều khiển ComboBox có tên là comboBox1:
comboBox1.Items.Add("Hi");comboBox1.Items.Add("Howdy");comboBox1.Items.Add("Wuz Up");
Bạn cũng có thể thêm những mục chọn cho một ComboBox ở thời điểm chạybằng cách liên kết điều khiển cho một đối tượng collection Việc này được thực hiệnbằng cách đặt DataSource cho đối tượng collection Khi ComboBox cố gắng để thêmnhững mục chọn vào danh sách thả xuống, nó sẽ gọi đến phương thức ToString trên mỗimục chọn trong DataSource và thêm các chuỗi vào danh sách thả xuống Chuỗi có thểtùy biến bởi sự thiết đặt thuộc tính DisplayName của điều khiển ComboBox
Đoạn mã sau giải thích việc liên kết một ComboBox với một danh sách củanhững đối tượng tuỳ biến như thế nào Lớp Customer là một lớp tuỳ biến mà nó nắm giữtên của tuỳ biến đó Khi ComboBox được giới hạn trong phương thức LoadCustomer, thìthuộc tính FullName được đặt như DisplayName.
Trang 33Đoạn mã
class Customer { string m_First; string m_Middle; string m_Last;
public Customer(string first, string middle, string last) { m_First = (first == null) ? string.Empty : first;
m_Middle = (middle == null) ? string.Empty : middle; m_Last = (last == null) ? string.Empty : last;
}
public string FirstName { get { return m_First; } }
public string MiddleName { get { return m_Middle; } }
public string LastName { get { return m_Last; } }
static string FullNameWithInitial = "{0} {1} {2}"; static string FullNameNoInitial = "{0} {1}"; public string FullName {
private void LoadCustomers() { if(customers != null)
return;
customers = new Customer[6];
customers[0] = new Customer("Ronnie", "Donnell", "Yates"); customers[1] = new Customer("Moya", "Alicia", "Hines"); customers[2] = new Customer("Veronica", "Christine", "Yates"); customers[3] = new Customer("Diane", "", "Taylor");
Trang 34customers[4] = new Customer("Kindell", "Elisha", "Yates"); customers[5] = new Customer("Zion", "Donnell", "Yates"); this.comboBox1.DataSource = customers;
this.comboBox1.DisplayMember = "FullName";}
Có hai cách vẫn được sử dụng mà mục chọn hiện thời được lựa chọn trongComboBox Đầu tiên, thuộc tính mục chọn SelectedIndex trả lại chỉ số của mục chọnhiện thời được lựa chọn Chỉ số này có thể được dùng để truy cập mục chọn được lựachọn từ thuộc tính Items của điều khiển ComboBox Mã sau đây minh họa thuộc tínhSelectIndex :
string selItem = comboBox1.Items[comboBox1.SelectedIndex].ToString();
Điều khiển ComboBox cũng cung cấp thuộc tính electedItem mà trả lại một thamchiếu đến mục chọn hiện thời được lựa chọn Mã sau đây trình bày việc sự sử dụng thuộctính SelectedItem như thế nào:
string selItem = comboBox1.SelectedItem.ToString();
2.12 Sử dụng điều khiển ListBox
ComboBox là một điều khiển lý tưởng cho những ứng dụng trong những môitrường có không gian giới hạn, nhưng với ListBox có thể được sử dụng nếu không gianmàn hình hiển thị vài tùy chọn cùng một lúc cho người sử dụng.
ComboBox và ListBox hầu như dùng chung tập hợp những thuộc tính và nhữngphương thức giống như nhau Nó bao gồm tập thuộc tính Items và các phương thức Add,Remove, và Clear trên thuộc tính Items Chẳng hạn, mã sau đây thêm những chuỗi kí tựcho một ListBox điều khiển khi thực hiện Mã sau đây gần giống với mã được dùng đểthêm chuỗi kí tự cho một điều khiển ComboBox.
listBox1.Items.Add("Hi");listBox1.Items.Add("Howdy");listBox1.Items.Add("Wuz Up");
Ngoài ra bạn cũng có thể thêm những mục chọn cho điều khiển ListBox ở tại thờiđiểm thực hiện bằng cách ràng buộc ListBox cho một tập hợp Quá trình của sự ràngbuộc một điều khiển ListBox giông hệt sự ràng buộc của một điều khiển ComboBox Đầu
Trang 35tiên, đặt cho DataSource một tập hợp Tiếp theo đặt DisplayMember cho thuộc tính mụcchọn nguồn mà sẽ được sử dụng như chuỗi hiển thị
private void LoadCustomers() { if(customers != null)
return;
customers = new Customer[6];
customers[0] = new Customer("Ronnie", "Donnell", "Yates"); customers[1] = new Customer("Moya", "Alicia", "Hines"); customers[2] = new Customer("Veronica", "Christine", "Yates"); customers[3] = new Customer("Diane", "", "Taylor");
customers[4] = new Customer("Kindell", "Elisha", "Yates"); customers[5] = new Customer("Zion", "Donnell", "Yates"); this.listBox1.DataSource = customers;
this.listBox1.DisplayMember = "FullName";}
2.13 Các điều khiển khác
2.13.1 Sử dụng điều khiển NumericUpDown
Điều khiển NumericUpDown là một cách đơn giản để cho người sử dụng lựachọn một giá trị mà nó rơi giữa một số nhỏ nhât và một số lớn nhất Điều khiển có thể chỉchấp nhận những số nguyên, và những giá trị thập phân sẽ được làm tròn Trên PocketPC, giá trị cực đại không thể lớn hơn 16-bit số nguyên.
Điều khiển NumericUpDown được kiểm soát bởi bốn thuộc tính số nguyênMinimum, Maximum, Value, và Increment
- Những thuộc tính Minimum và Maximum xác định giá trị nhỏ nhất và giá trịlớn nhất của điều khiển
- Thuộc tính Value là giá trị hiện tại của điều khiển
- Thuộc tính Increment xác định số lượng qua giá trị hiện tại được tăng lên haygiảm xuống khi người sử dụng kích vào nút hướng lên trên hay nút hướngxuống Giá trị hiện tại luôn luôn là tăng hay giảm qua giá trị Increment, trừkhi giá trị kết quả vượt ra khỏi phạm vi được định nghĩa bởi giá trị Minimumvà Maximum
Ngoài ra, người sử dụng cũng có thể thay đổi thuộc tính Value bằng cách gõ vàomột giá trị mới trong điều khiển Nếu giá trị mà người sử dụng nhập vào nằm giữa cácgiá trị Minimum và Maximum, thì cả hai thuộc tính Value và Text sẽ được thay đổi để
Trang 36giá trị mới được nhập vào Nếu giá trị mới vượt ra ngoài tập giới hạn, thì thuộc tính Textnhận giá trị được nhập vào, trong khi thuộc tính Value sẽ nhận giá trị của thuộc tínhMaximum Để những người sử dụng nhập đúng dữ liệu vào trong điều khiển, thì ta thiếtđặt thuộc tính ReadOnly là true.
Khi một người sử dụng thay đổi giá trị của điều khiển NumericUpDown , một sựkiện ValueChanged được thực hiện Sự kiện ValueChanged chỉ được thực hiện khi giá trịđược thay đổi thông qua mã hay qua những mũi tên lên và xuống Sự kiện đó sẽ khôngđược thực hiện khi một người sử dụng nhập vào trong điều khiển Đoạn code sau trìnhbày việc sử dụng điều khiển NumericUpDown như thế nào để xử lý sự kiệnValueChanged
Đoạn code
using System;
using System.Drawing;using System.Collections;using System.Windows.Forms;using System.Data;
namespace NumericUpDown{
public class Form1 : System.Windows.Forms.Form {
private System.Windows.Forms.NumericUpDown numericUpDown1; private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.MainMenu mainMenu1; public Form1()
{
InitializeComponent(); }
protected override void Dispose( bool disposing ) {
base.Dispose( disposing ); }
#region Windows Form Designer generated code /// <summary>
/// Required method for Designer support - do not modify /// the contents of this method with the code editor /// </summary>
private void InitializeComponent()
Trang 37{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label(); //
// numericUpDown1 //
this.numericUpDown1.Location = new System.Drawing.Point(8, 56); this.numericUpDown1.Maximum =
new System.Decimal(new int[] {2003, 0, 0, 0}); this.numericUpDown1.Minimum =
new System.Decimal(new int[] {1900, 0, 0, 0}); this.numericUpDown1.Value =
new System.Decimal(new int[] {190012, 0, 0, 131072}); this.numericUpDown1.ValueChanged +=
new System.EventHandler(this.numericUpDown1_ValueChanged); //
// label1 //
this.label1.Location = new System.Drawing.Point(8, 24); this.label1.Size = new System.Drawing.Size(184, 16); this.label1.Text = "In what year were you born?"; this label1.ParentChanged +=
new System.EventHandler(this.label1_ParentChanged); //
// label2 //
this.label2.Location = new System.Drawing.Point(8, 120); this.label2.Size = new System.Drawing.Size(224, 24); //
// Form1 //
this.Controls.Add(this.label2); this.Controls.Add(this.label1);
this.Controls.Add(this.numericUpDown1); this.Menu = this.mainMenu1;
this.Text = "Form1"; }
#endregion static void Main() {
Application.Run(new Form1()); }
Trang 38static string msg = "You are ~{0} years young.";
private void numericUpDown1_ValueChanged(object sender, System.EventArgs e) {
int yearsOld = System.DateTime.Now.Year - (int)this.numericUpDown1.Value; this.label2.Text = String.Format(msg, yearsOld);
} }
Hình 2.9: Hiển thị ứng dụng đang chạy trên bộ mô phỏng Pocket PC 2002.
Hình 2.9: Một ứng dụng có sử dụng điều khiển NumericUpDownđang chạy trên bộ mô phỏng Pocket PC 2002.
2.13.2 Sử dụng điều khiển DomainUpDown
Điều khiển DomainUpDown tương tự như điều khiển NumericUpDown , chỉ khácnhau ở một điểm là DomainUpDown có thể hiển thị một danh sách của những chuỗi kítự, còn điều khiển NumericUpDown chỉ có thể hiển thị một danh sách những số nguyên.Điều khiển DomainUpDown hiển thị một danh sách của những tùy chọn một cách rấthiệu quả vì nó có thể hiển thị chỉ một tùy chọn tại một thời điểm cho người sử dụng.
Điều khiển xuất hiện như một textbox với một cặp mũi tên lên và xuống ở bêncạnh phải của điều khiển Người sử dụng có thể di chuyển thông qua danh sách trong bacách khác nhau:
Trang 391 Bạn kích vào mũi tên có chiều lên thì nó sẽ di chuyển danh sách tuỳ chọn lên trênvà ngược lại.
2 Nếu thuộc tính ReadOnly được thiết đặt là false thì người sử dụng có thể nhập têncủa mục chọn trong danh sách.
3 Trong đa số những thiết bị Pocket PC đều có một nút mà có thể được dùng đểđịnh hướng điều khiển DomainUpDown Việc nhấn nút này lên và xuống sẽtương ứng với việc di chuyển lên và xuống những mục chọn trong danh sách.Nếu đặt thuộc tính ReadOnly là false, thì người sử dụng có thể nhập đoạn văn bảnvào trong điều khiển mà đoạn văn bản đó có thể không phù hợp với một mục chọn trongdanh sách Thuộc tính Text sẽ trả lại đoạn văn bản hiện thời trong điều khiển Điều nàycó nghĩa là bạn có thể cần kiểm tra việc nhập vào nếu ReadOnly đặt là false Bởi vì việckiểm tra đầu vào không được thực hiện qua điều khiển DomainUpDown, nên đoạn vănbản nhập vào trong điều khiển sẽ không lựa chọn một mục chọn tương ứng Việc thiết đặtthuộc tính ReadOnly là true thì sẽ giới hạn người sử dụng lựa chọn những mục chọn duynhất trong danh sách, như vậy sẽ loại trừ việc kiểm tra đầu vào.
Điều khiển DomainUpDown đưa ra thuộc tính Items, nó miêu tả danh sách củacác mục chọn trong điều khiển Bạn có thể thêm những mục chọn vào danh sách bằngcách sử dụng phương thức Add đặt vào thuộc tính Items Mã sau đây sẽ giải thích việcthêm ba mục chọn cho một điều khiển DomainUpDown như thế nào:
DomainUpDown dud = new DomainUpDown();dud.Items("TX");
Ngoài ra, bạn cũng có thể thêm những mục chọn cho điều khiển DomainUpDownở lúc thiết kế Đầu tiên, ta lựa chọn điều khiển trong Form Designer Tiếp theo, trong cửasổ Properties, kích vào nút ba chấm bên cạnh thuộc tính Items Việc làm này đưa ra mộthộp thoại String Collection Editor ( Như ta thấy trong hình 2.9).
Điều khiển DomainUpDown trình bày hai thuộc tính mà cho phép bạn xác địnhđoạn văn bản hiện thời trong điều khiển:
- Thuộc tính Text là chuỗi kí tự mà hiện thời đang được hiển thị trong điềukhiển Giá trị trả về không nhất thiết là một mục chọn trong danh sách
- Thuộc tính SelectedIndex là chỉ số của mục chọn trong danh sách mà hiệnthời đang hiển thị cho người sử dụng Bạn có thể sử dụng thuộc tính nàychung với thuộc tính Items để được giá trị chuỗi kí tự của mục chọn
Trang 40Khi thuộc tính Text được thay đổi, một sự kiện TextChanged được thực thi, vàkhi thuộc tính SelectedIndex được thay đổi thì một sự kiện SelectedIndexChanged đượcthực thi Sự kiện SelectedIndexChanged được thực thi chỉ khi chỉ số được thay đổi quacode hoặc qua việc kích vào các mũi tên lên và xuống Sự kiện sẽ không được thực thikhi người sử dụng nhập vào điều khiển code dưới đây trình bày việc xử lý cả hai sự kiện:
private void domainUpDown1_SelectedItemChanged(object sender, System.EventArgs e) {
int selNdx = this.domainUpDown1.SelectedIndex;
string selStr = this.domainUpDown1.Items[selNdx].ToString(); MessageBox.Show("You selected " + selStr);
2.13.3 Điều khiển ProgressBar
Điều khiển ProgressBar đưa ra cho những người sử dụng một biểu diễn đồ hoạcủa một thao tác đang tiến triển như thế nào Nó có ích khi ứng dụng của bạn cần thựchiện một thao tác tốn nhiều thời gian và bạn không muốn người sử dụng nghĩ rằng ứngdụng của bạn là không thực hiện hoặc nó đang rơi vào trạng thái lặp vô tân.
Điều khiển ProgressBar được kiểm soát bởi ba thuộc tính Int32: Minimum,Maximum, và Value Những giá trị Minimum và Maximum xác định giá trị lớn nhất vàgiá trị nhỏ nhất của điều khiển ProgressBar Thuộc tính Value xác định giá trị của điềukhiển ProgressBar Điều khiển ProgressBar sẽ được điền các giá trị từ bên trái sang bênphải khi thuộc tính Value sẽ tăng dần lên từ giá trị Minimum đến giá trị Maximum Điềukhiển ProgressBar rỗng khi thuộc tính Value bằng với thuộc tính Minimum Và mỗi mộtlần thuộc tính Value bằng giá trị Maximum thì điều khiển ProgressBar sẽ đạt tới giá trịlớn nhất Ngay sau khi thuộc tính Value được thay đổi thì điều khiển ProgressBar sẽ nhậnmột giá trịn mới.
Hình 2.10 và hình 2.11 hiển thị một chương trình game BombSquad.exe đangchạy trong bộ mô phỏng Pocket PC 2002 Game BombSquad là một trò chơi đơn giản, nóđặt cho bạn một lượng thời gian để khuếch tán một quả bom nguy hiểm bằng cách kíchvào nút Diffuse trước khi điều khiển ProgressBar được làm đầy Vị trí của nút Diffuseliên tục thay đổi trong khi trò chơi đang được chơi Hình 2.10 hiển thị kết quả thành côngcủa việc khuếch tán, và hình 2.11 hiển thị kết quả không thành công của viêc khuếch tánbom.