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

共通変数の処理??

環境/言語:[VB.NET]
分類:[.NET]

申し訳ないのですが、教えてください。
FORM1とFORM2のそれぞれにBUTTON1、lbl1とBUTTON2、lbl2を一つずつ置き
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
「共通部分」
Public iCnt As Integer = 0
Public strName() As String

「FORM1」
Private Sub cmdbtn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBasket.Click
'ReDim strName(iCnt) ★
strName(iCnt) = lbl1.Text ←
iCnt = iCnt + 1
End Sub

「FORM2」
Private Sub cmdbtn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBasket.Click
'ReDim strName(iCnt) ★
strName(iCnt) = lbl2.Text ←
iCnt = iCnt + 1
End Sub
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
↑のようにしてFORM1⇔FORM2しながら
strName(0) = "aaa"
strName(1) = "bbb"
strName(2) = "111"
:
strName(n) = "999"

のようにしたいのですが,
←のところで
'System.NullReferenceException' のハンドルされていない例外が Project1.exe で発生しました。
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。

と怒られてしまいます。
★のコメントをはずすと怒られはしないのですが、うまくいきません。
どのようにすべきなのか教えてください。どうか宜しくお願いします。

ここ最近毎日のように質問していますが、まだ聞くばかりで教えることは全くできません。またいつか、誰かの質問に答えることができたらなぁと…思います。
タイトルをどうしようかとかなり悩んだのですが、
このような質問をするのに適当なタイトルってどんなのでしょうか?(共通変数の処理??)ってへんですよね。
きいぼーです。

> ←のところで
> 'System.NullReferenceException' のハンドルされていない例外が Project1.exe で発生しました。
> 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
>
> と怒られてしまいます。
Redimしていないので、変数が確保されていませんので、
当然エラーになります。

> ReDim strName(iCnt) ★
> ★のコメントをはずすと怒られはしないのですが、うまくいきません。
> どのようにすべきなのか教えてください。どうか宜しくお願いします。
「うまくいかない」では、どうなるのかわかりません。
多分
strName(0) = ""
strName(1) = ""
strName(2) = "111"
のように最後に宣言した配列にのみ格納されているのではないでしょうか?

ReDimは、「配列変数の格納領域を再割り当てします。」とヘルプにありますので、
格納していたデータは消えてしまいます。
ReDim にPreserveキーワードをつけてみてはどうでしょうか?
■No2733に返信(きいぼーさんの記事)
> きいぼーです。
>
>>←のところで
>>'System.NullReferenceException' のハンドルされていない例外が Project1.exe で発生しました。
>>追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
>>
>>と怒られてしまいます。
> Redimしていないので、変数が確保されていませんので、
> 当然エラーになります。
>
>>ReDim strName(iCnt) ★
>>★のコメントをはずすと怒られはしないのですが、うまくいきません。
>>どのようにすべきなのか教えてください。どうか宜しくお願いします。
> 「うまくいかない」では、どうなるのかわかりません。
> 多分
> strName(0) = ""
> strName(1) = ""
> strName(2) = "111"
> のように最後に宣言した配列にのみ格納されているのではないでしょうか?
>
> ReDimは、「配列変数の格納領域を再割り当てします。」とヘルプにありますので、
> 格納していたデータは消えてしまいます。
> ReDim にPreserveキーワードをつけてみてはどうでしょうか?

全くそのとうりです!!「Preserve」を加えるだけで思うようにできました。
ありがとうございました。
解決済み!

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