none
データグリッドビューでコンボボックスを使用し、プルダウンメニューにて左右矢印キーを押すと例外が発生する。 RRS feed

  • 質問

  • VC++2008 Express EditionにてWindowsフォームアプリケーションを作成しています。

    データグリッドビューを使用し、DataTableにデータバインドしています。

    また、テキストボックスカラムとコンボボックスカラムを使用しています。

    コンボボックスで選択した内容をCellValidatedイベントでとらえ、DataTableの値を変化させ、テキストボックスに反映させるようにプログラムしてあります。

    その時に出るエラーなのですが、コンボボックスのセルをクリックしてプルダウンメニューを表示させ、左右の矢印キーを押してメニューを閉じると、

    NullReferenceExcepetion(追加情報:オブジェクト参照がオブジェクトインスタンスに設定されていません。)が発生し、処理がストップします。

    何が原因で例外が発生するのか全く分からないので、質問させていただきました。

    リターンキーなどで決定すればエラーは起こらないのですが。

    2012年11月14日 12:44

すべての返信

  • これだけでは何とも。

    デバッグ実行していれば、NullReferenceExceptionが発生した箇所に自動的にナビゲートしてくれませんか? そこで何がnullptrなのか、自動変数ウィンドウなどで確認してください。

    // 行追加がキャンセルされた結果DataRowViewがnullってとこかしら。DataGridViewComboBoxは使いづらい……。

    2012年11月15日 3:57
  • 返信ありがとうございます。

    本当はソースを載せられたら良いのですが、色々盛り込んでしまい、どこが大事なのか不明なので概略だけ書きました。

    デバッグをしていると止まる場所は2か所です。なぜか場合によって止まるところが違うようです。原因は分かりません。

    1か所は、CellValidatedイベント内で、DataTableの値を書き換える行です。DataTableはnullではありません。

    もう1か所は、main関数の中です。フォームを作成する、

    Application::Run(gcnew Form1());

    で止まります。よって何が悪いのか調べようがない状態です。

    行追加がキャンセル、とのことですが、AllowUserToAddRowsプロパティはfalseにしてあり、行の追加はプログラムで適宜行っています。

    それなので、キャンセルされないと思うのですが、これが何か悪さをしているのでしょうか?

    2012年11月15日 12:06
  • 自己解決・・・というべきか、結局、コンボボックスカラムを使うことを止めました。

    代わりの方法ですが、単独のコンボボックスを使うことにしました。

    普段はそれを非表示にしておき、特定のテキストボックスがクリックされたときにその上にコンボボックスを再表示させ、

    擬似的にコンボボックスカラムのように動作させる、という仕様にしました。

    これで普通に動作していますので、一応、解決といたします。

    ありがとうございました。

    2012年11月29日 0:53