Board logo

標題: [發問] 動態新增控制後怎麼觸發事件 [打印本頁]

作者: modelcrazyer    時間: 2016-4-7 21:56     標題: 動態新增控制後怎麼觸發事件

利用以下程式建立了,3個TextBox
Private Sub CommandButton1_Click()
Dim i,k As Integer
Dim theTextBox  As Control
K=10
For i= 1 to  3
Set theTextBox =ME.Controls.Add("Forms.TextBox.1", "TextBox"&i, True)
With  theTextBox
  .Left = 210
  .Top=K
  K=.Top+.Height+ 18
End with
Next i
Set  theTextBox =Nothing
End sub
後續每個TextBox想要_Change()的事件,並控制每個TextBox只能輸入數字
請問該怎麼寫???
作者: GBKEE    時間: 2016-4-8 13:45

本帖最後由 GBKEE 於 2016-4-8 13:47 編輯

回復 1# modelcrazyer
1 表單模組程式碼
  1. Option Explicit
  2. Dim AA(1 To 3) As New Class1
  3. Private Sub CommandButton1_Click()
  4.     Dim theTextBox  As Control, K As Integer, I As Integer
  5.     K = 10
  6.     For I = 1 To 3
  7.         Set theTextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & I, True)
  8.         Set AA(I).C_TextBox = theTextBox
  9.         With theTextBox
  10.                 .Left = 210
  11.                 .Top = K
  12.                 K = .Top + .Height + 18
  13.         End With
  14.     Next I
  15.     Set theTextBox = Nothing
  16. End Sub
複製代碼
2 物件類別模組新增一模組:會自動命名 Class1
  1. Option Explicit
  2. Public WithEvents C_TextBox As MSForms.TextBox
  3. Private Sub C_TextBox_Change()
  4.     If Not IsNumeric(C_TextBox) Then MsgBox C_TextBox & " 不是數字"
  5. End Sub
複製代碼

作者: modelcrazyer    時間: 2016-4-9 00:36

謝謝,就是這樣。感謝大大幫忙
作者: linyancheng    時間: 2016-4-11 13:30

可以省略theTextBox
直接Set AA(I).C_TextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & I, True)
也可以
作者: c_c_lai    時間: 2016-4-12 06:41

可以省略theTextBox
直接Set AA(I).C_TextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & I, True ...
linyancheng 發表於 2016-4-11 13:30

此處絕對不可以偷懶將 theTextBox 省略,
如果予以省略成:
  1.         '  Set theTextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & I, True)
  2.         '  Set AA(I).C_TextBox = theTextBox
  3.         Set AA(I).C_TextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & I, True)
複製代碼
接下來的執行將會出現
  1. 執行階段錯誤 91:
  2. 沒有設定物件變數或 With 區塊變數
複製代碼
所以 GBKEE 大大原本的設定與考量是正確無誤誤的:
  1.         Set theTextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & I, True)
  2.         Set AA(I).C_TextBox = theTextBox

  3.         With theTextBox
  4.                 .
  5.                .
  6.         End With
複製代碼

作者: c_c_lai    時間: 2016-4-12 06:58

回復 4# linyancheng
除非你不使用 theTextBox 宣告之變數,而直接將它寫成:
  1.     For I = 1 To 3
  2.         '  Set theTextBox  = Me.Controls.Add("Forms.TextBox.1", "TextBox" & I, True)
  3.         '  Set AA(I).C_TextBox =theTextBox     '  可以省略 theTextBox
  4.         Set AA(I).C_TextBox = Me.Controls.Add("Forms.TextBox.1", "TextBox" & I, True)
  5.         
  6.         '  With theTextBox
  7.         With AA(I).C_TextBox
  8.                 .Left = 50
  9.                 .Top = K
  10.                 K = .Top + .Height + 18
  11.         End With
  12.     Next I
複製代碼
方可。
作者: modelcrazyer    時間: 2016-4-20 21:17

感謝各位!!終於解決了!!




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