Board logo

標題: [發問] 相同元件的事件陣列 [打印本頁]

作者: 劉大胃    時間: 2019-7-22 17:40     標題: 相同元件的事件陣列

Hello, 各位大大

假設有一UserForm 裡, 有50個的CheckBox01 , CheckBox02 , CheckBox03 , ....... , CheckBox50 元件,
而每一個CheckBox則是控管另一TextBox 與ComboBox的[Enable] or [Disable].
即例如觸發某一個CheckBox03_Click()事件後, TextBox03.Enabled=CheckBox03.Value , ComboBox03.Enabled=CheckBox03.Value
小弟目前的寫法只能土法練鋼的方式, 將每一個CheckBox的Click事件動作, 重複50次, 耗時耗力, 且維護不易,

         Private Sub CheckBox03_Click()
                       TextBox03.Enabled=CheckBox03.Value
                       ComboBox03.Enabled=CheckBox03.Value
         End Sub

故想請教各位大大們, 可依陣列的方式來做Click事件的撰寫 ?

Thanks ~
作者: 劉大胃    時間: 2019-7-24 08:47

Hello, 各位大大

請問這元件的事件可否依陣列方式觸發?
還是需只有土法練鋼的方法而已?!
Thanks ~
作者: jackyq    時間: 2019-7-24 23:05

本帖最後由 jackyq 於 2019-7-24 23:07 編輯

但如果你只是要 checkbox 有事件
不用那麼麻煩去用 checkbox

http://forum.twbts.com/viewthread.php?tid=20889
作者: 劉大胃    時間: 2019-7-25 13:34

Hello, Jackq

此類Class方式, 我也有在酷狗大神那兒拜讀到...^_^...
有礙公司有檔案限制, 故只能做Trial Run程式的心得分享....

謝謝您的分享與指導...

==> 範列: 5個 CheckBox , ComboBox  &  TextBox 的Visible Function 顯示.

==> UserForm1 程式段 ::
Option Explicit

Dim ComboClass(4) As New Class1
Dim TextClass(4) As New Class1
Dim CheckClass(4) As New Class1

Private Sub UserForm_Initialize()
              Dim aaaarray() As Variant
              Dim ag As Integer

               aaaarray = Array(ComboBox1, ComboBox2, ComboBox3, ComboBox4, ComboBox5)

               For ag = 0 To 4 Step 1
                      aaaarray(ag).Clear
                      aaaarray(ag).AddItem "a"
                      aaaarray(ag).AddItem "b"
                      aaaarray(ag).AddItem "c"
                      aaaarray(ag).AddItem "d"
   
                      Set ComboClass(ag).ComboBoxArray = Userform1.Controls("ComboBox" & ag + 1)
                      Set TextClass(ag).TextBoxArray = Userform1.Controls("TextBox" & ag + 1)
                      Set CheckClass(ag).CheckBoxArray = Userform1.Controls("CheckBox" & ag + 1)
   
                Next ag

End Sub


==> Class1 程式段 ::
Option Explicit

Public WithEvents ComboBoxArray As MSForms.ComboBox
Public WithEvents TextBoxArray As MSForms.TextBox
Public WithEvents CheckBoxArray As MSForms.CheckBox

Public Sub ComboBoxArray_Change()
            MsgBox ComboBoxArray.Name
End Sub

Public Sub TextBoxArray_Click()
            MsgBox TextBoxArray.Name
End Sub

Public Sub CheckBoxArray_Click()
  
            Userform1.Controls("ComboBox" & Right(CheckBoxArray.Name, 1)).Visible = CheckBoxArray.Value
            Userform1.Controls("TextBox" & Right(CheckBoxArray.Name, 1)).Visible = CheckBoxArray.Value

End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)