例えば、家計簿をつけるプログラムを作成しようとした場合、真っ先に表形式のデータ表示があまたに浮かぶと思いますが、これを実現するためにはどのコントロールを使うでしょうか? グリッドコントロールのようなあらかじめ表形式をとっているコントロールを使うのもひとつの方法ですが、入力チェックなど、細かいことをしようと考えた場合どうしても限界があり、結局、テキストボックスをたくさん並べて。。。というような経験は無いでしょうか? このような場合、テキストボックスはコントロール配列にしますが、今回は、このコントロール配列を動的にロードする方法を紹介します。いたって簡単ですが、工夫によってはその用途は多様なものが考えられるので、知っておくとプログラミングの幅を広げてくれると思います。
実現方法は簡単です。まず、元となるコントロールを作成します。例えば、テキストボックスコントロール(Name プロパティは Text1 とする)を一つ配置して、そのテキストボックスの Index プロパティを 0 に設定します。ここまでで、独りコントロール配列を作成出来たので、このコントロールのコピーを作成するイメージで、動的にコントロール配列をロードします。ロードの方法は、
Load Text1(1)
とすると、Text1 は、Text1(0) と、Text1(1) が使えるようになります。ただし、Text1(1) は Text1(0) と同じところにロードされる(ロードしたプロパティはすべてロード元のプロパティが反映される)ので、Top や Left のプロパティを変更して位置をずらさないと目で確認出来ません。また、なぜかロードしたプロパティの Visible プロパティは False になっているので、これを True にしないと、フォーム上に表示されません。
この方法を使うと、例えばあらかじめ Text1(0) を作成しておいて、
Dim intLoop As Integer
For intLoop = 1 To 100
Load Text1(intLoop)
Text1(intLoop).Visible = True
Text1(intloop).Top = Text1(intloop - 1).Top + Text1(intloop - 1).Height
Next intLoop
などとコーディングすると、簡単に100個のコントロールがロードされます。なお、
Load Text1(0)
を実行すると、Text1(0) はあらかじめ存在しているので、ランタイムエラーが発生します。
以上で、終わりなのですが僕の経験上では、例えばデザイン時にフォームに100個のコントロール配列を配置するよりも、上のような方法でコントロールを動的に配置した場合の方が、フォームのロードが早くなるようです。当然、アプリケーションのサイズも、動的にコントロールを配置したほうが小さくなると思われます。おためしあれ。