フォーム上で、テキストボックスを追加/削除できるアプリを作っていますが、ちと問題が起きてます。
たとえば20個ほど適当に作って、15番目のボックスを削除したとします。
この場合、普通にUnloadしてしまうと、15番目が欠番のまま空く事になります。
このまま、新たにボックスを追加しようとするとエラーが発生してしまいます。
そこで、16番以降のボックスについて、一つずつ順番を前にずらす、
いわゆる「詰める」作業を行いたいのですが、その方法がわかりません。
set txtInput(i).index = txtInput(i+1).index
など、MSDNも参考にして色々方法を試しては見たのですが・・・
もし、この解決策をご存知の方がおられましたら、ご教授頂ければ幸いです。
txtInput(i)=txtInput(i+1)とすればいきませんか?
アンロードしたところを再びロードしてVisibleをFalseにして
上式を(最大個数-詰め始め)でループで代入するといくかもしれません。
Unloadしなくてもいいのでは?
ユーザから見れば、見えなくなればいいのだし・・・。
たとえば、Formにボタンとテキストボックス1個置いて、
Option Explicit
Dim objText(20) As TextBox
Private Sub DeleteText1(lngIndex As Long)
Dim i As Long
objText(lngIndex).Visible = False
For i = lngIndex To 19
Set objText(i) = Text1(i + 1)
objText(i).Top = objText(i - 1).Top + objText(i - 1).Height
Next
End Sub
Private Sub Command1_Click()
'Text1(16)の削除
Call DeleteText1(16)
End Sub
Private Sub Form_Load()
Dim i As Long
Set objText(0) = Text1(0)
Text1(0).Text = "Text1(0)"
For i = 1 To 20
Load Text1(i)
Set objText(i) = Text1(i)
objText(i).Top = objText(i - 1).Top + objText(i - 1).Height
objText(i).Text = "Text1(" & CStr(i) & ")"
objText(i).Visible = True
Next
End Sub
とか・・・。
遅れ馳せながら、なんとか解決しました。
どうもありがとうございましたm(__)m
ツイート | ![]() |