Dynamic Controls

Một phần của tài liệu Chương 2: Windows application docx (Trang 36 - 39)

Kể từ khi tất cả control khả thị thừa kế từ lớp Control, chúng ta có thể thấy những thuận lợi của đa hình khi làm việc với các tập hợp control. Tất cả control chứa một thuộc tính

Controls hoạt động như một tập hợp control chứa đựng. Nó cho phép bạn viết mã lặp qua

các tập hợp Controls và vận dụng hay yêu cầu mọi control riêng lẽ sử dụng các thuộc tính và phương thức của lớp Control.

Thuộc tính Control này thì động và có thể đựơc dùng để tuỳ chỉnh hình thức của giao diện người dùng tại thời gian chạy bằng cách thêm và xoá các control vào một Form hay

Control. Giống như tất cả tập hợp, tập hợp control có các phương thức cho phép thêm và

huỹ các đối tượng, đó là nguyên nhân các control đựơc thêm vào và huỹ từ các giao diện người dùng. Nó có thể là một kỹ thuật mạnh để thiết kế giao diện người dùng tuỳ biến. Trên thực tế, nếu bạn xem xét phương thức InitializeComponent() tạo bởi Visual

studio.NET bạn sẽ thấy chính xác cách đoạn mã thêm các control vào các Form, và nó cũng là cách mà chúng ta thêm control Button vào ứng dụng Windows Forms đầu tiên của chúng ta ở đầu chương. Hãy tạo một ứng dụng có các thuận lợi về khả năng này để tuỳ chỉnh giao diện người dùng tại thời gian chạy.

Một ứng dụng thông thường yêu cầu các màn hình khác nhau cho mọi đối tượng khác nhau. Một ví dụ là một hệ thống quản lý hàng tồn, hệ thống này phải quản lý các máy tính, phần mềm, và trang bị. Mọi đối tượng này có các thuộc tính duy nhất; tuy nhiên chúng chia sẽ một vài đặc tính chung. Phụ thuộc vào thiết kế giao diện, nó rất hữu ích để tuỳ chỉnh giao diện người dùng dựa vào kiểu đối tượng đang đựơc thao tác trên hệ thống và chỉ hiển thị các trường đó. Tuỳ chỉnh động của giao diện người dùng này có thể được hoàn hảo bởi việc vận dụng thuộc tính Control tại thời gian chạy.

Nguyễn Minh Hiệp  Page 61  Thêm ba control Button ở đâu đó trên bên trái của Form. Gán các nút với thuộc tính Text là Computer, Software, và Furniture. Form nên giống như bên dưới:

Khi một ngừơi dùng chọn nút thích hợp thì giao diện người dùng sẽ tự động tuỳ chỉnh để nhập kiểu đối tượng đó. Một ứng dụng xí nghiệp sẽ dùng các cài đặt này từ một nguồn dữ liệu back-end hay tập tin định hình; tuy nhiên, chúng ta sẽ nhấn mạnh tính logic của hiển thị một cách trực tiếp trong ứng dụng. Nó không là một ví dụ tốt, và nếu ví dụ này đựơc mở rộng thì bước đầu tiên là tạo một phương thức tượng trưng cho giao diện người dùng. Có một số thuộc tính chúng ta sẽ cài đặt cho mọi control chúng ta thêm vào Form. Nó bao gồm các thuộc tính Size và Location khi các control được định vị ở đâu đó. Chúng ta cũng thường cài các thuộc tính Text và Name. Khi thêm một số lượng lớn control vào một form thì tiến trình này có thể nhanh chóng dẫn đến dư thừa và lặp lại mã, do đó để tránh chúng ta sẽ tạo một phương thức tiện ích để cài các thuộc tính này một lần. Chúng ta có thể gọi phương thức này cho mọi control mà chúng ta thêm vào Form. Thêm các phương thức riêng vào lớp Form1.

private void AddControl(Control aControl, Point Location, Size Size, String strText, int TabIndex, string strName)

{ aControl.Location = Location; aControl.Size = Size; aControl.Text = strText; aControl.TabIndex = TabIndex; aControl.Name = strName; this.Controls.Add(aControl); }

Phương thức này chấp nhận một đối tượng Control và cài các thuộc tính public trên nó. Chú ý rằng khi chúng tra gọi phương thức này chúng ta sẽ truyền vào một lớp thừa hưởng, giống như một Label hay TextBox. Việc này có thể làm được thông qua đa hình, bởi vì lớp Control cơ bản định nghĩa các thuộc tính được truy cập bởi các thuộc tính này.

Nguyễn Minh Hiệp  Page 62  Bây giờ, chúng ta thêm các bộ điều khiển sự kiện cho các Button. Thêm một bộ điều khiển sự kiện Click cho mọi nút và thêm đoạn mã sau. Tên của các bộ điều khiển sự kiện sẽ khác nhau phụ thuộc vạo tên của các Button:

private void btnComp_Click(object sender, System.EventArgs e) {

Controls.Clear(); InitializeComponent();

AddControl(new Label(),new Point(125,24),new Size(45,20),"ID:",0,""); AddControl(new TextBox(),new Point(174,21),new Size(125, 20),

"",0,"txtID");

AddControl(new Label(),new Point(125,54),new Size(45,20),"OS:",0,""); AddControl(new TextBox(),new Point(174,50),new Size(125,20),

"",1,"txtOS");

AddControl(new Label(),new Point(125,84),new Size(45,20), "Speed:",0,"");

AddControl(new TextBox(),new Point(174,78),new Size(125,20), "",2,"txtSpeed");

}

private void btnSoft_Click(object sender, System.EventArgs e) {

Controls.Clear(); InitializeComponent();

AddControl(new Label(),new Point(125,24),new Size(45,20), "ID:",0,"");

AddControl(new TextBox(),new Point(174,21),new Size(125, 20), "",0,"txtID");

AddControl(new Label(),new Point(125,54),new Size(45,20), "Vendor:",0,"");

AddControl(new TextBox(),new Point(174,50),new Size(125, 20), "",1,"txtVendor");

AddControl(new Label(),new Point(125,84),new Size(45,20), "Name:",0,"");

AddControl(new TextBox(),new Point(174,78),new Size(125, 20), "",2,"txtName"); (adsbygoogle = window.adsbygoogle || []).push({});

}

private void btnFurn_Click(object sender, System.EventArgs e) {

Nguyễn Minh Hiệp  Page 63  InitializeComponent();

AddControl(new Label(),new Point(125,24),new Size(45,20),"ID:",0,""); AddControl(new TextBox(),new Point(174,21),new Size(125, 20),

"",0,"txtID");

AddControl(new Label(),new Point(125,54),new Size(45,20), "Color:",0,"");

AddControl(new TextBox(),new Point(174,50),new Size(125, 20), "",1,"txtColor");

AddControl(new Label(),new Point(125,84),new Size(45,20), "Type:",0,"");

ComboBox aCombo = new ComboBox();

aCombo.Items.AddRange(new Object[] {"Desk","Chair","Whiteboard"}); AddControl(aCombo,new Point(174,78),new Size(125, 20),"",2,""); }

Chạy ứng dụng và chọn các tuỳ chọn khác nhau thông qua các nút. Bạn sẽ thấy giao diện người dùng tự tuỳ chỉnh dựa vào kiểu nhập vào từ người dùng.

Một phần của tài liệu Chương 2: Windows application docx (Trang 36 - 39)