2011-01-20 7 views
1

C#WinFormsの新機能です。 Formクラスを継承するクラス(EnhancedForm)を作成しました。 EnhanceFormでは、一般的な関数(検証、DataTableや文字列変数などの一般的なオブジェクトのように、フォームに何度も同じコードを書く必要がないように)を入れました。フォームはこれを継承します(拡張フォーム)。C#WinForms、この奇妙なエラーは何ですか?

DAL(別のクラスライブラリ)には、DBに関連する共通関数を持つCommonDBクラスクラスがあります。データベース通信の場合、私はすべての形式でCommonDBのオブジェクトを作成していました。 CommonDBをEnhancedFormに入れて、すべてのクラスでオブジェクトを作成する必要がないかもしれないと思っていました。

私は理解できないことが起こっています。アプリケーションはうまく動作します。しかし、デザインビューでフォームを開くと、エラーが発生します。 "オブジェクト参照がオブジェクトのインスタンスに設定されていません。"デザインモードでフォームを表示できませんでした。私がCommonDbオブジェクトをEnhancedFormから削除し、それを個々のフォームに入れると、正常に動作し、フォームを表示できるようになります。

このエラーをコンパイルして実行すると、表示されません。この点について私を導いて助けてください。

ありがとう

答えて

4

CommonDbオブジェクトを想定したコードがEnhancedFormにあります。実行時に(おそらくForm_Loadedで)作成しますが、デザインタイムは存在しません。

。好ましく、すべてのコードたCommonDBがnullをチェックする必要があり、アクセス、および/または、あなたの基本フォームのコンストラクタ内であなたたCommonDBクラスを開始しているかのように思えthis.DesignMode

+0

私はVS/.NETの最新バージョンについてはわかりませんが(私たちはまだ2005年に働いています)、DesignModeプロパティはまったく動作しませんでした。うまくいけば彼らはそれを修正しました。 –

+0

案内のためにHenkに感謝しますが、これはすべてのフォームで起こります。私はForm1でCommonDBオブジェクトを使用しましたが、これによって消されたすべてのフォームのデザインビューを想定します。第2に、EnhancedFormでは、ユーザがエスケープキーを押すとフォームを閉じるための機能を果たしたということです。私がCommondbを使用し始めると、この機能が動作を停止します。私はどこに間違っているのか分からない。 – haansi

+0

フォームロードでも、Commondbを再インスタンス化しますが、問題はまだ残ります。それを呼び出す前に、私はnullと等しくない場合でも入れますが、結果は同じです。 Plzアドバイス。 – haansi

1

。 Visual Studioでは、Reflectionを使用してフォームをデザインビューに表示し、フォームのコンストラクタを呼び出します。フォームをデザインビューで見ることができるかどうかを確認するためにプロジェクトを再構築してみることもできますが、それはうまくいくとは思えません。