Mục tiêu của giáo trình nhằm giúp các bạn có thể tạo các ứng dụng trên nền Windows; Tạo được các ứng dụng cơ sở dữ liệu trên nền Windows; Lập trình và sử dụng được các đối tượng của .NET; Tạo được ứng dụng cơ sở dữ liệu với các báo cáo bằng CrystalReport. Mời các bạn cùng tham khảo nội dung phần 2 sau đây!
Trang 1Bà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
string Text 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;
Trang 2bool 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 http://www.google.com/";
linkLabel1.LinkArea = new LinkArea(4, 26);
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
Trang 34/ 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
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
void Clear(), Undo()
void Select(int start, int length)
void SelectAll(), DeselectAll()
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
Trang 4CharacterCasing 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
bool UseSystemPasswordChar
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 = „*‟;
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;
Trang 5private void rbred_CheckedChanged(object sender, EventArgs e) {
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
Trang 6hộ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 + " ";
- 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:
Trang 7- 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
Trang 8FullRowSelect 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
Trang 9List: 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:
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
Trang 10Đặt thuộc tính cho ListView1
Trang 11CheckBoxes 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 toà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
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
Trang 12PrevNode 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
Trang 13lớ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
Trang 14 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
Trang 15- 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 thoát không?", "Thoá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
Trang 16ColorDialog, 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
Trang 17Nú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) {
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:
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ề
Trang 18CreatePrompt 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:
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
Trang 19RestoreDirectory 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
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ị
Trang 20hay 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
Trang 21hiệ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
Trang 22chiề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:
private void newWindowToolStripMenuItem_Click(object sender, EventArgs e) {
Form f = new Form();
Trang 23Bài 2: Thiết kế Form theo mẫu
Trang 24+ Nút thoát đóng form
Bài 4: Thiết kế form như sau:
Trang 25Yê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ẽ xoá hết tất cả các thông tin trong textbox, nhân viên tính lại hoá đơ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ỏ luôn ở 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ự
Trang 26+ Nhấn vào nút close đưa ra một thông báo bạn muốn thoát phải không? Như hình bên dưới
Bài 5: Thiết kế form thuê sách
Trang 27Yêu cầu: Dùng textbox và button để thiết kế form tên thuê sách
+ Khi khách hàng đến thuê sách, nhân viên sẽ ghi số lượng và đơn giá vào, nếu trả đúng hạn thì giảm 3% 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, đồng thời nút xem thống kê hiện lên, các textbox mã khách hàng, tên khách hàng ẩn đi
+ Nhấn nút khách hàng mới sẽ xoá hết tất cả các thông tin trong textbox, nhân viên tính lại hoá đơn mới giống như ban đầu
+ Nhấn nút thống kê cho ta biết tất cả đã thuê được bao nhiêu, bao gồm tổng
số sách đã thuê tổng tiền sách thuê, tính trung bình cho lần thuê 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 khách hàng 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
Trang 28+ Con trỏ luôn ở 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ự
+ Nhấn vào nút close đưa ra một thông báo bạn muốn thoát phải không? Như hình bên dưới
Bài 6: Thiết kế form như sau
,
Yêu cầu:
+ Khi người dùng chọn combobox sẽ hiển thị ra hai loại để chọn lựa đó là : Honda và Ford Tương ứng với Ford có thông tin lần lượt là es0025, 30kmpl, 250 kmpl, Honda có thông tin lần lượt là sd423, 30kmpl, 210 kmpl
Picture box
Sự kiện SelectedIndexChanged
Trang 29Bài 5: Truy cập và xử lý cơ sở dữ liệu
Giới thiệu
Visual Studio NET cung cấp các dịch vụ truy cập cơ sở dữ liệu thông qua tập hợp các công cụ và các không gian tên được gọi chung là Microsoft ADO.NET (ActiveX Data Object for NET)
Bài này trình bày về các kiến thức truy cập cơ sở dữ liệu bởi công nghệ ADO.NET theo mô hình kết nối và phi kết nối, làm thế nào để xây dựng các ứng dụng Windows Form truy cập cơ sở dữ liệu từ các hệ quản trị cơ sở dữ liệu khác nhau, thông dụng là Microsoft Access, SQL Server
Mục tiêu:
Nhằm trang bị cho người học:
- Kiến thức về ADO.NET
- Kiến thức và kỹ năng sử dụng các đối tượng kết nối cơ sở dữ liệu
- Kiến thức và kỹ năng kết nối dữ liệu lên đối tượng
- Kiến thức và kỹ năng về việc sử dụng các câu lệnh SQL cũng như các thủ tục của SQL để thao tác dữ liệu
Nội dung:
I/Tổng quan về ADO.NET
1/Giới thiệu chung
Visual Studio NET cung cấp các dịch vụ truy cập cơ sở dữ liệu thông qua tập hợp các công cụ và các không gian tên được gọi chung là Microsoft ADO.NET
ADO.NET là một phần của NET Framework, được thiết kế nhằm tăng tốc
độ truy cập và thao tác trong môi trường đa lớp (Multi-tier)
ADO.NET cung cấp truy cập đồng nhất đến nguồn dữ liệu như Microsoft SQL Server, Oracle, MySQL, DB2 cũng như các nguồn dữ liệu OLE DB và XML Ứng dụng chia sẻ dữ liệu có thể sử dụng ADO.NET kết nối với các nguồn dữ liệu này để đọc, xử lý và cập nhật dữ liệu
ADO.NET hỗ trợ thao tác dữ liệu dựa trên mô hình phi kết nối, nghĩa là chúng ta có thể đọc dữ liệu từ cơ sở dữ liệu, sau đó ngắt kết nối cơ sở dữ liệu rồi mới thực hiện các thao tác cần thiết, mà không cần phải duy trì kết nối trong quá trình thao tác dữ liệu
Trang 30 Trình cung cấp dữ liệu (Data provider)
Data provider được sử dụng để kết nối cơ sở dữ liệu, đọc dữ liệu, lưu trữ dữ liệu vào data set, và cập nhật dữ liệu Chọn data provider nào cho ứng dụng phụ thuộc vào kiểu dữ liệu nguồn cần truy cập
.NET framework cung cấp các kiểu data provider chuẩn như sau:
- NET framework data provider for SQL Server: làm việc với cơ sở dữ liệu Microsoft SQL Server, được cài đặt trong không gian tên System.Data.SqlClient
- NET framework data provider for OLE DB: làm việc với các cơ sở dữ liệu OLE DB, được cài đặt trong không gian tên System.Data.OleDb .NET framework data provider for OLE DB làm việc với các trình cung cấp dữ liệu Microsoft Jet OLE DB provider, NET framework OLE DB provider for SQL Server, NET framework OLE DB provider for Oracle…
- NET framework data provider for ODBC: làm việc với tất cả loại cơ sở dữ liệu đã đăng ký với trình quản lý ODBC Driver Manager, và được cài đặt trong không gian tên System.Data.Odbc
- NET framework data provider for Oracle: làm việc với cơ sở dữ liệu Oracle, được cài đặt trong không gian tên System.Data.OracleClient
Cũng như NET framework data provider for ODBC, NET framework data provider for OLE DB cho phép truy cập đến nhiều loại cơ sở dữ liệu khác nhau
Trang 31như Microsoft Access, MySQL, SQL Server, DB2, Oracle Tuy nhiên, các trình cung cấp dữ liệu này không được khuyến khích để truy cập vào các loại cơ sở dữ liệu ngoại trừ Microsoft Access Các trình cung cấp dữ liệu truy cập trực tiếp từng loại cơ sở dữ liệu nhanh hơn và có nhiều tính năng phong phú hơn, chẳng hạn như NET framework data provider for Oracle, SQL Server, MySQL, DB2…
Data provider bao gồm bốn thành phần chính: đối tượng kết nối cơ sở dữ liệu connection và đối tượng command thực hiện truy vấn dữ liệu hay thao tác dữ liệu từ cơ sở dữ liệu, data reader là bộ đọc dữ liệu và data adapter là bộ điều phối
dữ liệu
- Connection: thành phần này sử dụng để thiết lập kết nối với cơ sở dữ liệu
Tùy nguồn dữ liệu, có các đối tượng connection khác nhau như SqlConnection, OleDbConnection, OdbcConnection, OracleConnection, MySqlConnection và DB2Connection
- Command: thành phần này sử dụng để đọc, chèn, xóa và chỉnh sửa dữ liệu
trong nguồn dữ liệu bằng cách thực hiện các câu lệnh SQL, thủ tục lưu trữ (stored procedure) sau khi đã thiết lập kết nối tới dữ liệu Tương tự như connection, đối tượng command cũng có các dạng tuỳ theo nguồn dữ liệu như SqlCommand, OleDbCommand, OdbcCommand, OracleCommand, MySqlCommand và DB2Command
- Data reader: cung cấp một luồng dữ liệu để nhận dữ liệu từ nguồn dữ liệu
ở dạng chỉ đọc (read-only mode) và dữ liệu chỉ được đọc theo một chiều (forward-only mode) Data reader chứa tập các bản ghi truy vấn từ một hay nhiều bảng trong cơ sở dữ liệu Cũng tùy nguồn dữ liệu, có các dạng data reader khác nhau như OleDbDataReader, SqlDataReader, MySqlCommand Đối tượng command thực hiện phương thức ExecuteReader để đọc dữ liệu từ cơ sở dữ liệu và trả về đối tượng data reader Đối tượng data reader yêu cầu phải duy trì kết nối với cơ sở dữ liệu khi đang thao tác với đối tượng Vì vậy đối tượng này phù hợp với ứng dụng web vì xử lý nhanh, nhẹ, không chiếm bộ nhớ
- Data adapter: là đối tượng rất quan trọng của ADO.NET, nó là cầu nối
trung gian giữa nguồn dữ liệu và data set Thành phần này sử dụng để chuyển dữ liệu đến và từ cơ sở dữ liệu Data adapter đọc dữ liệu từ cơ sở dữ liệu vào một data set Cũng tùy nguồn dữ liệu, có các dạng data adapter khác nhau như SqlDataAdapter, OleDbDataAdapter
Trang 32Tầng data provider cung cấp mức trừu tượng giữa tầng cơ sở dữ liệu vật lý và data set mà bạn sẽ làm việc trong chương trình Sau khi tạo ra data set, bạn không quan tâm nguồn kết nối dữ liệu Kiến trúc này gọi là kiến trúc phi kết nối, bởi vì data set độc lập với dữ liệu nguồn
Data set
Data set là tập dữ liệu bộ nhớ của một hay nhiều bảng và mối quan hệ giữa chúng Để sử dụng data set, trước tiên bạn có thể kết nối nguồn dữ liệu rồi thực hiện truy vấn từ một hay nhiều bảng, sau đó yêu cầu hệ thống đóng kết nối Có thể duyệt, thao tác dữ liệu trong data set sau khi đã đóng kết nối Kết thúc thao tác trên data set, đối tượng này sẽ kết nối lại nguồn dữ liệu và thực hiện quá trình cập nhật vào nguồn dữ liệu Data set không cần biết cơ sở dữ liệu thuộc kiểu gì, kết nối ra sao Nhiệm vụ của data set là nhận dữ liệu từ data adapter và
xử lý nó Data set có thể được xem như 1 cơ sở dữ liệu trong bộ nhớ gồm tất cả các bảng và mối quan hệ
Việc sử dụng data set là một tiến bộ lớn của kiến trúc ADO.NET, bởi vì không cần phải duy trì kết nối cơ sở dữ liệu thường xuyên, tuy nhiên tốc độ xử lý hơi chậm hơn
Data set biểu diễn bởi lớp DataSet trong không gian tên System.Data Các thành phần cấp thấp hơn của lớp DataSet:
- DataTable: biểu diễn một bảng trong tập các bảng của data set
- DataTableCollection: chứa danh sách các bảng đọc từ nguồn dữ liệu
- DataRow: biểu diễn một hàng trong bảng
- DataRowCollection: chứa danh sách các hàng trong bảng
- DataColumn: biểu diễn một cột trong bảng
- DataColumnCollection: chứa danh sách các cột trong bảng
- DataRelation: biểu diễn một mối quan hệ giữa các bảng trong data set
- DataRelationCollection: chứa danh sách mối quan hệ giữa các bảng trong
data set
Data view
Data view được sử dụng để trình bày dữ liệu dưới nhiều góc nhìn khác nhau Bạn thường sử dụng data view để lọc hay sắp xếp dữ liệu Mỗi data set có một data view mặc định tương ứng với trật tự hàng trong data set
Trang 33ADO.NET cung cấp các lớp, thuộc tính và các phương thức từ các không gian tên trình bày trong bảng sau:
Bảng: Các Namespaces truy cập cơ sở dữ liệu của ADO.NET
System.Data Các lớp tạo và truy cập dữ liệu như DataSet,
DataTable, DataRelation System.Data.Common Các lớp dùng chung bởi các data provider khác nhau System.Data.SqlClient Các lớp truy cập cơ sở dữ liệu Microsoft SQL Server
như SQLConnection, SqlCommand System.Data.SqlTypes Các kiểu của SQL Server
System.Data.OleDb Các lớp truy cập các cơ sở dữ liệu như Microsoft
Access, MySQL như OleConnection, OleDbCommand
System.Xml Các lớp xử lý dữ liệu XML
System.Data.OracleClient Các lớp truy cập cơ sở dữ liệu Oracle (Microsoft
.NET Framework phiên bản 1.1 trở đi)
Ngoài ra truy cập cơ sở dữ liệu MySQL và DB2 bởi các không gian tên sau:
MySql.Data
MySql.Data.MySqlClient Các lớp truy cập cơ sở dữ liệu MySQL
Bạn cần Add References MySql.Data.dll IBM.Data.DB2 Các lớp truy cập cơ sở dữ liệu DB2
Khi làm việc với cơ sở dữ liệu, cần bổ sung khai báo using vào đầu mã nguồn trang cs