2017-01-02 245 views
0

在動態創建一個窗體佈局,同時也添加了控制,我發現語法需要一個」 .1" 在bstrProgId結束在下面的代碼位的字符串:什麼是「.1」。在一個bstrProgId結尾的字符串意味着什麼?

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 

什麼是Controls.Add("Forms.Listbox之後的「.1」是做還是意思?

我在文檔中找不到它,但我很好奇;

  • 它是控制表單的索引,但爲什麼它(總是)爲1? 爲什麼它會是一個字符串中的數字?

  • 或者它是什麼類型的指示,如果是的話?

回答

1
Add(ProgID, Name, Visible) 

第一個參數progID只是一個字符串,該COM工廠分析並決定哪些對象來創建。它沒有被指定爲該類的編程名稱(即typename),而是對象工廠映射到給定類的字符串。

爲什麼它是"Forms.Listbox.1"而不是Forms.Listbox? 「.1」背後的原因與實施有關,很可能是由於開發和維護VBA的開發團隊中的「版本控制」。開發人員只需要使用UserForm.Add方法中記錄的指定字符串「progID」。

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" 

因此,可以看到ProgIDVersionIndependentProgID。用這個可以控制一個想要實例化的控件的版本。

這是Microsoft文檔鏈接 VersionIndependentProgID