ComboBox được dùng để
hiển thị một danh sách, mỗi lần người
dùng chỉ có thể chọn một lựa chọn, có thể nhập mới.

Hình 2.36.
Ví dụ sử dụng ComboBox
Một số thao tác với ComboBox:
·
Add(): Thêm một mục chọn vào cuối
danh sách ListBox.
·
Insert(): Chèn thêm mục
chọn vào vị trí i.
·
Count: Trả về số muc chọn hiện đang có.
·
Item(): Trả về mục chọn ở vị trí thứ i.
·
Remove(): Bỏ mục chọn.
·
RemoveAt(): Bỏ mục chọn ở vị trí thứ i.
·
Contains(): Trả về True nếu có mục chọn trong danh sách, trả vể False nếu
không có mục chọn trong danh sách.
·
Clear: Xóa tất cả các mục chọn.
·
IndexOf(): Trả về vị trí mục chọn trong danh sách, nếu không tìm thấy sẽ trả về -1.
Bảng 2.9. Một số thuộc tính thường
dùng
Thuộc tính
|
Mô tả
|
Text
|
Trả về nội
dung dòng dữ liệu đang hiển thị trên ComboBox
|
DropDownStyle
|
Quy định
định dạng của ComboBox, nhận một tring các
giá trị:
- Simple: hiển
thị theo dạng ListBox + TextBox có thể chọn dữ liệu
từ ListBox hoặc nhập mới vào TextBox
- DropDownList: Chỉ
cho phép chọn dữ liệu trong ComboBox
- DropDown: Giá trị
mặc định, có thể chọn hoặc nhập mới
mục dữ liệu vào ComboBox
|
Items
|
Trả về
các mục chứa trong ComboBox
|
DropDownHeight
|
Thiết lập
chiều cao tối đa khi sổ xuống của ComboBox
|
DropDownWidth
|
Thiết lập
độ rộng của mục chọn trong ComboBox
|
SelectedIndex
|
Lấu chỉ số
mục được chọn, chỉ số mục
đầu tiên là 0
|
SelectedItem
|
Trả về mục
được chọn
|
SelectedText
|
Lấy chuỗi
hiển thị của mục chọn trên ComboBox
|
DataSource
|
Chọn tập
dữ liệu điền vào ComboBox. Tập dữ liệu
có thể là mảng, chuỗi, ArrayList,...
|
DisplayMember
|
Gán dữ liệu
thành viên sẽ hiển thị trên ComboBox
|
ValueMember
|
Thuộc tính này
chỉ định dữ liệu thành viên sẽ cung cấp
giá trị cho ComboBox
|
SelectedValue
|
Trả về
giá trị của mục chọn (ValueMember) nếu ComboBox
có liên kết dữ liệu. Nếu không liên kết dữ
liệu hoặc ValueMember không được thiết lập
thì giá trị SelectedValue là giá trị chuỗi của thuộc
tính SelectedItem
|
Trong ComboBox có một sự kiện là SelectedIndexChanged, sự kiện này xảy ra khi thay đổi mục chọn trong ComboBox.
ListBox được dùng để hiển thị một danh sách các lựa chọn,
người dùng có thể chọn một hoặc nhiều lựa chọn cùng lúc.

Hình 2.37.
Ví dụ sử dụng ListBox
Một số thao tác với ListBox:
·
Add(): Thêm một mục chọn vào cuối
danh sách ListBox.
·
Insert(): Chèn thêm mục
vào vào vị trí i.
·
Count: Trả về số mục chọn hiện đang có.
·
Item(): Trả về mục chọn ở vị trí i.
·
Remove(): Bỏ mục chọn.
·
RemoveAt(): Bỏ mục chọn tại vị trí i.
·
Contains(): Trả về True nếu có mục chọn trong danh sách và trả về False nếu
không có mục chọn trong danh sách.
·
Clear: Xóa tất cả các mục chọn.
·
IndexOf(): Trả về vị trí mục chọn trong danh sách, nếu không tìm thấy sẽ trả về -1.
Bảng 2.10. Một số thuộc tính của ListBox thường
dùng
Thuộc tính
|
Mô tả
|
DataSource
|
Chọn tập dữ liệu điền vào
ListBox. Tập dữ liệu có thể là mảng, chuỗi,
ArrayList,...
|
DisplayMember
|
Dữ liệu thành viên sẽ được hiển
thị trên ListBox
|
ValueMember
|
Thuộc tính này chỉ định dẽ liệu
thành viên sẽ cung cấp giá trị cho ListBox
|
SelectedValue
|
Trả về giá trị của mục chọn nếu
ListBox có liên kết dữ liệu. Nếu không liên kết
với dữ liệu hoặc thuộc tính ValueMember không
được thiết lập thì giá trị thuộc tính
SelectedValue là giá trị chuỗi của thuộc tính
SelectedItem
|
Items
|
Các mục chứa trong ListBox
|
SelectedItem
|
Trả về mục được chọn
|
SelectedIndex
|
Lấy chỉ số mục được chọn,
chỉ số mục chọn đầu tiên là 0
|
SelectionMode
|
Cho phép chọn một hoặc nhiều dòng dữ
liệu trên ListBox, bao gồm:
- One: Chỉ chọn một giá trị
- MultiSimple: Cho phép chọn nhiều, chọn bằng cách
Click vào mục chọn, bỏ chọn bằng cách Click vào
mục đã chọn
- MultiExtended: Chọn nhiều bằng cách nhấn kết hợp
với Shift hoặc Ctrl
|
SelectedItems
|
Được sử dụng khi SelectionMode là
MultiSimple hoặc MultiExtended. Thộc tính SelectedItems chứa
các chỉ số của các dòng dữ liệu được
chọn
|
SelectedItems
|
Được sử dụng khi SelectionMode là MultiSimple
hoặc MultiExtended. Thuộc tính SelectedItems chứa các chỉ
số của các dòng dữ liệu được chọn
|
Trong ListBox có một sự kiện được sử dụng rất nhiều đó chính là SelectedIndexChanged, sự kiện này xảy ra
khi thay đổi mục chọn trong ListBox.
Trong phần này sẽ thực hiện tạo hai ứng dụng sử dụng ComboBox và ListBox, các bạn chú ý thẽo
dõi nhé.
Ví dụ thực hiện tạo giao diện cho Form như mẫu dưới
đây, sau đó viết
các sự kiện cho các điều khiển Button.

Hình 2.38.
Thiết kế giao diện sử dụng ListBox
Yêu cầu:
·
Nhấn vào Button "Nhập
thông tin" thì nội dung trong ô TextBox "Họ tên" sẽ
được thêm vào
ListBox.
·
Nhấn vào Button "Xóa thông tin
đang chọn" sẽ xóa
nội dung họ tên đang chọn trong ListBox.
·
Nhấn vào Button "Xóa thông tin
đầu" sẽ xóa
nội dung họ tên đầu tiên trong ListBox.
·
Nhấn vào Button "Xóa thông tin cuối" sẽ xóa
nội dung họ tên cuối cùng trong ListBox.
·
Nhấn vào Button "Xóa tất
cả
thông tin" sẽ xóa toàn bộ nội dung có bên trong ListBox.
·
Mỗi khi thêm hoặc
xóa thông tin người
khai báo trong ListBox, "Tổng
số
người
đã khai báo" sẽ được cập nhật lại.
Các bước thực hiện:
Bước 1: Thực hiện tạo giao diện cho Form giống
như mẫu, bao gồm:
·
2 ô TextBox để nhập và hiển thị thông tin.
·
5 Button với 5 sự kiện
tương ứng.
·
1 ListBox để hiển thị các khai
báo.
Bước 2: Xử lý sự kiện trên Button "Nhập thông tin".
Để xử lý cho
Button này, ta sẽ Click
Double vào Button để
sang cửa sổ xử lý sự kiện. Ta sẽ lần lượt xử lý sự kiện theo yêu cầu của đề bài:
·
Sử dụng String.IsNullOrEmpty()
để
đặt điều kiện cho ô TextBox không được để trống, nếu TextBox trống
thì hiển thị hộp thoại cho
người dùng biết.
·
Sử dụng Items.Add()
để
thêm nội dung từ ô TextBox vào ListBox
·
Sử dụng Items.Count
để đếm tổng số phần tử có trong ListBox và đưa nó vào ô TextBox hiển thị.
·
Sử dụng Clear()
để
xóa hết các thông tin
trong ô TextBox nhập sau
khi đã thêm vào ListBox.
private
void
btn_nhap_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(txt_nhap.Text))
{
lstBox_hienthi.Items.Add(txt_nhap.Text);
txt_hienthi.Text
= lstBox_hienthi.Items.Count.ToString();
txt_nhap.Clear();
txt_nhap.Focus();
}
else
MessageBox.Show("Vui
lòng điền đầy đủ thông tin !!!");
}
|
Bước 3: Xử lý sự kiện trên Button "Xóa thông tin đang chọn".
Trong Button này, ta cần xét điều kiện nếu trong ListBox đã tồn tại phần tử thì khi đó chúng ta mới thực hiện xóa. Ta
sẽ xử dụng Items.Remove tại vị
trí SelectedItems[0] để xóa phần tử đang được chọn.
Sau khi xóa xong ta cần cập nhật lại tổng số phần tử ở trong ô TextBox hiển thị.
private
void
btn_xoadangchon_Click(object sender, EventArgs e)
{
int a =
Convert.ToInt32(txt_hienthi.Text);
if(lstBox_hienthi.SelectedItems.Count
!= 0)
{
lstBox_hienthi.Items.Remove(lstBox_hienthi.SelectedItems[0]);
}
txt_hienthi.Text
= (a - 1).ToString();
}
|
Bước 4: Xử lý sự kiện trên Button "Xóa thông tin đầu" và trên Button "Xóa thông tin cuối".
Về cơ bản ở hai Button này việc xử lý sự kiện khá giống nhau, đều sử dụng Items.RemoveAt() để thực hiện xóa
đầu và xóa cuối.
private
void
btn_xoadau_Click(object sender, EventArgs e)
{
int a =
Convert.ToInt32(txt_hienthi.Text);
lstBox_hienthi.Items.RemoveAt(0);
txt_hienthi.Text
= (a - 1).ToString();
}
|
private
void
btn_xoacuoi_Click(object sender, EventArgs e)
{
int a =
Convert.ToInt32(txt_hienthi.Text);
lstBox_hienthi.Items.RemoveAt(lstBox_hienthi.Items.Count
- 1);
txt_hienthi.Text
= (a - 1).ToString();
}
|
Bước 5: Xử lý sự kiện trên Button "Xóa tất cả thông tin".
Trong Button này khá đơn giản, ta sử dụng Items.Clear() để xóa toàn bộ phần tử trong ListBox, sau đó cập nhật lại ô
TextBox hiển thị là "0".
private
void
btn_xoatatca_Click(object sender, EventArgs e)
{
lstBox_hienthi.Items.Clear();
txt_hienthi.Text
= "0";
}
|
Kết quả: Sau khi thực hiện xử lý các sự kiện, các bạn có
thể kiểm tra nó, dưới đây sẽ Demo Button "Nhập thông tin", còn các Button khác các bạn có thể tự kiểm tra nhé.

Hình 2.39.
Kết quả minh họa sử dụng ListBox
Ví dụ viết một ứng dụng sử dụng ComboBox với giao diện như mẫu dưới
đây, kèm theo các sự
kiện.

Hình 2.40.
Thiết kế giao diện sử dụng ComboBox
Yêu cầu:
·
Xây dựng ứng dụng với giao diện
như trên gồm
ComboBox chứa danh sách 4
màu (Yellow, Red, Blue, Black) và một Label
hiển thị dòng chữ "Chào mừng
bạn
đến
với
ComboBox".
·
Khi chọn màu trong ComboBox và nhấn vào nút Button "Đổi
màu" thì màu của dòng chữ và
màu nền của Label sẽ thay đổi
tương ứng.
·
Nhấn vào nút Button "Thoát" xác nhận
người dùng muốn đóng Form hiện hành. Nếu chọn YES thì kết thúc
chương trình thực thi, nếu chọn NO thì hủy bỏ lệnh kết thúc.
Các bước thực hiện:
Bước 1: Xây dựng giao diện
Form như mẫu, bao gồm:
·
2 Label để hiển thị dòng chữ.
·
1 ComboBox với 4 Items là 4 màu (Yellow,
Red, Blue, Black).
·
2 Button với hai sự kiện là
đổi màu và thoát.
Bước 2: Viết sự kiện cho Button "Đổi màu".
Trong Button này, ta chỉ cần sử dụng .Text để kiểm tra, nếu màu
đang chọn là Yellow
thì đổi ForeColor thành Yellow,
tương tự
như vậy cho 3 màu
còn lại.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
private
void
btn_doimau_Click(object sender, EventArgs e)
{
if(cbo_color.Text
== "Yellow")
{
lb_doimau.BackColor
= Color.Red;
lb_doimau.ForeColor
= Color.Yellow;
}
if (cbo_color.Text ==
"Red")
{
lb_doimau.BackColor
= Color.Yellow;
lb_doimau.ForeColor
= Color.Red;
}
if (cbo_color.Text ==
"Blue")
{
lb_doimau.BackColor
= Color.Yellow;
lb_doimau.ForeColor
= Color.Blue;
}
if (cbo_color.Text ==
"Black")
{
lb_doimau.BackColor
= Color.White;
lb_doimau.ForeColor
= Color.Black;
}
}
|
Bước 3: Viết sự kiện cho Button "Thoát".
Ở các bài
trước đã có nói
về sự kiện trong Button "Thoát", đơn giản ta chỉ cần sử dụng MessageBox.Show() kết hợp với Application.Exit() để tạo hộp thoại hỏi người
dùng có muốn thoát hay
không.
1
2
3
4
5
6
7
8
|
private
void
btn_thoat_Click(object sender, EventArgs e)
{
DialogResult
dg = MessageBox.Show("Bạn muốn đóng chương
trình", "Thông báo", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if(dg
== DialogResult.Yes)
{
Application.Exit();
}
}
|
Luyện tập thành thạo ComboBox và ListBox đây là hai trong số các điều khiển thông thường trong winforms và được sử dụng nhiều.