DOBON.NET DOBON.NETプログラミング掲示板過去ログ

オブジェクト参照が出来ない

環境/言語:[WindowsXP Framework1.1]
分類:[.NET]

初めまして零と申します。

VB.NETは素人なんでくだらない質問かもしれませんが、
どうか宜しくお願いいたします。

Dim aaa as New ・・・

ここの宣言の場所にNewキーワードを入力するとオブジェクト?(型?)が指定出来ず

Dim aaa as ・・・

の形で宣言して、

aaa.FileBort="eee"

この形で書いてコンパイルをするとビルドエラーにはならず、
コンパイルは通り、実行すると
「 オブジェクト参照がオブジェクト インスタンスに設定されていません。」
が出てしまいます。

かと言ってNewキーワードを宣言しようとするとオブジェクトが指定出来なくなってしまうし・・・。

こういう場合はどうやって書けばよろしいのでしょうか?

こんな分からない説明で申し訳ありませんが、分かる方、
どうか宜しくお願いいたします。

.NETは2003です。
2004/10/15(Fri) 13:49:17 編集(投稿者)

※日本語がおかしかったのとタイプミスを修正しました。

> Dim aaa as New ・・・
>
> ここの宣言の場所にNewキーワードを入力するとオブジェクト?(型?)が指定出来ず

例えば、Formクラスを継承したForm1クラスの場合であれば、
Dim aaa As New Form1
のようにして宣言と同時にインスタンス作成も行えます。
指定できないとおっしゃっている型はどんな型でもすべてでしょうか?
通常、これはありえません。

ただし、独自に使用しているコンポーネント(独自DLLに含まれる)であれば、
(1)参照設定をする
(2)必要であれば、Imports文の記述を追加
などを行う必要があるでしょう。

> Dim aaa as ・・・
>
> の形で宣言して、

aaa = New その型(引数はその型に応じた適切なもの)
としてインスタンスを生成する必要があります。

> aaa.FileBort="eee"

.NET Frameworkの標準クラスでFileBortというプロパティは
見たことが無いので、やはり独自のライブラリを使用されていて、
その中に含まれるクラスですか?
であれば、(1)、(2)の事項をみなおしてください。
■No6704に返信(よねKENさんの記事)

> ただし、独自に使用しているコンポーネント(独自DLLに含まれる)であれば、
> (19参照設定をする
> (2)必要であれば、Imports文の記述を追加
> などを追加する必要があるでしょう。

すいません説明不足でした。
そうです。よねKENさんの言っている通り独自コンポーネントです。
(1)の参照設定はもう完了しております。
(2)のImports文はどこに記述の追加をすればよいのでしょうか?
Dimの前と書いてあったのでDim文の前に置いたら構文エラーとなりますし。
Imports文の使い方がいまいちよく理解できなくて・・・。

> .NET Frameworkの標準クラスでFileBortというプロパティは
> 見たことが無いので、やはり独自のライブラリを使用されていて、
> その中に含まれるクラスですか?

もっと細かく説明しますと、インターフェイスにNewキーワードを
つけようとして失敗しています。
このインターフェイスの前の階層がaaa{}なのでaaa{}のインターフェイスと
いうことですよね?

そこで
Dim test As New aaa
とやっても型を指定してください。と言われますし・・・。
■No6705に返信(零さんの記事)
> ■No6704に返信(よねKENさんの記事)
>
>>ただし、独自に使用しているコンポーネント(独自DLLに含まれる)であれば、
>>(19参照設定をする
>>(2)必要であれば、Imports文の記述を追加
>>などを追加する必要があるでしょう。
>
> すいません説明不足でした。
> そうです。よねKENさんの言っている通り独自コンポーネントです。
> (1)の参照設定はもう完了しております。
> (2)のImports文はどこに記述の追加をすればよいのでしょうか?
> Dimの前と書いてあったのでDim文の前に置いたら構文エラーとなりますし。
> Imports文の使い方がいまいちよく理解できなくて・・・。
>
>>.NET Frameworkの標準クラスでFileBortというプロパティは
>>見たことが無いので、やはり独自のライブラリを使用されていて、
>>その中に含まれるクラスですか?
>
> もっと細かく説明しますと、インターフェイスにNewキーワードを
> つけようとして失敗しています。
> このインターフェイスの前の階層がaaa{}なのでaaa{}のインターフェイスと
> いうことですよね?
>
> そこで
> Dim test As New aaa
> とやっても型を指定してください。と言われますし・・・。

いってることがわけわからんな。
独習VBあたりからしっかりやりなおしたら?
■No6705に返信(零さんの記事)
> (2)のImports文はどこに記述の追加をすればよいのでしょうか?
> Dimの前と書いてあったのでDim文の前に置いたら構文エラーとなりますし。
> Imports文の使い方がいまいちよく理解できなくて・・・。

クラスの宣言の外に書いて下さい。
簡単に言えば、ファイルの先頭に書けばOKです。


> もっと細かく説明しますと、インターフェイスにNewキーワードを
> つけようとして失敗しています。
> このインターフェイスの前の階層がaaa{}なのでaaa{}のインターフェイスと
> いうことですよね?

前の階層とは?


> とやっても型を指定してください。と言われますし・・・。

型が指定されていないとしか。
名前が間違っていないのであれば、
Imports文をつけて、さらに名前空間からきちんと記述して宣言すれば、
型を指定してください。とは言われないはずですが。
2004/10/15(Fri) 12:53:41 編集(投稿者)

■No6705に返信(零さんの記事)
> すいません説明不足でした。
> そうです。よねKENさんの言っている通り独自コンポーネントです。
> (1)の参照設定はもう完了しております。

質問時に明記しておくと良かったんですけどね。
まあ次から気をつければ良いでしょう。

> (2)のImports文はどこに記述の追加をすればよいのでしょうか?
> Dimの前と書いてあったのでDim文の前に置いたら構文エラーとなりますし。
> Imports文の使い方がいまいちよく理解できなくて・・・。

理解できない→誰かに聞くのではなく、まず自分で調べると良いでしょう。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbls7/html/vblrfvbspec5_2.asp

> もっと細かく説明しますと、インターフェイスにNewキーワードを
> つけようとして失敗しています。
> このインターフェイスの前の階層がaaa{}なのでaaa{}のインターフェイスと
> いうことですよね?

「階層」というのは名前空間ではなく「{ }」から察するに、ブロックのことのようですね。

# あれ? でも言語はVBだなぁ...

> そこで
> Dim test As New aaa
> とやっても型を指定してください。と言われますし・・・。

Dim test As New [aaaまでの名前空間].aaa()

とするか、

Imports [aaaまでの名前空間]

Friend Class Form1
   :
   :
  (略)

  Dim test As New aaa()



■No6708に返信(ぽぽさんの記事)
> いってることがわけわからんな。
> 独習VBあたりからしっかりやりなおしたら?

気持ちは重々わかるのですが、相手に至らぬところがあっても、
暴言レベルのことを書くことには問題がないと言うのですか?
見ている人から見たら、どうかと思うのですが。

# ご自分も「やりなおしたら」どうでしょう?
■No6705に返信(零さんの記事)
> ■No6704に返信(よねKENさんの記事)
>
>>ただし、独自に使用しているコンポーネント(独自DLLに含まれる)であれば、
>>(19参照設定をする
>>(2)必要であれば、Imports文の記述を追加
>>などを追加する必要があるでしょう。
>
> すいません説明不足でした。
> そうです。よねKENさんの言っている通り独自コンポーネントです。
> (1)の参照設定はもう完了しております。
> (2)のImports文はどこに記述の追加をすればよいのでしょうか?
> Dimの前と書いてあったのでDim文の前に置いたら構文エラーとなりますし。
> Imports文の使い方がいまいちよく理解できなくて・・・。
>
>>.NET Frameworkの標準クラスでFileBortというプロパティは
>>見たことが無いので、やはり独自のライブラリを使用されていて、
>>その中に含まれるクラスですか?
>
> もっと細かく説明しますと、インターフェイスにNewキーワードを
> つけようとして失敗しています。
> このインターフェイスの前の階層がaaa{}なのでaaa{}のインターフェイスと
> いうことですよね?
>
> そこで
> Dim test As New aaa
> とやっても型を指定してください。と言われますし・・・。

みなさん、こんにちは。

独自コンポーネントってのが引っかかりますね。
独自コンポーネントのルート名前空間名を何にしてますか?
実際に使用する場合は、ルート名前空間名.クラス名となります。
ルート名前空間名が「AAA」だとし、コンポーネントのクラス名が「BBB」だとすると、Dim test As New AAA.BBBとなります。
あと、チェックして欲しいのは、コンポーネントのクラスが「Private」宣言になっていませんか?
2004/10/15(Fri) 16:10:27 編集(投稿者)

■No6703に返信(零さんの記事)
> ここの宣言の場所にNewキーワードを入力するとオブジェクト?(型?)が指定出来ず

 と、

> かと言ってNewキーワードを宣言しようとするとオブジェクトが指定出来なくなってしまうし・・・。

を見る限りでは、New キーワードさえ付けなければ、指定できることになりますので、
コンストラクタがPublicになっていない可能性が高いような気がしてきました。

完全に外部ともなるとFriend以下はアクセスできません。


■追記

> Dim aaa as ・・・
>
> の形で宣言して、
>
> aaa.FileBort="eee"
>
> この形で書いてコンパイルをするとビルドエラーにはならず、
> コンパイルは通り、実行すると
> 「 オブジェクト参照がオブジェクト インスタンスに設定されていません。」
> が出てしまいます。

やはり、クラス自体は公開されているようですね。
公開されていなければ、

> aaa.FileBort="eee"

でコンパイルエラーになってしまいますし、

Dim cls As clsA だとコンパイルエラーにならず、
Dim cls As New clsA() だとコンパイルエラーになるのなら、
やはり、コンストラクタが公開されていないのでしょう。

DOBON.NET | プログラミング道 | プログラミング掲示板