none
DataGridViewEditingControlでEnterキーを捕獲 RRS feed

  • 質問

  • いつも、誠意あるご回答、感謝します。

    DataGridViewColumnとDataGridViewCell、IDataGridViewEditingControl実装クラスをカスタマイズ作成しました。

    ところが、IDataGridViewEditingControlのEditingControlWantsInputKeyメソッドではEnterキーが捕獲できず、

    Enterが押された時点でEdit終了となってしまいます。Edit時に、Enterキーが押された場合、別の処理をさせたいのです。

    どのように実装するべきでしょうか?

    2007年9月29日 6:35

回答

  • 私の記憶では、VS2005 RC以降、EditingControlWantsInputKeyでKeys.Enterは拾えなくなりました。
    代わりにOnPreviewKeyDownを使ってみて下さい。

    2007年9月29日 7:59
    モデレータ

すべての返信

  • 私の記憶では、VS2005 RC以降、EditingControlWantsInputKeyでKeys.Enterは拾えなくなりました。
    代わりにOnPreviewKeyDownを使ってみて下さい。

    2007年9月29日 7:59
    モデレータ
  • EditingControlWantsInputKeyメソッドで、

    Return True

    と常に行っているとEnter押下でもEdit終了にはならないんですよね。不思議だ・・・。

    何か別の要素が編集状態の判断材料になっている気がするのですが、未だによくわかっていません。

     

    で、私もtrapemiyaさんと同様に継承しているであろうコントロール側でキー制御を行っています。

    EditingControlWantsInputKeyでは常にTrue返却で。

    2007年9月29日 13:12
  • trapemiya様、Ahf様、ありがとうございます!!

     

    IDataGridViewEditingControlを実装したクラス内ではなく、その基底クラスでOnPreviewKeyDownを

    実装させることで解決しました。

     私の環境では、IDataGridViewEditingControl内でOnPreviewKeyDownを実装しても、

    別のところでEnterを捕まえているらしく、Enterを押したときに、OnPreviewKeyDownを流れずに、

    Editモードが終了してしまいます。EditingControlWantsInputKeyメソッドの返却値をtrueにしても、falseにしても、

    なぜかAhf様のようにはならず、必ず終了してしまうのです。IDataGridViewEditingControlを実装した基底クラスの

    問題かと思います。

     

    やりたかったことは、実装できたので、問題はないのですが、疑問が残っていて、何か気持ち悪いままです。

    このスレッドを一応、回答済みにしますが、原因についてのコメントをお待ちしております。

    2007年10月1日 7:28
  • 回答になるかどうかわかりませんが、

    OnPreviewKeyDown内でe.IsInputKey = Trueとすれば、

    EditingControlWantsInputKeyで拾えるようになります。<Enter

    そこでTrueを返せばEdit終了にはならないはずです。。。

    2007年10月1日 7:54