2009-07-21 11 views
0

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); 
    ...... 

    } 

答えて

1

ここであなたが役に立つかもしれない同様の質問です: 編集コントロールにイベントハンドラをアタッチするとき、あなたはそのため 予防措置を講じなければなら

MSDNから

EditingControlShowing events firing multiple times

に同じハンドラを複数回貼り付けるのを避けるためです。 この問題を回避するには、 ハンドラをイベントに添付する前に、そのイベントからハンドラ を削除してください。これは、ハンドラが が既にイベントにアタッチされている場合は、 重複を防止しますが、 はそれ以外の場合は無効です。

これはいくつか役立ちます。

+0

MSDNの記事を読んでいます。キーワードは、同じタイプの列に対して同じEditingconrolが使用されていたことです。したがって、編集コントロールにすでにハンドラがある場合、その編集コントロールを使用しているANY列に対して起動します。だから新しいものを追加する前にハンドラを削除するのが答えです。 –

関連する問題