- 締切済み
プログラム起動後のコントロールの配置
プログラム起動後に,ファイルから値を読みこみ,その値の数だけテキストボックスを配置する,という動作は可能でしょうか? あらかじめ最大数のテキストボックスを,invisibleの設定で作成しておき,値読み込み後に,必要数だけinvisibleの設定を解除する方法を試しましたが,余分の空白部分が出来るので,もっと良い方法があればと思った次第です. 何かヒントなりありましたら,お教え下さいますようお願い致します.
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
解答は多数作っておいて、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 を加える。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
CtlsAddという動的コントロールの追加のサンプルがVB6に付属しています。
お礼
御礼が遅くなりまして,申し訳ありません. 使用しているVBが.net版であるためでしょうか,うまく動作してくれませんでした.(と言うか入力の段階でエラーが出ました.) でも,アドバイスお寄せ下さいまして,有難う御座いました.
- TT_TT
- ベストアンサー率17% (16/90)
アドバイスですー 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 ※テストしてないんで参考程度で…
お礼
御礼が遅くなりまして,申し訳ありません. 御提案の方法と,フォームのサイズを動的に制御する方法で,希望の動作を実現することが出来ました. 有難う御座いました.
- mfuku
- ベストアンサー率50% (173/345)
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 ボタンをクリックするたびに新たなテキストボックスが下に追加されます。
お礼
御礼が遅くなりまして,申し訳ありません. 使用しているVBが.net版であるためでしょうか,うまく動作してくれませんでした.(と言うか入力の段階でエラーが出ました.) でも,アドバイスお寄せ下さいまして,有難う御座いました.
お礼
御礼が遅くなりまして,申し訳ありません. 使用しているVBが.net版であるためでしょうか,うまく動作してくれませんでした.(と言うか入力の段階でエラーが出ました.) でも,アドバイスお寄せ下さいまして,有難う御座いました.