Объект класса TextBox на Userform доступных методов - PullRequest
2 голосов
/ 05 июня 2019

Я заметил, что когда я создаю модуль класса для текстового поля и использую его в своих формах - добавляя через VBA в событие инициализации формы - ни один из методов ввода или выхода не доступен. Конечно, если я просто добавлю текстовое поле в форму, они будут.

Я могу заставить метод DblClick работать нормально, поэтому мой класс настроен правильно, и мой код form.init также в порядке.

Когда я смотрю в браузере объектов на наличие MSForms.TextBox, я вижу, что в нем нет методов Enter или Exit, и предполагаю, что это причина.

Для меня это не срочно, потому что я заметил это при создании моей первой формы, которая использует мои собственные классы для текстового поля - к счастью для того, над чем я сейчас работаю - на самом деле мне не нужны методы Enter или Exit, но подумал, что кто-то может знать, есть ли обходной путь, потому что они могут понадобиться мне в будущем, и для текстовых полей это очень полезные методы

Вот мой код класса с именем nxTxtV

Option Explicit

Public WithEvents oTxtV As MSForms.TextBox

Private Sub oTxtV_Enter()
   ' This method never fires
   MsgBox "Hello World from the Enter Method"
End Sub

Private Sub oTxtV_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   ' This method works fine
   MsgBox "Hello World from the DoubleClick Method for " & oTxtV.Value
End Sub

и вот мой код инициализации формы

Private Sub UserForm_Initialize()
   Dim xItm As Control, i As Long
   Dim dItm As nxTxtV   ' nxTxtV is the name of my class

   For i = 1 To 5
      Set xItm = Me.Controls.Add("Forms.TextBox.1", "Column" & i, True)
      With xItm
         .Value = "P" & i
         .AutoSize = False
         .Font.Size = 9
         .Width = 25
         .Height = 250
         .TextAlign = 2 ' Centred
         .SpecialEffect = 0
         .BackColor = RGB(255, 128, 0)
         .WordWrap = True
         .Left = 200 + (i * 27)
         .Top = 5
         .Enabled = True
         .Visible = True
      End With
      Set dItm = New nxTxtV   ' nxTxtV is the name of my class
      Set dItm.oTxtV = xItm
      CodedObjs.Add dItm   ' CodedObjs is declared at module level (form level) as a Collection 
   Next i
End Sub

Короче говоря, могу ли я заставить свой класс реагировать на события входа и выхода?

Добавление - Декларация CodedObjs

Public CodedObjs As New Collection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...