コントロール配列を「詰める」には?

解決


かけだしぷろぐらま  2002-10-24 06:23:10  No: 76261

フォーム上で、テキストボックスを追加/削除できるアプリを作っていますが、ちと問題が起きてます。

たとえば20個ほど適当に作って、15番目のボックスを削除したとします。
この場合、普通にUnloadしてしまうと、15番目が欠番のまま空く事になります。
このまま、新たにボックスを追加しようとするとエラーが発生してしまいます。

そこで、16番以降のボックスについて、一つずつ順番を前にずらす、
いわゆる「詰める」作業を行いたいのですが、その方法がわかりません。
set txtInput(i).index = txtInput(i+1).index
など、MSDNも参考にして色々方法を試しては見たのですが・・・

もし、この解決策をご存知の方がおられましたら、ご教授頂ければ幸いです。


DotL  2002-10-24 07:24:38  No: 76262

txtInput(i)=txtInput(i+1)とすればいきませんか?
アンロードしたところを再びロードしてVisibleをFalseにして
上式を(最大個数-詰め始め)でループで代入するといくかもしれません。


Say  2002-10-24 10:20:18  No: 76263

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

とか・・・。


かけだしぷろぐらま  2002-11-20 11:37:25  No: 76264

遅れ馳せながら、なんとか解決しました。
どうもありがとうございましたm(__)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加