• 締切済み

プログラム起動後のコントロールの配置

プログラム起動後に,ファイルから値を読みこみ,その値の数だけテキストボックスを配置する,という動作は可能でしょうか? あらかじめ最大数のテキストボックスを,invisibleの設定で作成しておき,値読み込み後に,必要数だけinvisibleの設定を解除する方法を試しましたが,余分の空白部分が出来るので,もっと良い方法があればと思った次第です. 何かヒントなりありましたら,お教え下さいますようお願い致します.

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

解答は多数作っておいて、invusible->visible法が多いが、プログラムで自動的に作る、下記のようなのも参考になりませんか。 Form1にテキストボックスを1つ貼りつける(ファイルから読みこむ代わりにここへ数を入力するため。) Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then For i = 1 To Val(Text1.Text) Set oText = Controls.Add("VB.TextBox", "Text" & (1 + i)) With oText .Left = 200 .Top = 400 * (i - 1) + 100 .Width = 2000 .Height = 300 .Text = "" .Visible = True End With Next i End If End Sub Form1で実行-開始でテキストボックスに3と入れてEnter キーを押すと、3個のテキストボックスが上から下へ等間隔でForm1上に出来ます。位置もプログラムで計算して指定 するわけです。 配列にTOPなどの値を持って、それをセットすれば、自由な 位置に設定できます。 テキストボックスの初期値を1にするには Private Sub Form_Load() Text1.Text = 1 End Sub を加える。

mioko_bk
質問者

お礼

御礼が遅くなりまして,申し訳ありません. 使用しているVBが.net版であるためでしょうか,うまく動作してくれませんでした.(と言うか入力の段階でエラーが出ました.) でも,アドバイスお寄せ下さいまして,有難う御座いました.

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

CtlsAddという動的コントロールの追加のサンプルがVB6に付属しています。

mioko_bk
質問者

お礼

御礼が遅くなりまして,申し訳ありません. 使用しているVBが.net版であるためでしょうか,うまく動作してくれませんでした.(と言うか入力の段階でエラーが出ました.) でも,アドバイスお寄せ下さいまして,有難う御座いました.

  • TT_TT
  • ベストアンサー率17% (16/90)
回答No.2

アドバイスですー mioko_bkさんの 「あらかじめ最大数のテキストボックスを,invisibleの設定で作成しておき,値読み込み後に,必要数だけinvisibleの設定を解除する方法」と 「LeftとTopをその数に応じて変更する」をあわせて使えばどうでしょうか? 例えば1だったらLeftを100・Topを100、 2だったらLeftを100・Topを150と高さだけずらしておくみたいな感じでどうでしょう? ロジック的には   Dim intCnt As Integer    ''カウントワーク   Dim intMaxText As Integer  ''TEXTの表示する数の最大値を格納   Dim intLeft As Integer   ''横の表示座標   Dim intTop As Integer    ''縦の表示座標   ''初期値の設定   intLeft = 100   intTop = 100   ''高さを50ずつずらしながら最大値まで表示していく   For intCnt = 1 To intMaxText    Text1(intCnt - 1).Left = intLeft    Text1(intCnt - 1).Top = intTop    Text1(intCnt - 1).Visible = True    intTop = intTop + 50    ''6個目まできたら1個目と同じ高さに戻って1個目の左に表示する    If intCnt = 6 Then      intLeft = intLeft + 100      intTop = 100    End If   Next ※テストしてないんで参考程度で…

mioko_bk
質問者

お礼

御礼が遅くなりまして,申し訳ありません. 御提案の方法と,フォームのサイズを動的に制御する方法で,希望の動作を実現することが出来ました. 有難う御座いました.

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.1

VBのバージョンが明記されてませんので、あくまでもVB6.0を例としてご返答いたします。 目的の件は、テキストボックスを動的に生成することにより可能になると思います。 下記は、テキストボックスを動的に生成する例です。 フォームの上に、コマンドボタンを1つ。 その下にコントロール配列にしたテキストボックスを1つ配置してください。 コマンドボタンのClickイベントに下記のコードを追加してください。 Private Sub Command1_Click() Dim intIndex As Integer intIndex = Text1.UBound + 1 Load Text1(intIndex) Text1(intIndex).Left = Text1(intIndex - 1).Left Text1(intIndex).Top = Text1(intIndex - 1).Top _ + Text1(intIndex - 1).Height _ + Screen.TwipsPerPixelY * 2 Text1(intIndex).Visible = True End Sub ボタンをクリックするたびに新たなテキストボックスが下に追加されます。

mioko_bk
質問者

お礼

御礼が遅くなりまして,申し訳ありません. 使用しているVBが.net版であるためでしょうか,うまく動作してくれませんでした.(と言うか入力の段階でエラーが出ました.) でも,アドバイスお寄せ下さいまして,有難う御座いました.

関連するQ&A