CƠ BẢN
SỰ KIỆN
NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

ComboBox - ListBox trong lập trình C# winforms

Trong hướng dẫn này mình sẽ giới thiệu các bạn một trong những điều khiển thông thường tiếp theo đó chính là ComboBox và ListBox.

ComboBox ListBox là hai điều khiển có nhiều điểm tương đồng, đều sử dụng để chứa dữ liệu cho phép người dùng lựa chọn.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Chúng ta sẽ cùng nhau tim hiểu về các khai niệm cũng như các sự kiện và thuộc tính của ComboBox và ListBox nhé.

1. ComboBox

ComboBox được dùng để hiển thị một danh sách những 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.

winforms bai5 02 PNG

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.

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.

2. ListBox

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.

winforms bai5 01 PNG

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.

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.

3. Ví dụ sử dụng các điều khiển ComboBox và ListBox

Trong phần này mình sẽ thực hiện tạo hai ứng dụng sử dụng ComboBox ListBox, các bạn chú ý thẽo dõi nhé.

Ví dụ sử dụng ListBox

Ở ví dụ này, mình sẽ 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.

winforms bai5 03 PNG

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 chon 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 mình 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é.

winforms bai5 04 PNG

Ví dụ sử dụng ComboBox

Ở ví dụ này mình sẽ 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.

winforms bai5 05 PNG

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 Freetuts.net".
  • 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.

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 mình đã 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.

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();
            }
        }

Kết quả:

winforms bai5 06 PNGwinforms bai5 07 PNG

4. Kết luận

Như vậy là chúng ta đã tìm hiểu xong về hai điều khiển thông thường trong winforms đó chính là ComboBox và ListBox. Đây cũng là hai điều khiển cuối cùng trong Series điều khiển thông thường. Ở các bài tiếp theo chúng ta sẽ cùng tìm hiểu về các điều khiển đặc biệt trong winforms, các bạn chú ý theo dõi nhé !!!

Cùng chuyên mục:

Cách dùng Stack (ngắn xếp) trong C#

Cách dùng Stack (ngắn xếp) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính và phương thức của Stack…

Cách dùng Queue (hàng đợi) trong C#

Cách dùng Queue (hàng đợi) trong C#

Mình sẽ giới thiệu về các đặc điểm, thuộc tính, phương thức của Queue, cũng…

Cách dùng Hashtable (bảng băm) trong C#

Cách dùng Hashtable (bảng băm) trong C#

Cụ thể sẽ tìm hiểu Hashtable là gì? các đặc điểm của nó, cùng với…

Sự kiện Enter và Leave trong C# Winforms

Sự kiện Enter và Leave trong C# Winforms

Trong bài viết này mình sẽ hướng dẫn các bạn cách ...

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Sự kiện KeyPress, KeyDown, KeyUp trong C# Winforms

Một câu hỏi được đặt ra là làm cách nào để có thể phát hiện…

Sắp xếp trộn trong C# (Merge Sort)

Sắp xếp trộn trong C# (Merge Sort)

Trong bài viết này mình sẽ hướng dẫn các bạn cách sắp xếp các ..

Sắp xếp nổi bọt trong C# (Bubble Sort)

Sắp xếp nổi bọt trong C# (Bubble Sort)

Trong bài viết này mình sẽ hướng dẫn các bạn cách sắp ...

Cách in ra hình tam giác ký tự * trong C#

Cách in ra hình tam giác ký tự * trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách ...

Cách tính tổng các số chẵn từ 1 đến N trong C#

Cách tính tổng các số chẵn từ 1 đến N trong C#

Trước khi đi vào viết chương trình, chúng ta cùng tìm hiểu qua số chẵn…

Cách tính tổng các số lẻ từ 1 đến N trong C#

Cách tính tổng các số lẻ từ 1 đến N trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tính tổng các lẻ…

Cách đếm số chữ số của một số nguyên trong C#

Cách đếm số chữ số của một số nguyên trong C#

Chúng ta cùng xem qua một số ví dụ để hiểu rõ hơn về chương…

Cách tính chu vi và diện tích hình tam giác trong C#

Cách tính chu vi và diện tích hình tam giác trong C#

Tam giác là một loại hình cơ bản trong hình học, có ba đỉnh là…

Cách tính chu vi và diện tích hình tròn trong C#

Cách tính chu vi và diện tích hình tròn trong C#

Trước khi đi vào viết chương trình tính chu vi và diện ..

Cách tính chu vi và diện tích hình chữ nhật trong C#

Cách tính chu vi và diện tích hình chữ nhật trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn ...

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Cách xóa phần tử trùng lặp khỏi mảng trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách loại bỏ các ..

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Cách tìm tất cả các chuỗi con của chuỗi đã cho trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách tìm ...

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Cách xóa các ký tự trùng lặp khỏi chuỗi trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách xóa các ký tự…

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Đếm số lần xuất hiện của ký tự trong chuỗi trong C#

Trong bài viết này minh sẽ hướng dẫn các bạn cách đếm ...

Cách chuyển đổi nhị phân sang thập phân trong C#

Cách chuyển đổi nhị phân sang thập phân trong C#

Trong bài viết này mình sẽ hướng dẫn các bạn cách chuyển đổi số ...

Cách chuyển đổi thập phân sang nhị phân trong C#

Cách chuyển đổi thập phân sang nhị phân trong C#

Số nhị phân là các con số có cơ số là 2. Các số nhị…

Top