Я полагаю, что в некоторых случаях у вас недостаточно элементов списка в вашем элементе управления, поэтому у вас есть некоторое пространство, на которое вы можете нажать, а затем вызывается SelectedIndexChanged .
Я думаю, вы не можете динамически изменить размер элемента управления, чтобы всегда соответствовать количеству элементов списка, иначе вы бы не задавали этот вопрос.
Теперь, что должно произойти, когда пользователь щелкает (выбирает) тот же элемент списка? Должна ли какая-то логика происходить, даже если выбранный индекс совпадает (например, при первом щелчке по нему происходит та же логика)?
Если вам требуется, чтобы выбор одного и того же индекса более одного раза игнорировался, тогда вы можете воспользоваться следующим хаком:
Сохраняйте переменную в области формы (форма, содержащая элемент управления listbox), и каждый раз, когда изменяется индекс выбора, задайте эту переменную. Затем используйте его позже, чтобы проверить, был ли сделан такой же выбор, чтобы игнорировать обработку события. Вот пример:
private int _currSelIdx = -1; // Default value for the selected index when no selection
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == _currSelIdx)
return;
Console.WriteLine(listBox1.SelectedIndex);
_currSelIdx = listBox1.SelectedIndex;
}
Это не красиво, но эй ... что бы ни работало!