В качестве обходного пути для проблемы, я думаю, мне нужно обработать события KeyDown, чтобы получить печатный символ, который пользователь фактически набрал.
KeyDown предоставляет мне объект KeyEventArgs с правами KeyCode, KeyData, KeyValue, Модификаторы, Alt, Shift, Control.
Моя первая попытка состояла в том, чтобы просто считать KeyCode кодом ascii, но KeyCode на моей клавиатуре равен 46, точка ("."), Поэтому я заканчиваю печать периода, когда пользователь вводит клавишу удаления. Итак, я знаю, что моя логика неадекватна.
(Для тех, кому интересно, проблема в том, что у меня есть свой собственный комбинированный список в коллекции элементов управления DataGridView и почему-то НЕКОТОРЫЕ символы, которые я печатаю, не генерируют события KeyPress и TextChanged ComboBox. Эти буквы включают Q, $,%. ...
Этот код воспроизведет проблему. Создайте приложение формы и замените ctor этим кодом. Запустите его и попробуйте ввести букву Q в два поля.
public partial class Form1 : Form
{
ComboBox cmbInGrid;
ComboBox cmbNotInGrid;
DataGridView grid;
public Form1()
{
InitializeComponent();
grid = new DataGridView();
cmbInGrid = new ComboBox();
cmbNotInGrid = new ComboBox();
cmbInGrid.Items.Add("a");
cmbInGrid.Items.Add("b");
cmbNotInGrid.Items.Add("c");
cmbNotInGrid.Items.Add("d");
this.Controls.Add(cmbNotInGrid);
this.Controls.Add(grid);
grid.Location = new Point(0, 100);
this.grid.Controls.Add(cmbInGrid);
}