Nói tóm lạiWinForms ComboBox SelectedIndexChanged không bắn khi gõ vài ký tự sau đó Alt + Down
Khi tôi gõ một nhân vật trong một ComboBox, nhấn Alt + Down sau đó Enter hoặc Tab, sự kiện SelectedIndexChanged không lửa, mặc dù giá trị SelectedIndex thực hiện thay đổi! Tại sao sự kiện không cháy?
Cập nhật Lỗi tương tự xảy ra nếu bạn nhập ký tự, nhấn Alt + Down và sau đó nhập Esc. Bạn sẽ mong đợi Esc để hủy thay đổi. Tuy nhiên, SelectedIndex thực hiện thay đổi và sự kiện SelectedIndexChanged không kích hoạt.
Điều gì sẽ xảy ra nếu bạn chỉ cần nhập Alt + Down, sử dụng các phím mũi tên để duyệt đến mục nhập và sau đó loại Esc? Liệu chỉ mục đã chọn có được đặt trở lại giá trị ban đầu của nó không?
Không quá ngắn
Tôi có một ứng dụng WinForm với một ComboBox trên đó. Sự kiện SelectedIndexChanged của ComboBox được kết nối với một trình xử lý sự kiện hiển thị SelectedItem trong một điều khiển Label. Bộ sưu tập các mục của ComboBox có ba giá trị: "Một", "Hai" và "Ba".
- Khi tôi chọn một mục bằng chuột, sự kiện sẽ kích hoạt.
- Khi tôi di chuyển chuột, sự kiện sẽ kích hoạt.
- Khi tôi sử dụng Alt + Down để mở rộng hộp tổ hợp và đi qua các mục có Lên và Xuống, sự kiện sẽ kích hoạt.
- Nhưng ... Khi tôi nhập ký tự đầu tiên của giá trị, rồi nhấn Alt + Down, sau đó nhấn Enter hoặc Tab, giá trị sẽ được chọn và được hiển thị trong hộp tổ hợp, nhưng sự kiện không ngọn lửa.
Tôi cũng đã thêm nút hiển thị SelectedIndex. Nó cho thấy SelectedIndex đã thay đổi. Vì vậy, mặc dù SelectedIndex không thay đổi, sự kiện SelectedIndexChanged không kích hoạt!
Nếu tôi chỉ nhập giá trị hợp lệ nhưOne
sự kiện này không kích hoạt, nhưng trong trường hợp đó, nhấp vào nút cho thấy thực tế SelectedIndex chưa thay đổi. Vì vậy, trong trường hợp đó, hành vi là bình thường.
Để tái tạo, tạo Biểu mẫu và thêm ComboBox, Nhãn và nút. Đặt mã sau vào Form1.cs:
using System;
using System.Windows.Forms;
namespace ComboBoxSelectedIndexChanged
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
comboBox1.Items.AddRange(new object[] {
"One",
"Two",
"Three"
});
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
label1.Text = "Selected index: " + comboBox1.SelectedIndex;
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Selected item: " + comboBox1.SelectedItem +
"\nSelected index: " + comboBox1.SelectedIndex);
}
}
}
tôi muốn cùng một vấn đề và vì vậy tôi xử lý sự kiện TextChanged. Theo trang MSDN - sự kiện SelectedIndexChanged sẽ được kích hoạt khi giá trị ** của thuộc tính SelectedIndex thay đổi. – adatapost
@adatapost: Cách tôi mô tả mọi thứ ở đây (nhập char đầu tiên, sau đó nhấn Alt + Down) sau đó nhấp vào nút) cho thấy rằng SelectedIndex thực sự * không * thay đổi. – comecme