• ベストアンサー

ラベルコントロ-ルを貼りつける方法

ユーザーフォーム上に、ラベルコントロールを50個以上 整列して貼りつけたいのです。(例えば銀行ATMのタッチパネルの50音字のようなもの。) Sub Test01() for i=1 to 60 (ラベルコントロールの発生) j=int(i/6)+1 k=(i Mod 6)+1 Form1.label1(i).Caption="" Form1.label1(i).Left=200+j*600 Form1.label1(i).Width=400 Form1.label1(i).Height=200 Form1.label1(i).Top=200+500*k next i End Sub としたいと思っていますが、肝心の(コントロールの発生)の部分のコーディングを色々調べましたが判りません。(全てコントロールはドラッグアンドドロップで 貼りつける前提の説明になっています。) (今はラベル1個から何度もコピーしてコントロール配列にして凌いでいます。) どうぞよろしくご教示をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.2

こんにちは。itohhといいます。 再度、投稿します。 先ほどは、ちょっと急いでいたので下手なコードでした。 もう少し、まともなコードを。 ---------------------------------------------------------------- Option Explicit Private DynLabel(3) As VB.Label ---------------------------------------------------------------- Private Sub Form_Load()   Dim i As Integer   Dim Name As String   Dim Cap As String   Dim Left As Long   Left = 400   For i = 0 To 2     Name = "DynLabel" & CStr(i + 1)     Cap = "aaaa" & CStr(i + 1)     Set DynLabel(0) = Form1.Controls.Add("VB.Label", Name)     Call subDynInit(DynLabel(0), Cap, Left, 100, 500, 800)     Left = Left + 1000   Next End Sub ---------------------------------------------------------------- Private Sub subDynInit(lbl As VB.Label, Cap As String, x As Long, y As Long, Height As Long, Width As Long)   With lbl     .Caption = Cap     .Left = x     .Top = y     .Width = Width     .Height = Height     .Visible = True   End With End Sub ----------------------------------------------------------------

その他の回答 (3)

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

個人的にはラベルをぺたぺたしますけどね(^^;;; #1の方の方法ですと、追加したコントロールのイベントを受け取れるようにするには、WithEventsを記述した変数を50個以上準備し、イベントプロシージャもイベントの種類*50個以上作成する必要があるので非効率的です。 (WithEventsキーワードが配列変数をサポートしていないため) クラスモジュールを使ってすっきりさせる方法もありますが、長くなるのでやめておきます。 なので、こちらの方法をお勧めします。 Label1というラベルをあらかじめ1つだけフォームに貼り付け、Indexに0を設定してあるる状態にしておいてください。 Private Sub Form_Load() Dim i As Integer For i = 1 To 50 'コントロール配列のロード Load Label1(i) '位置、サイズなどを設定 '表示する Label1(i).Visible = True Next i End Sub

  • itohh
  • ベストアンサー率45% (210/459)
回答No.3

こんにちは。itohhといいます。 すみません、バグが入っていました。 誤: Set DynLabel(0) = Form1.Controls.Add("VB.Label", Name) Call subDynInit(DynLabel(0), Cap, Left, 100, 500, 800) 正: Set DynLabel(i) = Form1.Controls.Add("VB.Label", Name) Call subDynInit(DynLabel(i), Cap, Left, 100, 500, 800) ついでに。 もし、イベントの処理が必要でしたら、No.1のアドバイスのようになります。 WithEventsとして宣言しないといけないと思います。 Private WithEvents DynLabel1 As VB.Label

  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 動的にコントロールを追加する方法は、なかなか、見つけにくいんですよね。 サンプルを作ってみました。参考にしてみてください。 -------------------------------------------------------------- Option Explicit Private WithEvents DynLabel1 As Label Private WithEvents DynLabel2 As Label Private WithEvents DynLabel3 As Label Private objDyn(3) As Object -------------------------------------------------------------- Private Sub Form_Load()   Set DynLabel1 = Form1.Controls.Add("VB.Label", "DynLabel1")   Set DynLabel2 = Form1.Controls.Add("VB.Label", "DynLabel2")   Set DynLabel3 = Form1.Controls.Add("VB.Label", "DynLabel3")   Set objDyn(0) = DynLabel1   Set objDyn(1) = DynLabel2   Set objDyn(2) = DynLabel3   Call subDynInit(objDyn(0), "aaaa1", 400, 100, 500, 800)   Call subDynInit(objDyn(1), "aaaa2", 1400, 100, 500, 800)   Call subDynInit(objDyn(2), "aaaa3", 2400, 100, 500, 800) End Sub -------------------------------------------------------------- Private Sub subDynInit(lbl As VB.Label, cap As String, x As Long, y As Long, Height As Long, Width As Long)   With lbl     .Caption = cap     .Left = x     .Top = y     .Width = Width     .Height = Height     .Visible = True   End With End Sub -------------------------------------------------------------- #行の先頭に全角スペースを使ってインデントしています。

関連するQ&A