DataGridViewと、一部の列のkeyUpイベントのハンドラを追加または削除するために使用されるEditingControlShowingイベントのハンドラがあります。この問題は、関連付けられたKeyUpハンドラが実際にハンドラを起動しない列であることがあります。グリッドがどの列がどのハンドラを起動するはずなのかわからないようです。私のDataGridViewのバグEditingControlShowingハンドラ(.NET)
問題:column2ではなくcolumn1を入力すると、KeyUpハンドラを削除する行が実行されます。しかし、Control_KeyUpが実行されます! Control_KeyUpはColumn1のみです。
カラム(またはセル?)にハンドラが接続されているかどうかを調べる方法はありますか?
private void MyGrid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
string columnName = MyGrid.Columns[MyGrid.CurrentCell.ColumnIndex].Name;
if (columnName == "column1")
e.Control.KeyPress += new KeyPressEventHandler(Control_KeyUp);
else
e.Control.KeyPress -= new KeyPressEventHandler(Control_KeyUp);
......
}
MSDNの記事を読んでいます。キーワードは、同じタイプの列に対して同じEditingconrolが使用されていたことです。したがって、編集コントロールにすでにハンドラがある場合、その編集コントロールを使用しているANY列に対して起動します。だから新しいものを追加する前にハンドラを削除するのが答えです。 –