سؤال

أحتاج إلى إنشاء ملصقات وأزرار ديناميكيا ثم قم بإضافتها إلى إطار ضمن UserForm. كيف أقوم بهذا العمل؟ يبدوا مثلها تماما ينبغي كن أسهل مما هو عليه حقا.

هل كانت مفيدة؟

المحلول

يوضح التعليمة البرمجية التالية كيف يمكنك ملء إطار ديناميكيا في UserForm مع عناصر التحكم ...

في النموذج الذي استخدمته يحتوي على عنصر تحكم إطار يدعى Frame1، لذلك في UserForm_initialize، يمكنك استدعاء الإطار 1.controls.ADD لتضمين عنصر تحكم في الإطار. يمكنك ضبط عنصر التحكم الذي يتم إرجاعه إلى متغير تحكم Withevents الذي حددته في وحدة رمز UserForm حتى تتمكن من الاستجابة للأحداث على أي عناصر تحكم تريده ...

لذلك مع هذه الطريقة تحتاج إلى كتابة أي رمز الحدث الذي تريده لأي عناصر تحكم تقوم بإنشائه ...

لاحظ أيضا أنه يمكنك وضع وحجم عناصر التحكم الخاصة بك حتى إذا كانت الخصائص العلوية واليسار والعرض والطول لا تأتي بالضرورة في ...

Private WithEvents Cmd As MSForms.CommandButton
Private WithEvents Lbl As MSForms.Label

Private Sub UserForm_Initialize()
    Set Lbl = Frame1.Controls.Add("Forms.Label.1", "lbl1")
    Lbl.Caption = "Foo"
    Set Cmd = Frame1.Controls.Add("Forms.CommandButton.1", "cmd1")
End Sub

Private Sub Cmd_Click()
    Cmd.Top = Cmd.Top + 5
End Sub

Private Sub Lbl_Click()
    Lbl.Top = Lbl.Top + 5
End Sub

نصائح أخرى

اختلافي على السمة أعلاه. هذا هو فقط للحصول على صفيف 4x4 من الأزرار رغم ذلك. قم بإنشاء UserForm وإضافة هذا إلى التعليمات البرمجية. يمكن استخدام نفس المفاهيم مع ملصقاتك (أو راجع الإجابة السابقة):

Private cmdLots(20) As MSForms.CommandButton

Private Sub UserForm_Initialize()
For i = 1 To 4
For j = 1 To 4
    k = i + (4 * j)
    Set cmdLots(k) = UserForm2.Controls.Add("Forms.CommandButton.1", "cmd1")
    With cmdLots(k)
        .Top = i * 25
        .Left = (j * 80) - 50
        .BackColor = RGB(50 * i, 50 * j, 0)
        .Caption = "i= " & i & "  j= " & j
    End With
Next j
Next i
End Sub
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top