問題の回避策として、KeyDown イベントを処理して、ユーザーが実際に入力した印刷可能な文字を取得する必要があると思います。
KeyDown は、プロパティ KeyCode、KeyData、KeyValue、Modifiers、Alt、Shift、Control を持つ KeyEventArgs オブジェクトを提供します。
私の最初の試みは、KeyCode を ASCII コードと見なすことだけでしたが、キーボードの KeyCode は 46、ピリオド (".") であるため、ユーザーが削除キーを入力するとピリオドを出力してしまいます。だから、私は私の論理が不十分であることを知っています。
(興味のある方のために説明すると、問題は、DataGridView のコントロール コレクションに独自のコンボボックスがあり、入力した一部の文字が KeyPress および TextChanged ComboBox イベントを生成しないことです。これらの文字には、Q、$、% が含まれます....
このコードは問題を再現します。フォーム アプリを生成し、ctor をこのコードに置き換えます。それを実行し、文字 Q を 2 つのコンボボックスに入力してみてください。
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);
}