- ベストアンサー
DataGridViewがクラッシュする
- VB2005を使用しています。DataGridViewコントロールで、以下のようなコードを実行した際に、DataGridViewコントロール自体が大きな赤い×の表示になることがあります。
- DataGridViewの設定や操作に関する問題で、DataGridViewがクラッシュする現象が発生しています。
- DataGridViewのクラッシュを回避する方法をご教授ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>「オブジェクト参照がオブジェクトインスタンスに設定されていません」 から考えて、DataGridView1.Columns.Clear()の、DataGridView1かColumnsがNothingになっていると思えます。 DataGridView1が消えるとは思えないので、動的に生成・削除されるColumnsがNothingでしょう。 コードの冒頭で初期化するために、DataGridView1.Columns.Clear()を使っているので、これは初期化のタイミングの問題と思われます。特にApp起動時にこのような事を行うと、「オブジェクト参照がオブジェクトインスタンスに設定されていません」は良く出ます。DataGridView1はDataを詰め込む前で、Columnsが生成されていないからです。私も良く出します。
その他の回答 (2)
#2の追伸です。 DataGridView1.Columns.Clear()の直後に、DataGridView1.DataSource = dtDataとされていますが、DataGridViewは、ある意味非常に良く出来ていて、DataSourceの内容変化に忠実に追随して表示を変化させます。 dtDataはDataSetとなっていますが、dtDataがBindingSourceの場合なら、これは確実です。その場合、DataGridView1.Columns.Clear()の初期化は要らないと思います。また、DataGridView.Clearなら、ColumnsがNothingでも動くと思います。
お礼
ご回答ありがとうございます。 今回のケースは、DataBindingSourceではないので、 何らかのクリアは必要な状況です。 クリアをしないと、列が追加されていきます。 また、DataGridView.Clear()メソッドはなかったような。 DataGridView.ClearSelection()はありました。
補足
遅くなりましたが、 DataGridView1.Columns.Clear() の部分を以下のようにしたら現象が出なくなったようです。 For i = 0 To DataGridView1.Columns.Count - 1 DataGridView1.RemoveAt(0) Next i ありがとうございました。
例外発生箇所を特定できないのでしょうか?。 発生箇所の特定が、解決への早道だと思います。
お礼
ご回答ありがとうございます。 現在特定中ですので、判明したらお知らせします。
補足
調べたところ、 'クリア DataGridView1.Columns.Clear() のところで発生しているようです。
お礼
ありがとうございます。 そのあたりを調べてみます。