0

かなり初歩的な継承を利用する一連の UserControls のコードを開発するのは本当に面倒です。基本的に、これらは 3 つの異なる詳細ビューであり、これらはすべて単一の基本クラスから継承され、単一のインターフェイスを実装します。

インターフェース IBaseDetailView

クラス BaseDetailView : IBaseDetailView を実装します

Class DetailView1 : BaseDetailView を継承 Class DetailView2 : BaseDetailView を継承 Class DetailView3 : BaseDetailView を継承

次に、TabControl のタブに個々の DetailViews 1-3 を追加する Composite UserControl があります。

かなりシンプルなもの。すべてが正常にコンパイルされ、すべての UserControls がツールボックスで利用可能になり、任意のフォームにドラッグ アンド ドロップできます。しかし、問題が 1 つあります...

それらは最初は表示されますが、フォームをコンパイルすると、悪名高い「オブジェクトのインスタンスが参照に設定されていません」というエラーが発生します。

ここで、もう少し詳しく説明します...各 DetailView 具象/派生クラスの Form_Load イベントをコメント アウトすると、このエラーはなくなり、フォームをデザイン モードで表示できます。Form_Load イベントには、エラーをトリガーしているように見える SQL サーバーへの ado.net 呼び出しがあります。

Form_Load イベントをそのまま使用すると、コンパイル時にエラーが発生せず、デバッグ モードまたはリリース モードで問題なくアプリケーションを実行できます。DesignMode で UserControls を使用してフォームを表示できません。

If Me.DesignMode Then Return を Form_Load イベントに追加しましたが、機能しませんでした。VS2008 は実際に UserControls でコードを実行しようとしていると思います...これをグーグル検索しましたが、解決策が見つかりませんでした。どんな助けでも大歓迎です!

4

1 に答える 1

0

Form_Load メソッドのプロパティ/フィールドの周りに null チェックを入れます。デザイナーが予想していたものではなく、デザイン時に FormLoad を使用しているように見えるため、同様の問題がありました。

使用できる DesignMode プロパティもあります。

これが役立つことを願っています。

于 2009-12-31T19:25:05.103 に答える