- PR -

.NETでのコントロール配列の使用法

投稿者投稿内容
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-11-15 17:37
引用:

エイジさんの書き込み (2007-11-15 16:32) より:

ループは意味の無い事をしているので修正が必要かもしれませんが

ReDim mHimoku(2)で配列を3つ用意しているので
(mHimoku.Length - 1) = 2で
1〜2まで回るようにはなっています


ああそうか、ReDim mHimoku(2) だと 0〜2 になるわけですね。
むむむ、0 がもったいないと感じてしまう MOTTAINAI 主義。

引用:

エイジさんの書き込み (2007-11-15 16:44) より:

cboH() = New ComboBox {cboHimoku1, cboHimoku2, cboHimoku3・・・・}
では無く

cboH = New ComboBox(){cboHimoku1, cboHimoku2, cboHimoku3・・・・}
型の後に()を付けるのですね


() の位置はどちらでもかまわないです。よねKENさん(と私)
がたまたま型の後ろに () を付ける派だっただけかと。

問題はそちらではなくて
  1. 最初の宣言と初期化の部分を宣言のみにする
  2. Load イベントの中で cboH を初期化する
という部分です。
宣言時にはまだ cboHimoku1 は Nothing だけれど、Load イベント
を実行している段階ではインスタンスが生成されているので
その時点で cboH を初期化すれば正しいコントロール配列が
作られるわけです。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
エイジ
常連さん
会議室デビュー日: 2007/11/14
投稿数: 38
お住まい・勤務地: 兵庫
投稿日時: 2007-11-16 11:12
すみません、2ページ目なんてものに気付かず返信がおそくなりました・・

cboH() = New ComboBox {cboHimoku1, cboHimoku2, cboHimoku3・・・・}
ロードイベントの中にこの形で記述すると

()の部分で
「インデックスの数がインデックス付き配列の次元より少ない値です。」
と言うエラーになってインスタンスが生成できないです

上記のコードは何度か試した上で、エラーの回避法がわからず

下記コードの形で上手く行く事を知った次第です
cboH = New ComboBox(){cboHimoku1, cboHimoku2, cboHimoku3・・・・}

ですので、やはり()は型の後ろにつけないとダメなのではないでしょうか



cboHimoku1のインスタンスに関しては、ぽぴ王子さんのご説明のお陰で
なんとか理解する事はできました

上記の違いについては、コードのしたい事は理解できるものの
記述法の正誤としか理解できないままですが

こういうモジュール変数宣言のエラーの問題も
ステップ実行でロードイベントの前からデバッグを始める事が出来るという事に気付かせていただきました
(ホント初歩的な事だとは思いますが・・・)

ご指摘いただいたように基礎が抜けてる形ですので、細かく説明していただいたお陰で色々と抜けてた穴が埋まって行った様に思います

それでもまだまだ穴が開いた状態だとは思うので、合間を見つけては基礎から見直してみようかと思います


度重なるご教授ありがとうございました
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-11-16 13:03
うまく行ったようで何よりです(^^)

引用:

エイジさんの書き込み (2007-11-15 16:44) より:
cboH() = New ComboBox {cboHimoku1, cboHimoku2, cboHimoku3・・・・}
では無く

cboH = New ComboBox(){cboHimoku1, cboHimoku2, cboHimoku3・・・・}
型の後に()を付けるのですね



さて、配列の扱い方ですが、配列を宣言するときは、
コード:
Dim cboH() As ComboBox  ' (1)


と書くことも
コード:
Dim cboH As ComboBox()  ' (2)


と書くこともできます。どちらも文法的に正しい書き方で、
見た目は違いますが同じ意味です。

どちらの書き方をした場合も配列を表す変数はcboHであって、cboH()ではありません。
または、変数cboHの型は「ComboBox()」という型です。

コード:
cboH = New ComboBox(){cboHimoku1, cboHimoku2, cboHimoku3・・・・}



その点を踏まえて上記の文を解釈すると
ComboBoxの配列用の変数cboHにComboBox()型のインスタンスをNewして代入する、
という意味です。「ComboBox()」で一語ですので分割はできません。
エイジ
常連さん
会議室デビュー日: 2007/11/14
投稿数: 38
お住まい・勤務地: 兵庫
投稿日時: 2007-11-16 16:43
よねKENさんありがとうございます

型の後ろに()と言うことじゃなくて

ComboBox()で型なんですね、イマイチ捕らえ方が判ってなかったのですが
お陰できちんと理解するに至りました

理解すれば今までのエラー表示も納得が行きます

解決策だけでなく、ご指導まで頂きまして大変助かりました

こういう理解をきちんとしないまま
中途半端に作業に当たると、様々な問題が発生してきますね・・・

また1つ理解できた事が増えたので、こうして1つ1つの事を探りながら進めて行こうと思います

ご指導ありがとうございました

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