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 ạ
đề 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 đó.
Ý 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.
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
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.
if (listBox1.IsFocused)...
Câu trả lời đây!
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.
Đú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;
}
}
}
}