- ベストアンサー
ラベルコントロ-ルを貼りつける方法
ユーザーフォーム上に、ラベルコントロールを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個から何度もコピーしてコントロール配列にして凌いでいます。) どうぞよろしくご教示をお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。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)
個人的にはラベルをぺたぺたしますけどね(^^;;; #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)
こんにちは。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)
こんにちは。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 -------------------------------------------------------------- #行の先頭に全角スペースを使ってインデントしています。