- PR -

ラベルの配列使用について

1
投稿者投稿内容
osako
常連さん
会議室デビュー日: 2006/10/31
投稿数: 35
投稿日時: 2006-12-27 11:43
こんにちは。
Vc++Express?.net??(すいません。その辺の知識もないです)にて、
ラベルを使ってデータ表示を行うダイアログボックスを作成しようと
思っているのですがラベル数は、不明なため配列で定義しておいて必要分だけ
表示するようにしようと考えています。

で、以下のように配列を定義して、Textに文字を入れていこうと思ったのですが
コンパイルは通るのですが、実行すると

'System.NullReferenceException' の初回例外が ***.exe で発生しました。
'System.NullReferenceException' のハンドルされていない例外が ***.exe で発生しました。

追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。

とエラーになってしまいます。

−−−−−−−ソース部分−−−−−−−−

array<Label^>^adr=gcnew array<Label^>(3);

for(i=0;i<3;i++){
adr[0]->Text="0";
adr[0]->Location=Point(10,20+i*10);
adr[0]->AutoSize=true;
form1->Controls->Add(adr[0]);
}


adr[0]->Text="0"の時点で、だめなようなんですが
こういう使い方は誤りってことですよね?
でも、どういう風に作成したらよいのかがわかりません。
どなたか、こんな初心者へ教えていただける方はいらっしゃいませんか?
よろしくお願いします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-12-27 11:50
array を gcnew しただけでは、言ってみれば本棚を設置しただけであってまだ中の本は入れられていません。
それぞれの要素についても gcnew してやる必要があります。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-27 11:55
引用:

osakoさんの書き込み (2006-12-27 11:43) より:

'System.NullReferenceException' の初回例外が ***.exe で発生しました。
'System.NullReferenceException' のハンドルされていない例外が ***.exe で発生しました。

追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。

とエラーになってしまいます。


この例外が、何を示すのか理解されていますでしょうか?
配列のインスタンスは確保しているようですが、配列の要素のインスタンスは確保していませんよね。

引用:

adr[0]->Text="0"の時点で、だめなようなんですが
こういう使い方は誤りってことですよね?


よって、これは誤った結論です。

引用:

array<Label^>^adr=gcnew array<Label^>(3);

for(i=0;i<3;i++){
  adr[0]->Text="0";
  adr[0]->Location=Point(10,20+i*10);
  adr[0]->AutoSize=true;
  form1->Controls->Add(adr[0]);
}


ところで、添え字が '0' 固定では意味がないでしょう。
'form1' も正しくは 'this' ではないでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
osako
常連さん
会議室デビュー日: 2006/10/31
投稿数: 35
投稿日時: 2006-12-27 12:46
ご回答ありがとうございました。
なんとなくですが、理解できました。

最終的にはこのようにしました。

−−−−−−コード−−−−−

Form^ form1 = gcnew Form;
array<Label^>^adr=gcnew array<Label^>(3);

for(i=0;i<3;i++){
adr[i]=gcnew Label;
adr[i]->Text=i.ToString("X");
adr[i]->Location=Point(15,25+i*15);
adr[i]->AutoSize=true;
form1->Controls->Add(adr[i]);
}

これで、前に進めます。ありがとうございました。
1

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