Kiểm tra việc thao tác trên listbox winform C#


mình có bài tập như trên , đến việc code sự kiện nút xóa thì mình vướng việc xác định là mình đang check item bên listbox nào để xóa.
ai biết chỉ vs ạ

Bạn dùng CheckedListBox thì nó có thuộc tính CheckedItems là tập hợp các mục đã được chọn.

3 Likes

đề muốn để listbox bình thường chứ không phải CheckListBox

Khai báo 1 biến x dạng ListBox, thao tác với listbox nào thì set biến x là listbox đó.

4 Likes

Ý bạn là chọn (select) chứ không phải là đánh dấu (check)?
ListBox.SelectedItems
Còn vài thuộc tính nữa để xác định mục đang được chọn.

3 Likes

nhưng làm sao để biết người dùng đang thao tác trên listbox nào thì mình ko làm được,
mình có thử bằng .SelectedIndex nhưng không xác định được
đề mình như này

đè mình kiểu này và mình có sử dụng selectedItém nhưng không được

Thao tác thì phải chọn item hoặc click vào listbox.
Thế thì dùng sự kiện SelectionChanged (hoặc tương tự) và nhiều loại sự kiện khác tuỳ thích của listbox.

4 Likes
if (listBox1.IsFocused)...
4 Likes

Câu trả lời đây!

3 Likes

mình tìm ko có cái IsFocused nào cả

Nó là Focused.

Nhưng khi nhấn vào nút Xóa thì nó mất “focus” ở ListBox rồi.

Nên làm theo cách của @Duong_Act.
Dùng một biến xxx kiểu ListBox. Bắt sự kiện GotFocus cho cả 2 ListBox. Mỗi khi sự kiện xảy ra thì gán biến xxx bằng ListBox đang nhận sự kiện.
Trong phương thức Xóa thì dùng biến xxx đó xóa đi các mục được chọn.

4 Likes

Đúng là dùng GotFocus sẽ tốt hơn vì nó sẽ xử lý được trường hợp chọn ListBox bằng phím tab.
Còn MouseDown hoặc SelectedIndexChanged thì không xử lý được phím tab.

Tham khảo:
Đầu tiên khai báo biến ListBox:

ListBox lastListBox = null;

Sau đó set sự kiện GotFocus cho các listbox:

public Form1() {
   InitializeComponent();
   listBox1.GotFocus += ListBox_GotFocus;
   listBox2.GotFocus += ListBox_GotFocus;
   listBox3.GotFocus += ListBox_GotFocus;
   // mỗi khi một ListBox nào focus nó sẽ nhảy vào hàm ListBox_GotFocus
}

Tại hàm ListBox_GotFocus, gán giá trị cho lastListBox:

private void ListBox_GotFocus(object sender, EventArgs e) {
    lastListBox = (ListBox)sender;
    // thằng sender là thằng đã sinh ra sự kiện, cho nên nó chính là ListBox đang focus
}

Sự kiện xóa thì kiểm tra:

private void Button_Click(object sender, EventArgs e) {
            if(lastListBox == listBox1) {
                // làm gì đó ...
                return;
            }
            if (lastListBox == listBox2) {
                // làm gì đó ...
                return;
            }
            if(lastListBox == listBox3) {
                // làm gì đó ...
                return;
            }
        }

Full code:

namespace WindowsFormsApp1 {
    public partial class Form1 : Form {
        ListBox lastListBox = null;
        public Form1() {
            InitializeComponent();
            listBox1.GotFocus += ListBox_GotFocus;
            listBox2.GotFocus += ListBox_GotFocus;
            listBox3.GotFocus += ListBox_GotFocus;
        }



        private void ListBox_GotFocus(object sender, EventArgs e) {
            lastListBox = (ListBox)sender;
        }

        private void Button_Click(object sender, EventArgs e) {
            if(lastListBox == listBox1) {
                // làm gì đó ...
                return;
            }
            if (lastListBox == listBox2) {
                // làm gì đó ...
                return;
            }
            if(lastListBox == listBox3) {
                // làm gì đó ...
                return;
            }
        }
    }
}
5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?