2017-01-02 2 views
0

при динамическом создании макета UserForm, в то время как добавление элементов управления, я обнаружил, что синтаксис требует».1" в конце bstrProgId в виде строки в следующих битов кода:Что такое «.1». в конце bstrProgId как строка mean/do?

For loopthroughsteps = 0 To 0 
    For foodgroup_id = 0 To 6 
     'For vit = 2 To 18 
     For vit = 2 To 3 
      Dim listbox As Object 
      Set listbox = UserForm3.Controls.Add("Forms.Listbox.1", foodgroup_id & "-" & vit & "-" & loopthroughsteps, True)     
      With listbox 
       .Left = 35 * (vit - 1) + 205 * (vit - 2) 
       .Top = 25 + (foodgroup_id) * 50 
       .Height = 50 
       .Width = 205 
      End With 
     Next vit 
    Next foodgroup_id 
Next loopthroughsteps 

что делает ".1" после Controls.Add("Forms.Listbox do или mean?

Я не мог найти его в документации, но мне было любопытно;

  • Это индекс для контрольной формы, но тогда почему это (всегда) 1? и почему это будет число в строке?

  • или это какой-то признак, если да для чего?

ответ

1
Add(ProgID, Name, Visible) 

Первый параметр progID это просто строка, что COM завод анализирует и решает, какой объект создать. Он не указан как программное имя класса (т. Е. typename), а строка, которую фабрика объектов сопоставляет с данным классом.

Почему это "Forms.Listbox.1", а не Forms.Listbox? Причины этого «.1» связаны с реализацией, скорее всего, из-за «управления версиями» в команде разработчиков, которая разрабатывает и поддерживает VBA. Разработчику просто нужно использовать указанную строку «progID», как описано в методе UserForm.Add.

1

В дополнении к другому хорошему ответу здесь есть некоторая документация (слишком много для комментария) ...

Если вы копаться в реестре с помощью Regedit.exe специально улой CLASSES_ROOT \ CLSID, то вы увидите что-то вроде этого

[HKEY_CLASSES_ROOT\CLSID\{884e2013-217d-11da-b2a4-000e7bbb2b09}] 


[HKEY_CLASSES_ROOT\CLSID\{884e2013-217d-11da-b2a4-000e7bbb2b09}\ProgID] 
     @="X509Enrollment.CAlternativeName.1" 

[HKEY_CLASSES_ROOT\CLSID\{884e2013-217d-11da-b2a4-000e7bbb2b09}\VersionIndependentProgID] 
     @="X509Enrollment.CAlternativeName" 

Таким образом, можно увидеть ProgID и VersionIndependentProgID. С этим можно управлять версией элемента управления, который требуется создать.

Ссылка на документацию Майкрософт VersionIndependentProgID

Смежные вопросы