- PR -

インスタンスを作成中に例外が発生しました。というエラーについて

投稿者投稿内容
akuro
会議室デビュー日: 2004/11/29
投稿数: 9
投稿日時: 2004-11-29 13:00
お世話になっております。akuroともうします。

win2000Pro + IIS + ASP.NET(C#)で開発しております。

フォームを自動で作成すると、
各デザイン画面(aspx)に対するcsファイルにて
System.Web.UI.Page
を継承したクラスが自動生成されるとおもいます。

そこで、各画面で毎回同じ処理をしたい場合を考えて、
System.Web.UI.Pageを継承したクラス(Page2クラス)を作成し、
その継承クラスを書くページで継承するように致しました。

ところが、各デザイン.aspxファイルを選択すると

”Webフォームデザイナにファイルを読み込めませんでした。、、、、、
、、、インスタンスを作成中に例外が発生しました。例外はオブジェクト参照がオブジェクトインスタンスに設定されていません”

という内容のエラーが発生し、デザイン画面を見ることができません。
実行した際は、問題なく動作します。

どなたかご存知のかたおりましたらアドバイスのほうよろしくお願いいたします。

たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-29 13:49
手元で再現できないので、ずばりな答えにならなくて申し訳ないです。

> System.Web.UI.Pageを継承したクラス(Page2クラス)を作成し、
> その継承クラスを書くページで継承するように致しました。

デザイン対象のWebFormを、自分で作ったクラスから継承しようということですよね。
これ自体は可能です。
私もやったことがあります。

> オブジェクト参照がオブジェクトインスタンスに設定されていません

デザイン画面を表示するために、自分で作った継承の元になっているクラスが生成されて呼び出されます。
継承元に思い当たるところはありませんか。


_________________
たつごろー
codeseek
こみゅぷらす
akuro
会議室デビュー日: 2004/11/29
投稿数: 9
投稿日時: 2004-11-29 15:41
返信ありがとうございます。

>デザイン画面を表示するために、自分で作った継承の元になっているクラスが生成されて呼び出されます。
>継承元に思い当たるところはありませんか。

Pageより継承するクラスは
-------------------------
public class Page2 : System.Web.UI.Page
{
コンストラクタ、デストラクタの宣言のみの状態です。
}

ウェブフォームクラスは
--------------------------
using xxxxx.lib; //ここにPage2のcsファイルがあります(エイリアス設定)。
public class WebForm2 : Page2
{
private void Page_Load(object sender, System.EventArgs e)
{
// ページを初期化するユーザー コードをここに挿入します。
}

#region Web フォーム デザイナで生成されたコード
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: この呼び出しは、ASP.NET Web フォーム デザイナで必要です。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}

となっております。
作成した生の状態で変更は加えておりません。

ソースを実行すると、うまくいくので、なにかしらの原因でデザイン画面にロード
できないようです。

基本的にPageクラスを継承したクラスにはコンストラクタを追加しているくらいとなります。

たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-29 16:08
> コンストラクタ、デストラクタの宣言のみの状態です。

ここには、どういうコードがありますか。

_________________
たつごろー
codeseek
こみゅぷらす
akuro
会議室デビュー日: 2004/11/29
投稿数: 9
投稿日時: 2004-11-29 16:09
akuroです。

試してみたのですが。
新しくフォームを作成し、継承クラスをPage2に
してみたところ、ソリューションエクスプローラー(右のツリー)からダブルクリック
してもエラーになりませんでした。

しかし、一度エディタ上部のタブを閉じたあとに、再度ソリューションエクスプローラー
からダブルクリックすると、エラーとなってしまうようです。

エディタを閉じなければ問題なくデザイン画面を表示できました。
akuro
会議室デビュー日: 2004/11/29
投稿数: 9
投稿日時: 2004-11-29 16:14
akuroです。

>ここには、どういうコードがありますか。
DB接続を行っております。
接続処理は別クラスが担当しております。

public class Page2 : System.Web.UI.Page
{
public Db db; //データベースクラス
public Admin admin; //adminテーブルクラス

/**
* コンストラクタ
*
*/
public Page2()
{
//DB接続
this.db = new Db();
this.db.dbConnect();
//Adminクラス生成
this.admin = new Admin(db);
}

/**
* デストラクタ
*
*/
~Page2()
{
//DB切断
db.dbClose();
}
}
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-29 16:18
>>ここには、どういうコードがありますか。
>DB接続を行っております。
>接続処理は別クラスが担当しております。

では、いったんここを全部コメントにするか、削除して、コンストラクタ、デストラクタを跡形も無い状態にしてみてください。
これで動けば、DB接続の失敗になります。

_________________
たつごろー
codeseek
こみゅぷらす
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-29 16:21
>DB接続を行っております。

コンストラクタで?
うーん。
使うところでやるとかしたほうがいいと思われます。

デザイン時にもデータベースに接続しにいっちゃいますよ。

_________________
たつごろー
codeseek
こみゅぷらす

スキルアップ/キャリアアップ(JOB@IT)