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

Giáo trình Xây dựng ứng dụng quản lý cơ bản (Nghề: Tin học ứng dụng - Trình độ Trung cấp): Phần 2 - Trường Cao đẳng Nghề An Giang

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

Bài 4: Các đối tượng trên Windows Form
Giới thiệu
Thư viện Microsoft .NET framework chứa một tập phong phú các lớp dùng
để tạo các ứng dụng Windows trong không gian tên System.Windows.Forms. Các
lớp điều khiển cơ bản như các lớp Label, TextBox, Button, CheckBox, ListBox…
đến các điều khiển chuyên biệt như MenuStrip, StatusStrip, ToolStrip... Người đọc
sẽ tìm thấy tất cả các công cụ cần thiết để quản lý các ứng dụng giao diện đa tài
liệu MDI (Multiple Document Interface), tích hợp việc trợ giúp ngữ cảnh, và ngay
cả tạo các giao diện người dùng đa ngôn ngữ, kiểm tra dữ liệu hợp lệ…
Mục tiêu của bài:
Nhằm trang bị cho người học:
- Kiến thức và kỹ năng về việc sử dụng các đối tượng trên Form.
- Kiến thức và kỹ năng về việc lựa chọn các sự kiện sử dụng cho phù hợp.
I/ Các điều khiển cơ bản
1/ Nhãn (Label)
Các điều khiển Label đặt chuỗi tĩnh trên Form, thường sử dụng để cung cấp
chuỗi mô tả cho các điều khiển khác. Chuỗi đặt trong thuộc tính Text, và được
canh lề bởi thuộc tính TextAlign.
Thuộc tính
string Text

Mơ tả
Truy cập hay thiết lập văn bản hiển thị trên Label
label1.Text = "Hello";

bool AutoSize

Truy cập hay thiết lập giá trị nếu là true chỉ rõ điều khiển tự động
thay đổi kích thước theo chiều dài của văn bản trên Label

ContentAlignment


TextAlign

Truy cập hay thiết lập giá trị chỉ rõ canh lề văn bản trên Label

bool AutoEllipsis

Truy cập hay thiết lập giá trị nếu là true, chuỗi văn bản khơng
vừa khít với Label, sẽ hiển thị dấu … cuối của chuỗi. Thuộc tính
này khơng có tác dụng nếu thuộc tính AutoSize là true

BorderStyle BorderStyle

Truy cập hay thiết lập kiểu viền của điều khiển, là các hằng của
enumeration BorderStyle gồm Fixed3D, FixedSingle và None
label1.BorderStyle =
System.Windows.Forms.BorderStyle.Fixed3D;

47


bool UseMnemonic

Truy cập hay thiết lập giá trị nếu là true, ký tự đi sau dấu & trong
thuộc tính Text là phím truy cập, nghĩa là bạn có thể sử dụng Alt
+ ký tự để chuyển focus đến Label
Bảng 4.1 Các thuộc tính của Nhãn

2/Nhãn liên kết (LinkLabel)
LinkLabel là một nhãn đặc biệt kế thừa từ lớp Label, và bổ sung một số
thuộc tính của nhãn biểu diễn dạng liên kết. Ví dụ, nhiều ứng dụng cung cấp một

liên kết đến website công ty trong cửa sổ About.
Bạn cần xử lý sự kiện LinkClicked để tạo chức năng liên kết cho nhãn liên
kết. Trong phương thức xử lý sự kiện này, thiết lập thuộc tính LinkVisited là true
để màu của liên kết được cập nhật thích hợp. Sử dụng phương thức
System.Diagnostics.Process.Start("URL") để hiển thị trang web với địa chỉ URL
trong trình duyệt.
Ví dụ:
linkLabel1.Text = "See />linkLabel1.LinkArea = new LinkArea(4, 26);
linkLabel1.LinkBehavior = LinkBehavior.HoverUnderline;
private void linkLabel1_LinkClicked(Object sender, LinkLabelLinkClickedEventArgs e) {
linkLabel1.LinkVisited = true;
System.Diagnostics.Process.Start(" />}

3/ Nút lệnh (Button)
Nút lệnh thực hiện một thao tác nào đó.
Mơ tả

Thành viên
void PerformClick()

Phát sinh sự kiện click button

FlatStyle FlatStyle

Truy cập hay thiết lập giá trị chỉ kiểu button, là các hằng của
enumeration System.Windows.Forms.FlatStyle như là Flat, Popup,
Standard, System
btnHienThi.FlatStyle = System.Windows.Forms.FlatStyle.Popup;

FlatButtonAppearance

FlatAppearance

Truy cập hay thiết lập màu viền, kích thước nét viền, màu nền khi di
chuyển mouse hay nhấn mouse trên nút lệnh

FlatStyle FlatStyle

button1.FlatAppearance.BorderColor = Color.LightSteelBlue;
button1.FlatAppearance.MouseOverBackColor=Color.LightCyan;
Thiết lập thuộc tính FlatStyle là FlatStyle.Flat để các thiết lập thuộc
tính FlatAppearance có tác dụng: button1.FlatStyle=FlatStyle.Flat;
Bảng 4.2 Các thành viên của lớp Button

48


4/ Hộp văn bản (TextBox)
TextBox cho phép người dùng nhập vào thông tin văn bản. TextBox cung
cấp một tập các tính năng định nghĩa sẵn mà người dùng có thể truy cập thơng qua
menu ngữ cảnh.

Hình 4.1 TextBox với menu ngữ cảnh

Nhiều tính năng thuộc lớp TextBox và một số tính năng thuộc lớp cơ sở
TextBoxBase được kế thừa bởi lớp MaskedTextBox và RichTextBox
Mô tả

Thành viên
string Text


Truy cập hay thiết lập văn bản hiển thị trên TextBox

bool ReadOnly

Truy cập hay thiết lập giá trị nếu là true, văn bản trong
TextBox là chỉ đọc

bool ScrollBars

Truy cập hay thiết lập giá trị nếu là true, sẽ hiển thị thanh
cuộn trong hộp nhập nhiều dòng

bool Multiline

Multiline truy cập hay thiết lập giá trị, nếu là true, cho phép
nhập văn bản nhiều dòng vào TextBox

bool AcceptsReturn
bool WordWrap

AcceptsReturn nếu là true, khi đó dịng mới có thể chèn vào
TextBox khi người dùng ấn phím Enter
Khi bổ sung chuỗi nhiều dòng vào TextBox, ngăn cách các
dòng bởi ký tự \r\n, ví dụ “Line1\r\nLine2”
WordWrap nếu là true, sẽ cho phép cuộn dòng

bool CanUndo

Truy cập hay thiết lập văn bản trong TextBox có thể phục
hồi (undo) hay khơng


void Cut(), Copy(), Paste(string text)

Các phương thức này cho phép chọn khối văn bản, hủy chọn
và sao chép, cắt văn bản vào bộ nhớ, và dán văn bản từ bộ
nhớ ra TextBox, phục hồi.

void Clear(), Undo()
void Select(int start, int length)
void SelectAll(), DeselectAll()

49


CharacterCasing CharacterCasing

Truy cập hay thiết lập giá trị Lower, Normal, Upper thuộc
enumeration CharacterCasing để chuyển văn bản trong
TextBox thành chữ thường hay hoa

string[] Lines

Truy cập hay thiết lập mảng các dòng trong TextBox

int MaxLength

Truy cập hay thiết lập số tối đa ký tự có thể vào TextBox.
Giá trị mặc định là 0 nghĩa là không giới hạn

char PasswordChar


PasswordChar truy cập hay thiết lập ký tự xuất hiện trong
TextBox, thay thế cho các văn bản trong TextBox để che dấu
thông tin. textBox1.PasswordChar = „*‟;

bool UseSystemPasswordChar

UseSystemPasswordChar truy cập hay thiết lập giá trị nếu là
true sẽ sử dụng ký tự mật khẩu định nghĩa bởi hệ thống
string SelectedText
int SelectionLength
int SelectionStart

SelectionStart và SelectionLength truy cập hay thiết lập vị trí
bắt đầu và kết thúc của văn bản được chọn hiện hành trong
TextBox
SelectedText truy cập hay thiết lập văn bản được chọn hiện
hành trong TextBox
Bảng 4.3 Các thành viên của lớp TextBox

5/ Hộp đánh dấu (CheckBox) và nút lựa chọn (RadioButton)
CheckBox và RadioButton cung cấp thuộc tính Checked truy cập hay thiết
lập giá trị kiểu bool chỉ rõ điều khiển đang được chọn hay không. Sau khi trạng
thái thay đổi, sự kiện CheckedChanged phát sinh.
Bạn có thể tạo một CheckBox ba trạng thái đặc biệt bằng cách thiết lập
thuộc tính ThreeState là true. Thuộc tính CheckState truy cập hay thiết lập giá trị
chỉ rõ điều khiển đang được chọn, không chọn hay trạng thái trung gian (tơ bóng
nhưng khơng chọn), bởi các giá trị thuộc enumeration CheckState là Checked,
Unchecked, Indeterminate.
Thuộc tính AutoCheck mặc định là true, sẽ thay đổi trạng thái của điều

khiển khi người dùng kích vào điều khiển, nếu là false, sẽ ngăn cản người dùng
thay đổi trạng thái điều khiển. Nếu nhóm các RadioButton thành một nhóm bởi
điều khiển GroupBox, rồi thì chỉ có một RadioButton được chọn trong nhóm.
Ví dụ:
using System;
using System.Windows.Forms;
public partial class Form1 : Form {
private void Form1_Load(object sender, EventArgs e) {
rbred.Checked = true;
}

50


private void rbred_CheckedChanged(object sender, EventArgs e) {
this.BackColor = Color.Pink;
}
private void rbgreen_CheckedChanged(object sender, EventArgs e) {
this.BackColor = Color.LightGreen;
}
private void rbblue_CheckedChanged(object sender, EventArgs e) {
this.BackColor = Color.LightBlue;
}
}

Hình 4.2: RadioButton

II/ Các điều khiển nâng cao ListBox, ComboBox
.NET cung cấp ba điều khiển danh sách: ListBox, CheckedListBox và
ComboBox. Chúng thừa kế từ lớp trừu tượng ListControl, định nghĩa các tính năng

cơ sở cho phép sử dụng điều khiển danh sách để ràng buộc dữ liệu.
Các điều khiển danh sách có thể ràng buộc danh sách dữ liệu như DataSet,
DataTable, mảng, ArrayList… bởi thuộc tính DataSource
string[] thanhPho = {"Đà nẵng","Huế","Sài gòn","Nha trang","Hà nội","Đà
lạt"};
listBox1.DataSource = thanhPho;
checkedListBox1.DataSource = thanhPho;
Có thể truy cập hay thiết lập mục chọn hiện hành sử dụng thuộc tính
SelectedIndex để xác định chỉ số của mục chọn hiện hành, hay sử dụng thuộc tính
Text, SelectedValue, SelectedItem để xác định mục chọn
label1.Text = checkedListBox1.SelectedValue.ToString();
label1.Text = checkedListBox1.Text;
label1.Text = checkedListBox1.SelectedItem.ToString();
listBox1.SelectedIndex = 0;
Có thể chọn nhiều mục từ điều khiển danh sách, sử dụng tập SelectedIndices
hay SelectedItems trả về một tập các mục chọn. Thuộc tính SelectionMode chỉ rõ
51


hộp danh sách có thể chọn nhiều mục hay khơng, xác định bởi các giá trị thuộc
enumeration SelectionMode:
- MultiExtended: chọn nhiều mục bằng cách nhấn giữ Ctrl hay Shift khi kích
chọn mục để chọn nhiều mục
- MultiSimple: chọn một mục bằng cách kích mouse chọn hay nhấn phím
trống
CheckedListBox khơng hỗ trợ Ctrl, Shift, nhưng cho phép nhiều mục được
chọn. Thuộc tính CheckedIndices và CheckedItems cung cấp thơng tin về các mục
chọn
private void button1_Click(object sender, EventArgs e) {
label1.Text = "";

foreach (string item in checkedListBox1.CheckedItems)
label1.Text = label1.Text + item + " ";
}

Có thể truy cập tất cả các mục trong điều khiển danh sách bởi thuộc tính
Items. Tập Items cho phép thêm vào và xóa mục trong danh sách
checkedListBox1.CheckOnClick = true;
checkedListBox1.Items.Add("Đà nẵng");
checkedListBox1.Items.Remove("Đà nẵng");
checkedListBox1.Items.RemoveAt(0);
ComboBox hỗ trợ một số thuộc tính mục chọn như trên và tập Items. Kiểu
ComboBox chỉ rõ bởi thuộc tính DropDownStyle:
- ComBoxStyle.DropDown: danh sách khơng giới hạn, người dùng có thể
vào thông tin tùy ý
- ComboBoxStyle.DropDownList: chỉ cho phép chọn mục có sẵn trong danh
sách.
III/ Image,ImageList
1/PictureBox
PictureBox là điều khiển để hiển thị hình ảnh. Các thuộc tính thường dùng
của PictureBox như sau:
- Thuộc tính Image xác định hình ảnh cần hiển thị
- Thuộc tính SizeMode thiết lập giá trị chọn từ enumeration
PictureBoxSizeMode:
52


- AutoSize: PictureBox thay đổi kích thước bằng image
- CenterImage: image hiển thị ở giữa của PictureBox, và nếu image lớn hơn
PictureBox sẽ bị cắt phần xung quanh image
- Normal: image đặt ở góc trái trên của PictureBox, nếu image sẽ bị cắt nếu

kích thước lớn hơn PictureBox
- StretchImage: image phóng to hay thu nhỏ vừa với kích thước của
PictureBox
- Zoom: kích thước của image tăng hay giảm theo PictureBox và đảm bảo tỷ
lệ chiều cao và rộng của image
Ví dụ: pictureBox1.Image = System.Drawing.Image.FromFile("pic.bmp");
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
2/ ImageList
Công dụng: Quản lý các hình ảnh được chứa trong các điều khiển khác như:
ListView, TreeView, ToolStrip,…
Tạo ImageList: Chọn công cụ và kéo thả vào form.

Các thuộc tính thường dùng:
Thuộc tính

Ý nghĩa

Image

Các hình được quản lý bởi ImageList

- Khi chọn
sẽ xuất hiện công cụ Images Collection Editor, cho phép thêm,
xoá, sắp xếp các ảnh.

53


IV/ListView, TreeView
1/ ListView

- Dùng để hiển thị dữ liệu theo các dịng và các cột
+ Có thể chọn một hoặc nhiều dịng
+ Có thể hiển thị các biểu tượng theo các dịng
- Thuộc tính:
Thuộc tính

Ý nghĩa

CheckBoxes

Có/Khơng xuất hiện các checkbox trên các dòng dữ liệu. Mặc
định là False

Columns

Các cột hiển thị trong chế độ Details

FullRowSelect

Chọn được nhiều phân tử trong ListView

GridLines

Hiển thị lưới (Chỉ hiển thị trong chế độ Details)

Items

Mảng các dòng trong ListView

LargeImageList Danh sách ảnh dạng lơn hiển thị trên ListView

SmailImageList Danh sách ảnh dạng nhỏ hiển thị trên ListView
MultiSelect

Có/Khơng cho phép chọn nhiều dịng. Mặc định là True

SelectedItems

Mảng các dòng được chọn

View

Kiểu hiển thị của ListView
Icons:Hiển thị danh sách theo các biểu tượng
54


List: Hiển thị danh sách theo một cột
Details: Hiển thị ListView theo danh sách nhiều cột

Phương thức:
Phương thức

Công dụng

Add

Thêm một dịng vào ListView

Clear


Xóa tất cả các dịng của ListView

Remove

Xóa một dịng trong ListView

RemoveAt(index)

Xóa một dịng ở vị trí index

Sự kiện thường dùng: ItemSelectionChanged: Xảy ra khi chọn một dịng.
Ví dụ:
Thiết kế form nhập, sửa, xóa dữ liệu như hình minh họa.

Cách thực hiện:
Thiết kế Form và đặt tên các đối tượng
- txtId, txtFirstName,txtLastName,txtAddress.
- btnNew, btnEdit,btnDelete,btnSave,btnCancel.
55


Đặt thuộc tính cho ListView1
Columns: Thêm 4 cột
FullRowSelect: True
GridLine: True
MulitiSelect: False
View: Details
Xử lý sự kiện các button
private void btnNew_Click(object sender, EventArgs e)
{

txtId.Clear();
txtFirstName.Clear();
txtLastName.Clear();
txtAddress.Clear();
}
private void btnEdit_Click(object sender, EventArgs e)
{
txtId.Focus();
}
private void btnCancel_Click(object sender, EventArgs e)
{
txtId.Clear();
txtFirstName.Clear();
txtLastName.Clear();
txtAddress.Clear();
}
private void btnDelete_Click(object sender, EventArgs e)
{
try
{
listView1.Items.RemoveAt(listView1.SelectedIndex);
}
catch(Exception)
{}
}
public
void
listView1_ItemSelectionChanged(object
ListViewItemSelectionChangedEventArgs e)
{

txtId.Text=listView1.Items[e.ItemIndex].SubItems[0].Text;
txtFirstName.Text=listView1.Items[e.ItemIndex].SubItems[1].Text;
txtLastName.Text=listView1.Items[e.ItemIndex].SubItems[2].Text;
txtAddress.Text=listView1.Items[e.ItemIndex].SubItems[3].Text;

sender,

}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}

56


2/ TreeView
- Hiển thị thông tin theo các nút(node)
- Các nút cha có các nút con
- Nút đầu tiên gọi là nút gốc
+Ấn dấu [+] để mở nút
+ Ấn dấu [-] để thu gọn nút
- Mỗi nút có hình ảnh kèm theo

- Thuộc tính:
Thuộc tính

Ý nghĩa

CheckBoxes


Có/Khơng xuất hiện các checkbox treen các node.
Mặc định là False

Checked

Có/Khơng một Node được check( Thuộc tính
CheckBoxes phải được đặt là True)

ImageList

Chỉ ra danh sách ảnh hiển thị trên các node

Nodes

Mảng các TreeNodes trong TreeView
Nodes.Add: Bổ sung một node vào cây
Nodes.Clear: Xóa tồn bộ các node trên cây
Nodes.Remove: Xóa một node trên cây và các
node con của nó

SelectedNode

Node hiện thời được chọn

FullPath

Chỉ ra đường dẫn đến node bắt đầu từ node gốc

SelectedImageIndex


Chỉ ra chỉ số ảnh được hiển thị trên node khi node
được chọn

Text

Text hiển thị của Node

ImageIndex

Chỉ ra chỉ số ảnh được hiển thị trên node khi node
không được chọn

FirstNode

Node con đầu tiên của node

LastNode

Node con cuối cùng của node
57


PrevNode

Node con trước của node con hiện thời

NextNode

Node con tiếp theo node hiện thời


Phương thức:
Phương thức

Công dụng

Collapse

Thu nhỏ các node con của node

Expand

Mở rộng các node con của node

ExpandAll

Mở rộng tất cả các node con

GetNodeCount

Trả về số lượng node con

Sự kiện:
 AfterSelect: Xảy ra khi một node được chọn.
 BeforeExpand: Xảy ra khi mở rộng một node.
Ví dụ 3.3:

private void AddTreeView_Load(object sender, EventArgs e)
{
treeView1.ImageList=imageList1;

comboBox1.Items.Add(“Image1”);
comboBox1.Items.Add(“Image2”);
comboBox1.SelectedIndex=0;
}
private void btnAddRoot_Click(object sender, EventArgs e)
{
if(txtInput.Text.Trim()==””) return ;
TreeNode childNode=new TreeNode();
childNode.Text=txtInput.Text;
childNode.ImageIndex=comboBox1.SelectedIndex;
58


treeView1.Nodes.Add(childNode);
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
currentNode=e.Node;
}
private void btnAddchild_Click(object sender, EventArgs e)
{
if(txtInput.Text.Trim()==””) return;
TreeNode childNode=new TreeNode();
childNode.Text=txtInput.Text;
childNode.ImageIndex=comboBox1.SelectedIndex;
currentNode.Nodes.Add(childNode);
currentNode.ExpandAll();
}
private void btnAddDelete_Click(object sender, EventArgs e)
{

currentNode.Remove();
}
V/ Bố cục Control
Cách bố trí (Layout) là một vấn đề quan trọng và không thể thiếu trong việc
thiết kế giao diện. GUI hỗ trợ nhiều kiểu layout tương ứng với mỗi control được
gọi là layout container/layout control. Các layout container này được kế thừa từ
lớp System.Windows.Controls.Panel và có cách sắp xếp và bố trí các control bên
trong nó khác nhau.
1/Sử dụng thuộc tính Anchor
– Cho phép control phản ứng lại với thao tác resize của form
• Control có thể thay đổi vị trí tương ứng với việc resize của form
• Control cố định không thay đổi theo việc resize của form
– Các trạng thái neo
• Left: cố định theo biên trái
• Right: cố định theo biên phải
• Top: cố định theo biên trên
• Bottom: cố định theo biên dưới
59


2/ Sử dụng thuộc tính Docking
Các control có thể gắn (dock) với một cạnh nào đó của form, hoặc container
của control.
3/ Sử dụng Containers
Container là nhóm Controls dùng làm vùng chứa - có thể chứa các Control
khác: Panel, FlowLayoutPanel, SplitContainer, TableLayoutPanel, Goupbox,
TabControl

 Panel
- Cơng dụng: Chứa nhóm các control. Khơng có caption, có thanh cuộn

(scrollbar)
 FlowLayoutPanel
- Cơng dụng: FlowLayoutPanel là một điều khiển kiểu Panel, nó sẽ tự động
sắp xếp các điều khiển đặt bên trong nó theo một quy tắc định trước khi thêm các
điều khiển vào cũng như thay đổi kích cỡ của nó.
 TableLayoutPanel
- Cơng dụng: TableLayoutPanel là một điều khiển kiểu Panel được chia ra
thành các ơ theo dịng cột để đặt điều khiển vào.
Có thể thêm các dòng và các cột cho điều khiển qua các thuộc tính Columns và
Rows của TableLayoutPanel, hay qua thực đơn ngữ cảnh khi nhấn phải chuột
trên TableLayoutPanel.
 SplitContainer
- Công dụng: SplitContainer là một Panel chứa hai Panel bên trong. Hai panel
này có thể được thay đổi kích thước nhờ một splitter, một vạch thẳng phân cách
hai panel.
 Groupbox
- Công dụng: Hiển thị một khung bao quanh một nhóm control. Có thể hiển thị
tiêu đề thơng qua thuộc tính Text
60


- Khi xóa một GroupBox thì các control chứa trong nó bị xóa theo.
 TabControl
- Cho phép thể hiện nhiều page trên một form duy nhất
- Mỗi page chứa các control tương tự như group control khác. Mỗi page có
tag chứa tên của page. Kích vào các tag để chuyển qua lại giữa các page
VI/ Các hộp thoại thông điệp
1/Hộp thoại thông báo đơn giản
.NET cung cấp một số dạng hộp thoại xây dựng sẵn. Phổ biến là lớp
MessageBox, hiển thị một hộp thoại thơng báo đơn giản

Ví dụ: MessageBox.Show("You must enter a name.", "Name Entry Error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation) ;
Các kiểu button cho hộp thoại cung cấp bởi enumeration
MessageBoxButtons: AbortRetryIgnore, OK, OKCancel, RetryCancel, YesNo,
YesNoCancel
Các kiểu biểu tượng cho hộp thoại cung cấp bởi enumeration
MessageBoxIcon: Asterisk, Information, Error, Hand, Stop, Exclamation,
Warning, Question, None.
Ví dụ: Kiểm tra người dùng muốn đóng Form hay khơng, và sử dụng thuộc
tính Cancel của lớp FormClosingEventArgs để hủy sự kiện đóng Form

Hình: Hộp đối thoại thơng báo đơn giản
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
DialogResult n = MessageBox.Show("Bạn có muốn thốt khơng?", "Thốt",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (n != DialogResult.OK)
e.Cancel = true;
}

2/Hộp thoại phông chữ và màu
Hộp đối thoại màu cho phép người dùng chọn một màu từ bảng màu. Bổ
sung điều khiển ColorDialog vào Form hay bạn có thể tạo đối tượng của lớp
61


ColorDialog, và thiết lập các thuộc tính cần thiết:
- Thuộc tính chính được dùng với lớp này là Color cho màu sắc người dùng
chọn
- Một tiện lợi khác là có thể hiển thị hộp đối thoại mở rộng, cho phép người
dùng định nghĩa màu sắc bằng cách thiết lập thuộc tính AllowFullOpen với giá trị

true.
- Thuộc tính ShowHelp nếu thiết lập true cho phép người dùng nhấn F1 để
hiện trợ giúp
Ví dụ: Hiển thị hộp thoại màu

Hình 4.3 Hộp đối thoại màu

ColorDialog colorDialog1 = new ColorDialog();
//colorDialog1. AllowFullOpen = false;
if (colorDialog1.ShowDialog() == DialogResult.OK)
textBox1.ForeColor = colorDialog1.Color;

Hộp đối thoại phông chữ cho phép người dùng chọn một kiểu phông chữ.
Bổ sung điều khiển FontDialog vào Form hay bạn có thể tạo đối tượng của lớp
FontDialog, và thiết lập các thuộc tính cần thiết:
- Thuộc tính quan trọng nhất là Font, trả về phơng chữ được chọn.
- Color trả về màu font được chọn. Chú ý thuộc tính ShowColor phải là true
để hộp thoại hiển thị hộp danh sách chọn màu
- ShowColor nếu giá trị là true, hộp thoại sẽ hiển thị hộp danh sách chọn màu
- MaxSize truy cập hay thiết lập cỡ chữ lớn nhất người dùng có thể chọn
- MinSize truy cập hay thiết lập cỡ chữ nhỏ nhất người dùng có thể chọn
- ShowApply truy cập hay thiết lập giá trị chỉ rõ hộp thoại hiển thị nút Apply
hay không. Sự kiện Apply xảy ra trên hộp thoại khi người dùng chọn nút Apply.
62


Nút Apply thường dùng khi người dùng muốn xử lý phông chữ chọn từ hộp thoại
trên ứng dụng, mà không cần phải đóng hộp thoại
- ShowEffects nếu giá trị là true mặc định, hộp thoại sẽ hiển thị các tùy chọn
Strikeout, Underline, và hộp danh sách chọn màu

Ví dụ: Hiển thị hộp thoại phơng chữ

Hình 4.4: Hộp đối thoại phơng chữ
private void button1_Click(object sender, EventArgs e) {
fontDialog1.ShowColor = true;
fontDialog1.MinSize = 12; fontDialog1.MaxSize = 24;
fontDialog1.ShowApply = true;
if (fontDialog1.ShowDialog() == DialogResult.OK) {
textBox1.Font = fontDialog1.Font;
textBox1.ForeColor = fontDialog1.Color;
}
}
private void fontDialog1_Apply(object sender, EventArgs e) {
textBox1.Font = fontDialog1.Font;
textBox1.ForeColor = fontDialog1.Color;
}

VII/ Các hộp thoại tập tin
1/ Hộp thoại lưu tập tin
Công dụng: Tạo ra hộp thoại Save File.
Tạo SaveFileDialog: Nhắp đúp vào control
Thuộc tính:
Thuộc tính

Ý nghĩa

AddExtension

True cho phép thêm vào tên mở rộng


CheckFileExsits

True sẽ xuất hiện hộp thoại với chuỗi cảnh báo nếu
người sử dụng chọn tập tin khơng tồn tại

CheckPathExits

True sẽ kiểm tra đường dẫn có hợp lệ hay không
trước khi trả về
63


CreatePrompt

Cửa sổ cảnh báo xuất hiện nếu tập tin chuẩn bị ghi ra
chưa tồn tại

DefaultExt

Chọn tên mở rộng mặc định nếu người sử dụng
không cung cấp tên mở rộng cho tập tin.

FileName

Gán hay trả về tên tập tin chọn

Filter

Khai báo chuỗi lọc các loại tập tin


InitialDirectory

Thư mục sẽ chọn khi hộp thoại kích hoạt. Nếu
khơng cung cấp giá trị cho thuộc tính này thì ổ đĩa
mặc định sẽ được chọn

Overwriteprompt

True thì cửa số cảnh báo khi tập tin sẽ ghi đang tồn
tại

RestoreDirectory

Phục hồi lại thư mục hiện hành trước khi đóng hộp
thoại

Title

Tiêu đề của hộp thoại

2/ Hộp thoại mở tập tin
Công dụng: Tạo ra hộp thoại Open File.
Tạo OpenFileDialog: Nhắp đúp vào control
Thuộc tính:
Thuộc tính

Ý nghĩa

AddExtension


True cho phép thêm vào tên mở rộng

CheckFileExsits

True sẽ xuất hiện hộp thoại với chuỗi cảnh báo nếu
người sử dụng chọn tập tin không tồn tại

CheckPathExits

True sẽ kiểm tra đường dẫn có hợp lệ hay không trước
khi trả về

DefaultExt

Chọn tên mở rộng mặc định nếu người sử dụng không
cung cấp tên mở rộng cho tập tin.

FileName

Gán hay trả về tên tập tin chọn

FileNames

Gán hay trả về mảng chứa tên tập tin chọn

Filter

Khai báo chuỗi lọc các loại tập tin.

InitialDirectory


Thư mục sẽ chọn khi hộp thoại kích hoạt. Nếu khơng
cung cấp thuộc tính này thì ổ đĩa mặc định sẽ được chọn

MultiSelect

True cho phép bạn chọn nhiều tập tin

ReadOnlyChecked True là Check vào nút Check có chuỗi open as read-only
64


RestoreDirectory

Phục hồi lại thư mục hiện hành trước khi đóng hộp thoại

ShowReadOnly

True trình bày nút Check có chuỗi Open as read-only

Title

Tiêu đề hộp thoại

VIII/ Thực đơn chính, thực đơn ngữ cảnh
MenuStrip: là menu chính xuất hiện ở trên đỉnh của Form. Để tạo menu
chính sử dụng điều khiển MenuStrip
Menu ngữ cảnh (Context menu): là menu xuất hiện tùy vào ngữ cảnh khi
kích phải trên điều khiển nào đó. Menu ngữ cảnh thường chứa các tùy chọn thường
xuyên sử dụng. Để tạo menu ngữ cảnh, sử dụng điều khiển ContextMenuStrip.

1/ MenuStrip
Menu là phần cần thiết của ứng dụng giao diện đồ họa. Các menu có thể
được thêm vào các ứng dụng Windows Forms rất dễ dàng.
Để thêm một menu vào một Form, đơn giản thêm điều khiển MenuStrip từ
thanh công cụ vào Form và thiết lập thuộc tính Items cho danh sách các mục menu.
Khi điều khiển MenuStrip được thêm vào Form nó sẽ xuất hiện trong vùng bên
dưới thiết kế Form. Khi biểu tượng này được chọn, menu chính sẽ xuất hiện trong
Form. Có thể chỉnh sửa các mục menu bằng cách gõ các mục menu khác nhau.
Xóa mục menu từ thanh menu bằng cách kích phải mục menu, chọn Delete. Sử
dụng thanh phân chia để chia các mục menu thành các nhóm bằng cách kích phải
trên mục menu, chọn Insert/ Separator.
Menu chính (MenuStrip) bao gồm danh sách các mục menu (đối tượng
ToolStripMenuItem). Có thể thêm, xóa các mục menu, sử dụng các phương thức
của ToolStripItemCollection Items.
- ToolStripItemCollection Items: thiết lập hay truy cập danh sách các mục
menu
Các thuộc tính thường dùng của mục menu ToolStripMenuItem:
- string Text: thiết lập hay truy cập văn bản hiển thị trên mục menu
- Image Image: thiết lập hay truy cập biểu tượng hình ảnh trước mỗi mục
menu
- string ToolTipText: thiết lập hay truy cập văn bản hiển thị khi rê mouse đến
mục menu
- bool AutoToolTip: thiết lập hay truy cập giá trị chỉ rõ mơ tả ngắn có hiển thị
65


hay không khi rê mouse đến mục menu
this.toolStripMenuItem1.AutoToolTip = true;
- ToolStripItemDisplayStyle DisplayStyle: thiết lập hay truy cập dạng hiển thị
mục menu dạng văn bản hay hình ảnh bởi các giá trị thuộc enumeration

ToolStripItemDisplayStyle là Image, ImageAndText, None hay Text:
this.toolStripMenuItem1.DisplayStyle=
ToolStripItemDisplayStyle.ImageAndText;
- TextImageRelation TextImageRelation: thiết lập hay truy cập mối quan hệ
vị trí văn bản và hình ảnh trên mục menu, bởi các giá trị thuộc enumeration
TextImageRelation
- bool Checked: thiết lập hay truy cập giá trị xác định có hay khơng xuất hiện
biểu tượng đánh dấu trước văn bản trên mục menu cho biết mục menu đang được
chọn hay thôi chọn
- CheckState CheckState: thiết lập hay truy cập giá trị chỉ rõ trạng thái của
mục menu bởi các giá trị thuộc enumeration CheckState là Checked, Unchecked,
Indeterminate
- LayoutStyle: thiết lập hay truy cập hướng trình bày của StatusStrip bởi các
giá trị thuộc enumeration ToolStripLayoutStyle

Hình 4.5: Form với MenuStrip và ToolStrip
2/Menu ngữ cảnh (Context Menu)
Các ứng dụng Windows cho phép người dùng kích phải trên điều khiển nào
đó sẽ xuất hiện một menu theo ngữ cảnh. Các menu theo ngữ cảnh có thể được
thêm vào các ứng dụng Windows Forms rất dễ dàng.
Để thêm một menu ngữ cảnh vào một Form, đơn giản thêm điều khiển
ContextMenuStrip từ thanh công cụ vào Form. Khi điều khiển ContextMenuStrip
được thêm vào Form nó sẽ xuất hiện trong vùng footer bên dưới bề mặt thiết kế
Form. Khi biểu tượng này được chọn, menu chính, nếu nó tồn tại sẽ không xuất
66


hiện trong Form và được thay thế với chính menu ngữ cảnh đó. Có thể chỉnh sửa
menu ngữ cảnh bằng cách gõ các mục menu khác nhau, như là sửa các menu
chính.

Bổ sung điều khiển ContextMenuStrip vào Form. Có hai cách hiển thị Menu
ngữ cảnh khi kích phải trên điều khiển:
- Thiết lập thuộc tính ContextMenuStrip của điều khiển là tên đối tượng
ContextMenuStrip
- Hoặc viết phương thức đáp ứng sự kiện kích phải mouse trên điều khiển,
sẽ hiển thị menu ngữ cảnh tại vị trí kích phải mouse (cột x, dịng y)
Ví dụ: Hiển thị menu ngữ cảnh khi kích phải mouse trên Form
private void Form1_MouseClick(object sender, MouseEventArgs e) {
if

(e.Button

==

MouseButtons.Right)contextMenuStrip1.Show(this,

e.X,

e.Y);
}

IX/Ứng dụng SDI, MDI
Mặc định, ứng dụng Windows là ứng dụng SDI (Single Document
Interface), sử dụng giao diện một tài liệu. Trong ứng dụng SDI, có thể làm việc với
chỉ một cửa sổ trong một thời điểm. Microsoft WordPad là ví dụ của ứng dụng
SDI. Microsoft Word là ví dụ của ứng dụng MDI (Multi-Document Interface).
Ứng dụng MDI bao gồm hai phần, Form cha và Form con. Ứng dụng MDI có thể
có nhiều Form cha và mỗi Form cha có nhiều Form con. Form con hiển thị trong
một cửa sổ độc lập trong cửa sổ Form cha.
Một Form cha có thể tạo lúc thiết kế bằng cách thiết lập thuộc tính

IsMdiContainer của Form là true.
Ví dụ: Trong ứng dụng MDI, khi chọn mục menu Tìm nhân viên theo tên,
FormTimTen sẽ hiển thị như một Form con
private void timTenToolStripMenuItem _Click(object sender, EventArgs e) {
FormTimTen f = new FormTimTen();
f.MdiParent = this; f.Show();
}

Thuộc tính ActiveMdiChild để truy cập đối tượng Form con đang hoạt động
hay vừa nhận focus
Form activeChildForm = this.ActiveMdiChild;
Phương thức LayoutMdi() của lớp Form truyền vào tham đối là các hằng
thuộc enumeration MdiLayout, để sắp xếp các Form con trong Form cha theo
67


chiều dọc (TileVertical), ngang (TileHorizontal), dạng biểu tượng (ArrangeIcons)
hay xếp lớp (Cascade)
this.LayoutMdi(MdiLayout.TileVertical);
Để ứng dụng MDI có thể hiển thị tên của tất cả cửa sổ con đã mở trên một
menu con với thuộc tính Name là windowToolStripMenuItem, thiết lập giá trị cho
thuộc tính MdiWindowListItem của MenuStrip là tên menu con:
menuStrip1.MdiWindowListItem = windowToolStripMenuItem
Menu con hiển thị tên các cửa sổ đã mở, thường thiết lập Text là “Window”:
windowToolStripMenuItem.Text = "Window";
Viết mã cho phương thức đáp ứng sự kiện chọn các mục trong menu
Window

Hình 4.6: Menu Window
private void tileVerticalToolStripMenuItem_Click(object sender, EventArgs e) {

this.LayoutMdi(MdiLayout.TileVertical);
}
private void tileHorizontalToolStripMenuItem_Click(object sender, EventArgs e) {
this.LayoutMdi(MdiLayout.TileHorizontal);
}
private void cascadeToolStripMenuItem_Click(object sender, EventArgs e) {
this.LayoutMdi(MdiLayout.Cascade);
}
private void arrangeIconsToolStripMenuItem_Click(object sender, EventArgs e) {
this.LayoutMdi(MdiLayout.ArrangeIcons);
}
private void newWindowToolStripMenuItem_Click(object sender, EventArgs e) {
Form f = new Form();
f.MdiParent = this;
f.Text = "Child Form";
f.Show();
}
private void closeAllToolStripMenuItem_Click(object sender, EventArgs e) {
foreach (Form childForm in this.MdiChildren)

68


childForm.Close();
}

X/ Bài tập
Bài 1: Thiết kế form như sau:

Yêu cầu:

+ Thực hiện hiện các phép toán cộng, trừ, nhân, chia, bắt các sự kiện chỉ cho
nhập sô không cho nhập chữ, bắt sự kiện chia cho 0, nếu có lỗi để thông báo tại ô
kết quả là lỗi phép chia cho 0.
Bài 2: Thiết kế Form theo mẫu

69


Yêu cầu:
+ Nhập tên bánh và nước
+ Nhấn nút bánh hiển thị tên bánh tren label, tương tự nút nước, bánh và
nước, nút thốt đóng form lại
Bài 3: Thiết kế form theo mẫu

Yêu cầu:
+ Nhập tên người dùng và cho người dùng chọn các dịch vụ như cạo vôi, tẩy
trắng, chụp hình răng, trám răng mỗi cái 80.000, nhấn nút tính tiền sẽ cho ra tổng
tiền (total)
+ Nút thốt đóng form
Bài 4: Thiết kế form như sau:

70


Yêu cầu: Dùng textbox và button để thiết kế form tên café.
+ Khi khách hàng gọi nước uống, nhân viên sẽ ghi số lượng và đơn giá vào,
nếu mua về thì cơng thêm 5%. Nhân viên nhấn nút tính tiền sẽ hiển thị số tiền ra
textbox thành tiền.
+ Nhấn nút làm mới sẽ xố hết tất cả các thơng tin trong textbox, nhân viên
tính lại hố đơn mới giống như ban đầu.

+ Nhấn nút thống kê cho ta biết tất cả đã bán được bao nhiêu, bao gồm tổng
số lượng ly, tổng tiền của tất cả các ly, tính trung bình cho lần bán. Sau khi nhấn
nút thống kê, nút này sẽ ẩn đi, khi nhân viên nhấn vào nút bàn mới và tính tiền thì
nút thống kê được hiện trở lại, và tiếp tục thống kê tiếp. (Form hiển thị lên ban đầu
nút thống kê ẩn, khi click vào nút tính tiền nút thống kê hiện lên)
+ Bắt các sự kiện không cho nhập chữ cho các textbox trên.
+ Con trỏ ln ở vị trí textbox đầu tiên, khi người dùng nhấn nút tab sẽ đi đến các
textbox kế tiếp theo thứ tự

71


×