Я создаю приложение с помощью ListBox.Я хочу, чтобы пользователь мог щелкнуть по нему, начать печатать и увидеть, как его текст отображается в этом элементе.Ниже приведена упрощенная версия, которая почти работает:
using System.Windows.Forms;
namespace ListboxTest
{
public partial class ListboxTest : Form
{
InitializeComponent();
listBox1.Items.Add("");
listBox1.Items.Add("");
listBox1.KeyPress += new KeyPressEventHandler(ListBoxKeyPress);
}
private void ListBoxKeyPress(object sender, KeyPressEventArgs e)
{
ListBox lbx = (ListBox)sender;
if (lbx.SelectedIndices.Count != 1)
return;
int temp = lbx.SelectedIndex;
string value = lbx.Items[temp].ToString();
value += e.KeyChar;
lbx.Items[temp] = value;
}
}
Когда выбран ListBox, пользователь может начать печатать и увидеть текст.Все работает, как и ожидалось, пока не произойдут две вещи:
- Пользователь переключается с одного элемента на другой (нажимает на другой вход или использует стрелки вверх / вниз), а затем
- Пользователь нажимаетключ, соответствующий первому символу в имени невыбранного элемента.
С тех пор, когда пользователь нажимает эту клавишу (в моем случае «1»), выбранный элемент ListBox изменяется.Только с двумя элементами (оба начинаются с '1'), нажатие '1' заставляет ListBox переключать выбранный элемент с индекса 0 на индекс 1 (и наоборот).
Я немного поэкспериментировали вот что я нашел.
- Это происходит только тогда, когда я нажимаю «1».Никакая другая цифра, цифра или знак пунктуации не вызывают этого. Это произойдет с любым символом, с которого начинается элемент ListBox.
- Если ListBox имеет более двух элементов, он будет циклически проходить по всем ранее введеннымэлементы с одинаковым начальным символом.Элементы, которые никогда не были выбраны, пропускаются.
Что я пробовал:
- Очистка выбранных индексов с помощью
ListBox.SetSelected(int index, bool selected)
- Очистка выбранногоиндексы на
ListBox.ClearSelected()
- Установка
Listbox.SelectionMode
на SelectionMode.One
Я использую VS 2015 Professional, Windows 7 SP1 (x64), C # 6.0 и нацеливаюсь на .NET 4.6.1.
Итак, мой вопрос: что происходит и как это исправить?