Tìm hiểu .Net Compact Framework: Nền tảng phát triển ứng dụng di động

MỤC LỤC

Các nền tảng của .Net Compact Framework

- Pocket PC 2000: Các thiết bị này có thể mua được từ một số hãng sản xuất và nó sử dụng các bộ xử lý ARM, MIPS, SH3 hoặc SH4.Net Compact Framework được hỗ trợ trên tất cả các bộ xử lý đó. - Microsoft Smartphone 2002: Smartphone 2002 được xây dựng dựa trên nền tảng là hệ điều hành Pocket PC 2002, nó có thể chạy được trên các thiết bị có kích thước nhỏ hơn và màn hình có tính cảm ứng so với các thiết bị chạy trên Pocket PC.

Kiến trúc của .Net Compact Framework

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

Ngược lại, các ứng dụng “managed” là các ứng dụng được biên dịch sang ngôn ngữ trung gian bytecode hay còn gọi là mã IL. Một yếu tố quan trọng nhất của mã managed là nó không được thực thi trực tiếp bởi CPU mà nó phải chuyển sang mã native đầu tiên để được thực thi.

Biên dịch mã Managed sang mã Native bởi trình biên dịch Just- In-Time

• Một phần hoặc toàn bộ mã IL được chuyển sang mã native để được thực thi bởi CPU. • Nếu mã IL là một phần của mã trong file DLL thì DLL phải được xác định và đưa vào bộ nhớ.

Phát triển ứng dụng với Windown Form

Các hàm không được hỗ trợ trong .Net Compact Framework

    Khi Form Designer được sử dụng để xây dựng ứng dụng, phương thức InitializeComponent chứa mã nguồn để xây dựng giao diện của ứng dụng. Ví dụ, nếu một panel được đặt trên form và panel đó chứa một số điều khiển, panel đó sẽ được thêm vào form trước, và sau đó các điều khiển mới được thêm vào panel. Để thêm một điều khiển vào ứng dụng vào lúc thiết kế rất dễ, chúng ta có thể thực hiện bằng cách kéo một điều khiển từ ToolBox và thả vào Forms của ứng dụng trong cửa sổ Form Designer.

    Nếu thuộc tính có số lượng giá trị giới hạn thì hộp drop-down chứa các giá trị có thể của thuộc tính được hiển thị bên cạnh tên thuộc tính đó. Nếu giá trị của thuộc tính là một tập hợp các đối tượng hoặc một đối tượng phức tạp,thì ở đó có thể là dấu 3 chấm nằm bên cạnh tên thuộc tính. Click vào nút Events nằm phía trên cửa sổ Propertises chúng ta sẽ thấy danh sách các sự kiện đó.Hình 3.4 là hình ảnh của cửa sổ thuộc tính hiển thị các sự kiện được sinh ra bởi điều khiển Button.

    Hình 2.1. SDE Pocket PC trong màn hình Designer view
    Hình 2.1. SDE Pocket PC trong màn hình Designer view

    Sự khác nhau giữa các nền tảng Windows Form

      Khi một form ứng dụng Windows CE .NET được tạo bằng phần thiết kế Form của Visual Studio.NET, kích cỡ được thiết lập là 640 x 450. Mặc dù lớp Form có thuộc tính FormBorderSytle, nhưng việc thiết lập thuộc tính Sizable không ảnh hưởng tới đường viền của cửa sổ. Chúng ta có thể loại bỏ menu đó, nhưng hành động đó sẽ là nguyên nhân phát sinh ngoại lệ khi tương tác với Soft Input Panel (SIP).

      Nếu không có điều khiển MainMenu trên Form, thì một ngoại lệ sẽ được đưa ra vào lúc thực thi khi chúng ta cố gắn hiện InputPanel. Lưu ý là 2 sự kiện này không xuất hiện trong danh sách các sự kiện được hiển thị trong cửa sổ Propertises, nên chúng ta phải viết bằng tay cho 2 sự kiện này. Việc gắn một icon cho một ứng dụng có thể được thực hiện thông qua Visual Studio .Net bằng cách mở hộp thoại Property Pages của dự án.

      Làm việc với điều khiển Form

        Trên Pocket PC hộp điều khiển chỉ chứa đựng nhiều nhất một nút, một là nút minimize, nhãn X, hoặc nút close, nhãn OK. Phụ thuộc vào giá trị của thuộc tính FormBorderStyle, ứng dụng có thể bỏ qua giá trị thuộc tính Size hoặc thiết lập kích thứoc có giá trị đặc biệt cho ứng dụng. Trên Pocket PC để thuộc tính Size có hiệu lực thì thuộc tính FormBorderStyle phải được thiết lập giá trị là FormBorderSytle.None.

        Thiết lập 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 góc trên bên trái của Form. Trên Pocket PC thuộc tính Location không có ảnh hưởng trừ khi thuộc tính FormBorderSytle được thiết lập là FormBorderSytle.None. Trên Windows CE vị trí của cửa sổ luôn luôn bằng thuộc tính Location, trừ khi ứng dụng đưa vào trạng thái phóng to hoặc thu nhỏ hết cỡ.

        Bảng 3.2. Giá trị thuộc tính  MaximizeBox  và ảnh hưởng của nó cho
        Bảng 3.2. Giá trị thuộc tính MaximizeBox và ảnh hưởng của nó cho

        Điều khiển Button

        Keys.Down Nút phía dưới của pad được nhấn Keys.Right Nút bên phải của pad được nhấn Keys.Left Nút bên trái của pad được nhấn.

        Hình 2.6. Ứng dụng GiveemTime chạy trên bộ giả lập Pocket PC 2002
        Hình 2.6. Ứng dụng GiveemTime chạy trên bộ giả lập Pocket PC 2002

        Điều khiển RadioButton

        Khi một tên phim được chọn, ứng dụng sẽ bắt sự kiện RadioButton's CheckedChanged và một hộp massage được hiển thị nếu tên phim được chọn là đúng.

        Điều khiển CheckBox

        Điều khiển CheckBox cung cấp thuộc tính CheckState, thuộc tính này xác đinh CheckBox có được chọn hay không. Trạng thái Indeterminate chỉ có thể dược sử dụng khi thuộc tính ThreeState của điều khiển CheckBox được thiết lập là true. Khi CheckState là Indeterminate và thuộc tính ThreeState là true, thì điều khiển bị mờ đi nhưng vẫn chọn được.

        Điều khiển sẽ không phản hồi lại khi người dùng click vào nó nếu thuộc tính AutoCheck được thiết lập là false. Ứng dụng Apples.exe là một ví dụ khác đơn giản là xác định loại táo người sử dụng thích. Các điều khiển CheckBox khác có nhãn cùng với loại táo khác nhau bị mờ cho đến khi CheckBox có nhãn “I like apples” được chọn, khi đó người sử dụng lựa chọn loại táo anh ta hoặc cô ta thích.

        Điều khiển ComboBox

        Các mục có thể loại bỏ thông qua phương thứ Remove trên tập hợp Items, hoặc tất cả các mục có thể loại bỏ bằng cách gọi phương thức Clear. Cách 2: Chúng ta có thể thêm vào ComboBox lúc thực thi bằng cách ràng buộc điều khiển với một đối tượng tập hợp. Khi ComboBox cố gắng thêm một mục vào danh sách, nó sẽ gọi phương thức ToString trên mỗi mục trong DataSource và thêm vào danh sách lựa chọn.

        ComboBox sẽ gọi thuộc tính riêng biệt trong thuộc tính DisplayName và thêm chuỗi trả về vào danh sách lựa chọn. Điều khiển ComboBox cung cấp thuộc tính SelectedItem, thuộc tính này trả về một tham chiếu đến mục đang chọn. Một là chúng ta có thể tham chiếu đến mục đang chọn, chúng ta không cần phải đưa chỉ số vào thuộc tính Items.

        Hình 2.9. Hộp thoại String Collection Editor
        Hình 2.9. Hộp thoại String Collection Editor

        Điều khiển ListBox

        Chỉ số này có thể được sử dụng để truy cập mục đang chọn từ thuộc tính Items của điều khiển ComboBox. Các thuộc tính được sử dụng tương tự như được sử dụng trong điều khiển Control.

        Các điều khiển khác

          Nó lưu dữ các bảng trong bộ nhớ được sắp xếp như là các bảng, dòng, và cột và cho phép người phát triển thực hiện các thao tác cơ sở dữ liệu chuẩn, như thêm và xóa dữ liệu, sắp xếp, và kiểm tra ràng buộc. Chiến lược chung để quản lý dữ liệu trong lập tình ADO.NET là đưa dữ liệu từ CSDL lớn vào DataSet, làm việc với các khoang dữ liệu trong DataSet, và ghi dữ liệu thay đổi trở lại CSDL. Chúng ta có thể sử dụng riêng một DataTable để lưu trữ dữ liệu liên quan cùng với một bảng, nhưng DataSet cung cấp các phương thức và thuộc tính có tiện ích thêm và thực sự tạo một CSDL quan hệ thu nhỏ trong bộ nhớ.

          Ví dụ, đoạn mã sau thiết lập cột thứ 2 trong dòng đầu tiên của bảng đầu tiên trong tập hợp DataSet thành một số ngẫu nhiên được cung cấp bởi randomGenerator, randomGenerator được cung cấp trong lớp Random. Nếu DataColumn có AllowDBNull là false được thiết lập thành DBNull, ngoại lệ System.Data.NoNullAllowed được đưa ra khi một dòng mới được thêm vào DataTable trong DataSet. Để thiết lập DataRelation giữa hai bảng trong một DataSet, trước tiên tạo DataRelation bằng cách sử dụng hàm khởi tạo thông qua DataColumns bao gồm khóa chính và khóa ngoại.

          Hình 3.1. Miêu tả  DataSet  cấu trúc của phone book.
          Hình 3.1. Miêu tả DataSet cấu trúc của phone book.

          Lập trình với Microsoft SQL Server CE

            Chúng ta có thể tạo một CSDL SQL Server CE bằng cách lập trình sử dụng lớp SQL Server CE Data Provider định nghĩa trong không gian tên System.Data.SqlServerCE. Chúng ta có thể dùng đồ họa bằng cách sử dụng SQL Server CE Query Analyzer hoặc bằng cách lập trình sử dụng lớp SQL Server CE Data Provider. Để lập trình tạo bảng CSDL, chúng ta sẽ cần kết nối với CSDL bằng cách sử dụng lớp SqlCeConnection và đưa ra các câu lệnh DDL bằng cách sử dụng lớp SqlCeCommand.

            Chúng xác định được vị trí dòng dữ liệu, chúng ta có thể sử dụng các phương thức GetXXX của SqlCeDataReader để truy nhập các cột trong mỗi dòng dữ liệu. Thuộc tính SelectCommand là đối tượng SqlCeCommand xác định là câu lệnh SQL mà SqlCeDataAdapter sẽ sử dụng để nhậ dữ liệu từ CSDL SQL Server CE database. Trước tiên, SqlCeDataAdapter khởi tạo giản đồ DataSet tương ứng với giản đồ trong nguồn dữ liệu, Điều này có nghĩa là DataTables được xây dựng tương ứng với bảng CSDL nguồn như là xây dựng DataColumns tương ứng với cột bảng CSDL nguồn.

            DataSet đã đưa dữ liệu vào bằng cách sử dụng SqlCeDataAdapter, chúng ta có thể tạo sự thay đổi dữ liệu và cập nhật dữ liệu nguồn, chúng ta phải chỉ ra ba thuộc tính thêm vào đối tượng SqlCommand cho SqlCeDataAdapter là: UpdateCommand, InsertCommand, và DeleteCommand. Khi chúng ta nhận một sự kiện RowUpdating, chúng ta sẽ xác định thuộc tính của đối tượng SqlCeRowUpdatingEventArgs và quyết định tiếp tục cập nhật hay không.

            Bảng 3.2.1. Các câu lệnh DDL hỗ trợ bởi SQL Server CE
            Bảng 3.2.1. Các câu lệnh DDL hỗ trợ bởi SQL Server CE