TÀI LIỆU THAM KHẢO
BÀI 4: WINDOWS FORM – CÁC ĐIỀU KHIỂN NỘI TẠI
4.2. Giới thiệu các điều khiển nội tại cơ bản
4.2.1. Những điểm căn bản của Windows Forms.
Trong các bài học và thí dụ trước đây ta đã nói qua, bây giờ ta tóm tắc những điểm căn bản của Windows Forms:
Một Windows Form thật sự là một class. Trong .NET không có từ đặc biệt như "form module" để dùng cho nó.
Tất cả mọi form đều thừa kế từ class System.Windows.Forms.Form.
Tất cả các đối tượng kiểu form đều phải được khai báo và khởi tạo tường minh nếu ta muốn sử dụng (load).
Giống như tất cả các classes trong .NET Framework, Windows Forms có các hàm tạo (constructors) và hủy bỏ (destructors).
Các sự kiện (events) được xử lý bằng nhiều cách và rất linh động. Một sự kiện có thể được xử lý bởi nhiều điều khiển (control) cùng một lúc và mỗi điều khiển có một cách xử lý khác nhau. Ngược lại, nhiều sự kiện khác nhau
có thể được xử lý bằng một Event Handler duy nhất.
Điểu khiển (control): là các đối tượng nằm trong Form. Mỗi điều khiển có một tập các thuộc tính (property), phương thức (method), sự kiện (event) cho những mục đích riêng.
4.2.2. Làm việc với các điều khiển nội tại thường dùng.
4.2.2.1. Form
Form là đối tượng cửa sổ không thể thiếu trong môi trường Windows. Form được dùng để chứa các đối tượng khác như nút lệnh (Button), hộp nhập văn bản (TextBox),…
Phân loại:
Single Document Interface (SDI):
o Chỉ hỗ trợ một document hoặc một cửa sổ tại một thời điểm.
o Dạng ứng dụng như NotePad, MS Paint với các đặc tính xử lý ảnh và văn bản giới hạn.
o Để làm việc với nhiều tài liệu thì phải mở các instance khác của ứng dụng.
o Việc quản lý ứng dụng SDI khá đơn giản.
Multiple Document Interface (MDI)
o Ứng dụng cho phép xử lý nhiều document tại một thời điểm.
o Các ứng dụng hiện tại thường là dạng MDI: MS Office, MS Studio.NET, Adobe Photoshop, …
o Ứng dụng MDI thường phức tạp và chức năng xử lý đa dạng:
Xử lý cùng một dạng document: MS Word, Adobe Photoshop.
Xử lý nhiều dạng document :Visual Studio 6: code, design, image…
a) Thuộc tính (Properties).
Name: Tên của Form. Trong một Project tên của các Form phải khác nhau.
AcceptButton: Giá trị mà thuộc tính này nhận là tên của một Button trên
Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím Enter thì sự
kiện Click của Button mà bạn chọn được thực thi mà không cần nhấn chuột vào Button đó.
Autosize: Nhận một trong hai giá trị True hay False
- True: Không cho phép thay đổi kích thước Form mà che đi các điều khiển khác chứa trên Form.
- False: Ngược lại
AutoSizeMode: Cho phép thay đổi kích thước của Form hay không? (Khi di
chuyển chuột vào các mép của Form mà hiện nên biểu tượng ↔ là cho phép). Và nhận một trong hai giá trị:
- GrowOnly: Cho phép
- GrowAndShrink: Không cho phép
BackColor: Chọn màu nền cho Form
BackGroundImage: Chọn ảnh làm nền cho Form
CancelButton: Giá trị mà thuộc tính này nhận là tên của một Button trên
Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím ESC thì sự kiện Click của Button mà bạn chọn được thực thi mà không cần nhấn chuột vào Button đó (tương tự như thuộc tính AcceptButton ).
ControlBox: Nhận một trong hai giá trị True hay False
- True: Cho phép các các nút: MaximizeBox,
MinimizeBox, Close trên Titlebar xuất hiện.
- False: Không Cho phép các các nút: MaximizeBox, MinimizeBox, Close trên Titlebar xuất hiện (Khi đó các thuộc tính MaximizeBox, MinimizeBox của Form cũng mất đi).
Font: Chọn kiểu Font chữ cho Form (Khi đó tất cả các điều khiển
được thêm vào Form sẽ có thuộc tính Font giống như thuộc tính Font của Form).
ForeColor: Tương tự như thuộc tính Font nhưng áp dụng đối với màu
chữ.
FormBorderStyle: Chọn Style cho Form (Có 7 lựa chọn khác nhau).
KeyPreview: Nhận một trong hai giá trị True hay False
- True: Cho phép các sự kiện về bàn phím của Form (KeyUp, KeyDown, KeyPress… của Form) có hiệu lực.
- False: Ngược lại.
Opacity: Độ trong suốt của Form
b) Sự kiện (Events).
AutoSizeChanged: Xảy ra khi thuộc tính Autosize của Form chuyển từ True
→ False hay ngược lại là False → True.
Click: Xảy ra khi người dùng Click chuột vào vùng làm việc thuộc
Form.
ControlAdded: Xảy ra khi một điều khiển được Add vào Form.
ControlRemoved: Xảy ra khi một điều khiển bị xóa khỏi Form.
FormClosed: Xảy ra khi Form đã đóng (Nhấn vào nút X màu đỏ trên
Titlebar).
FormClosing: Xảy ra khi Form đang đóng (2 sự kiện FormClosed và
FormClosing thường dùng trong lập trình CSDL: khi xảy ra sự kiện này thì đóng kết nối CSDL).
KeyDown, KeyPress, KeyUp: Bấm, nhả phím.
Một số ví dụ minh họa
Sự kiện FormClosed
//Sự kiện FormClosed - Sự kiện này được gọi khi Form đã đóng
private void frmForm_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("Sự kiện FormClosed được gọi",
"FormClosed",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
Sự kiện FormClosing
//Sự kiện FormClosing xảy ra khi Form đang đóng (chưa hoàn toàn đóng)
private void frmForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Bạn có muốn đóng Form lại hay không?",
"FormClosing",
MessageBoxButtons.YesNo, MessageBoxIcon.Information) ==
DialogResult.Yes)
e.Cancel = false;// Đóng Form lại else
e.Cancel = true;//Không đóng Form nữa }
Sự kiện MouseClick
private void frmForm_MouseClick(object sender, MouseEventArgs e)
{ //Nếu bạn không muốn biết người dùng nhấn chuột TRÁI hay PHẢI hay GIỮA thì
khi nhấn bất kì nút chuột nào cũng xảy ra sự kiện MouseClick của Form.
if (e.Button == MouseButtons.Left)
MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột TRÁI"); else if (e.Button==MouseButtons.Middle)
MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột GIỮA"); else if (e.Button==MouseButtons.Right)
MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột PHẢI"); }
4.2.2.2. Label
Chức năng: Dùng để hiển thị các thông báo, lời nhắc trên form.
Phân loại:
Label dùng để hiển thị tiêu đề hay văn bản mang tính mô tả, mà người dùng không thể thay đổi.
Label dùng để định danh cho các điều khiển khác trên Form được gọi là Label mô tả.
Label dùng để hiển thị kết quả đầu ra được gọi là Label đầu ra.
Một số thuộc tính hay dùng của label:
AutoSize - Cho phép tự động thay đổi kích thước của Label để vừa với nội dung.
BoderStyle - Xac định hình dạng đường viền của Label.
Font - Tên font, kiểu và kích thước của văn bản được hiển thị trên Label.
Location – Vị trí của Label trên Form tương ứng với góc trên bên trái của Form.
Size - Chỉ ra chiều rộng và chiều cao của Label (bằng pixel).
Text - Văn bản được hiển thị trên Label.
TextAlign - Chỉ ra cách văn bản được căn chỉnh trong phạm vi Label.
4.2.2.3. Button
Khái niệm: Button là các nút lệnh được thiết kế trên Form, dùng để xác nhận thực thi một chức năng con (hành động của người dùng).
Một số thuộc tính hay dùng của button:
Location - Vị trí của Button trên Form so với góc trên cùng bên trái.
Name - Tên được sử dụng để xác định Button. Tên nên có tiền tố Button.
Size - Chiều rộng và chiều cao (bằng pixel) của Button.
Text - Văn bản được hiển thị trên Button.
Một số lưu ý:
Các Button thường đặt từ trên xuống dưới, bắt đầu từ góc trên bên phải của Form, hoặc được sắp xếp trên cùng một dòng bắt đầu từ góc dưới bên phải của Form.
Khi bạn kéo điều khiển, IDE sẽ hiển thị các dòng màu xanh nước biển và màu tím gọi là đường gióng giúp các điều khiển và văn bản trên điều khiển được gióng thẳng với nhau.
Các Button được gán nhãn bằng cách sử dụng thuộc tính Text của chúng. Các nhãn nay sử dụng kiểu viết hoa tiêu đề và càng ngắn càng tốt, nhưng vẫn
rõ nghĩa để người dùng có thể hiểu được.
4.2.2.4. TextBox
Điều khiển Textbox cho phép bạn nhập và hiển thị dữ liệu.
a) Thuộc tính (Properties).
AcceptsTab: Nhận một trong hai giá trị True hay False
- True: Khi nhấn phím Tab thì con trỏ (Focus) chỉ di chuyển bên trong Textbox (Với điều kiện thuộc tính Multiline=True).
- False: Khi nhấn Tab thì Focus di chuyển qua lại giữa các điều khiển trên Form. Thuộc tính này hay đặt bằng True trong các ứng dụng soạn thảo văn bản.
Anchor: Vị trí neo đậu của Textbox trên Form
MaxLenght: Số lượng kí tự lớn nhất cho phép nhập vào Textbox
Multiline: Nhận một trong hai giá trị True hay False.
- True: Cho phép nhập và hiển thị giá trị của Textbox trên nhiều dòng (người dùng có thể nhìn thấy toàn bộ giá trị Text của nó).
- False: Cho phép nhập/hiển thị giá trị của Textbox trên một dòng.
PasswordChar: Hiển thị giá trị của Textbox dưới dạng các kí tự mà bạn thay
thế (kí tự do người dùng nhập vào: *, #...).
ScrollBars: Cho phép hiển thị thanh trượt hay không? (Với điều kiện
thuộc tính Multiline=True mới nhìn thấy thanh cuộn).
CanUndo: Trả lại hai giá trị True/False.
- True: có thể Undo lại được (như Word).
- False: Ngược lại.
Các thuộc tính: SelectedText, SelectionStart, SelectionLength, …
b) Phương thức (Methods).
AppendText: Nối một chuỗi (string) vào giá trị Text hiện có
củaTextbox
Copy, Cut, Paste: Xử lý phần nội dung bôi đen (như Word).
Focus: Chuyển Focus (con trỏ) vào TextBox
Clear: Xóa toàn bộ nội dung trong Textbox
Undo: Xử lý Undo như Word.
c) Sự kiện (Events).
TextChanged: Xảy ra khi giá trị Text của Texbox (hay gọi giá trị
Textbox) thay đổi.
MouseClick: Xảy ra khi người dùng Click chuột trên điều khiển
Textbox.
KeyPress: Xảy ra khi người dùng nhấn phím trên bàn phím (tất nhiên
Textbox phải đang Focus – Áp dụng sự kiện này để xử lý không cho phép nhập chữ vào Textbox…).
Một số ví dụ minh họa
Giả sử có một Textbox có tên là textBox1. Chúng ta sẽ minh họa Textbox qua sự kiện click của một Button có tên là btTextbox.
Minh họa thuộc tính Text của Textbox
private void btTextbox_Click(object sender, EventArgs e)
{ //Trước khi gán thuộc tính text
MessageBox.Show("Giá trị textbox trước khi gán: "+ textBox1.Text);
//Gán giá trị Text
textBox1.Text = "Chào các bạn";
//Sau khi gán
MessageBox.Show("Giá trị textbox sau khi gán: " + textBox1.Text);
}
Minh họa thuộc tính SelectedText của Textbox
private void btTextbox_Click(object sender, EventArgs e)
{
//Thuộc tính SelectedText lấy ra một chuỗi mà bạn bôi đen (Chọn)
//Bạn hãy bôi đen một vài từ trong Textbox sau đó Click vào Button này sẽ hiển thị
//Message thông báo từ bạn chọn
string str = textBox1.SelectedText;
MessageBox.Show("Từ bạn vừa chọn (bôi đen) là: "+str);
}
4.2.2.5. ComboBox.
Chức năng: Lưu trữ các mục dữ liệu (phần tử) dưới dạng danh sách.
Chú ý: Các điều khiển có rất nhiều thuộc tính, sự kiện hay phương thức giống nhau: Anchor, Dock, Font, ForeColor, Enabled, Visible, TabIndex, Focus, Click,……Các thuộc tính này là giống nhau với tất cả các điều khiển.
a) Thuộc tính (Properties).
Anchor: Xác định vị trí “neo đậu” của điều khiển so với Form.
AutoCompleteMode: Kiểu tự động tìm kiếm các phần tử trong Combobox.
Có một số lựa chọn sau (đi cùng thuộc tính AutoCompleteSource=ListItems):
- Suggest: Hiển thị kết qủa ra bên dưới.
- Append: Tự động điền vào Combobox và không hiển thị ra bên dưới.
- SuggestAppend = Suggest + Append
Cursor : Hình dáng của chuột khi di chuyển vào Combobox.
Items: Quản lý các phần tử trong Combobox (thêm các phần tử vào
Combobox, xóa đi…).
Text: Giá trị ứng với phần tử đang được chọn.
Sorted: Nếu chọn là True: Tự động sắp xếp các phần tử trong Combobox
theo giá trị tăng dần.
SelectedIndex: Get/Set chỉ số của phần tử đang chọn.
DropDownStyle: Kiểu của ComboBox (Simple/DropDown/DropDownList) b) Phương thức (Methods).
Add: Thêm một phần tử vào Combobox.
AddRange: Thêm một mảng các phần tử vào Combobox.
c) Sự kiện (Events).
SelectedIndexChanged: Xảy ra khi người dùng chọn phần tử khác.
Một số ví dụ minh họa
- Minh họa thuộc tinh Sorted
private void btCombobox_Click(object sender, EventArgs e)
{
//Mới đầu xóa hết các phần tử trong Combobox (nếu có)
comboBox1.Items.Clear();
//Add một số phần tử vào: Dùng phương thức Add hay AddRange comboBox1.Items.Add("5");
string[] MangString = { "1","3","8","4","7" };
comboBox1.Items.AddRange(MangString); //Số thứ tự của các ptử là: 5,1,3,8,4,7
//Duyệt các phần tử của Combobox - Trước khi gọi thuộc tính Sorted
foreach (string str in comboBox1.Items)
MessageBox.Show(str);// Thứ tự in ra là : 5, 1,3,4,8,7 //Gọi thuộc tính Sorted.
comboBox1.Sorted=true;
//Duyệt các phần tử của Combobox - Saukhi gọi thuộc tính Sorted foreach (string str in comboBox1.Items) MessageBox.Show(str);// Thứ tự in ra là : 1,3,4,5,7,8
}
Lấy danh sách ổ đĩa vào Combobox
//Lấy danh sách các ổ đĩa vào Combobox: Minh họa cho phương thức
AddRange
private void btGetDriver_Click(object sender, EventArgs e)
{
//Để thao tác vơi File, Folder. Trong C# hỗ trợ lớp Directory
//Lớp Directory là lớp tĩnh và nằm trong NameSpace: System.IO;
//Muốn dùng lớp này phải khai báo: using System.IO;
//Kết quả Directory.GetLogicalDrives() trả về một mảng kiểu string string[] MangDriver = Directory.GetLogicalDrives();
comboBox1.Items.AddRange(MangDriver);
comboBox1.SelectedIndex = 0;
}
4.2.2.6. ListBox.
Listbox cho phép ta tạo ra một danh sách các
phần tử để lựa chọn. Nếu như số lượng các phần
tử lớn hơn số lượng mà danh sách có thể hiển thị
trên màn hình (do ta thiết kế danh sách có kích
thước cao hay ngắn) thì một thanh cuộn sẽ tự
động thêm vào trong danh sách để cho ta có thể
list qua hết các phần tử. Danh sách List trình bày tất cả (hay một phần các phần tử tuỳ theo số lượng phần tử và độ dài trong giao diện của List), ta có thể chọn ra một hay nhiều phần tử cùng một lúc từ danh sách để xử lý.
a) Các thuộc tính của Listbox:
Tên
Thuộc tính
Giá Trị Diễn giải
MultiColumn True False (mặc
định)
Cho phép hiển thị các item thành các cột thay
vì 1 cột như mặc định của nó
SelectionMode None Không có item nào được chọn. Dách sách chỉ
để hiển thị xem mà thôi One Chỉ có 1 item được phép chọn.
MultiSimple Có nhiều item được phép chọn cùng một lúc.
MultiExtended Giống như MultiSimple nhưng ta có thể dùng
phím như SHIFT, các phím mũi tên để chọn. Sorted True False Sắp xếp danh sách theo thứ tự aphabet
Items Collection… Một hộp hội thoại cho phép bạn nhập vào
danh sách các item.
b) Sự kiện:
Sự kiện quan trọng và hay sử dụng nhất của Listbox là SelectedIndexChange. Sự kiện này được phát sinh khi bạn click chuột vào 1 item khác hay bạn dùng phím mũi tên để di chuyển giữa các item.
Ví dụ: Thiết kế form có chứa 1 listBox (đặt tên listBox1) và 1 textBox (đặt tên textBox1). Khi form hiển thị listBox1 được nạp vào tên các môn học. Người dùng
di chuyển qua các mục (bằng phím mũi tên lên xuống hoặc bằng chuột) nào thì textBox1 sẽ hiển thị nội dung mục đang chọn trên listBox1. Mã lệnh chương trình như sau:
Sự kiện Form1_load:
private void Form1_Load(object sender, EventArgs e)
{ listBox1.Items.Add("Toán rời rạc");
listBox1.Items.Add("Lập trình hướng sự kiện");
listBox1.Items.Add("Lập trình Web");
listBox1.Items.Add("Lập trình đồ họa");
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{ textBox1.Text = listBox1.Items[listBox1.SelectedIndex].ToString(); }
Kết quả thực thi chương trình:
4.2.2.7. CheckListBox
CheckedListBox thừa kế từ ListBox nên sẽ có các thuộc tính và phương thức của ListBox.
CheckedListBox là một ListBox chứa các phần tử là CheckBox
Các thuộc tính:
CheckedIndices: Trả về một collection các chỉ số được đánh dấu trong CheckedListBox.
CheckedItems: Trả về một collection các phần tử được đánh dấu trong CheckedListBox.
CheckOnClick: Nếu bằng true thì các phần tử được đánh dấu khi nhận một nhấn đơn còn false thì phần tử sẽ được đánh dấu khi nhận một click đúp chuột.
Items: Trả về các một collection gồm các phần tử của CheckedListBox SelectedItem Lấy hoặc thiết lập phần tử vừa được chọn trong CheckedListBox.
SelectedItems: Lấy hoặc thiết lập các phần tử được chọn trong CheckedListBox.
4.2.2.8. CheckBox
Chức năng: Hiển thị danh sách mục rời rạc và cho phép người dùng lựa chọn một hoặc nhiều giá trị bằng cách đánh dấu tích ()
Ô đánh dấu (checkbox) tương tự như nút nhấn, chỉ khác là chúng dùng để biểu hiện trạng thái chuyển đổi giữa có/không (yes/no) hoặc tắt mở (on/off). Mỗi lần ta nhắp chuột vào ô chọn hay dùng nhấn phím space bar khi checkbox đang focus thì nó thay đổi trạng thái từ đựơc đánh dấu sang bỏ đánh dấu hoặc ngược lại.
a) Thuộc tính (Properties).
Tên Thuộc
tính
Giá Trị Diễn giải
CheckAlign TopLeft – TopCenter – TopRight Canh lề checkbox: trên bên trái
– giữa phải của khung checkbox
MiddleLeft – MiddleCenter – MiddleRight
(mặc định)
ở giữa – bên trái – bên phải của khung checkbox
BottomLeft – BottomCenter – BottomRight
bên dưới trái – giữa – phải của khung checkbox
RightToLeft Yes
No
Chữ nằm bên phải hay bên trái ô checkbox.
FlatStyle Flat checkbox sẽ bằng phẳng
Popup Giống Flat nhưng khi move
mouse lên trên nó thì giống standard và khi bỏ mouse ra thì
nó trở lại như cũ (Flat) Standard (mặc định) checkbox lõm xuống (3D)
System Giống standard nhưng sẽ thay
đổi theo hệ điều hành Checked True
False
Chọn checkbox (đánh dấu) hay không chọn checkbox.
CheckState checked checkbox đang được đán dấu
unchecked checkbox không được đánh dấu
indeterminate trạng thái này chỉ có tác dụng khi thuộc tính ThreeState = true
checkbox ở trạng thái không hoạt động