2012-01-05 80 views
0

請幫助我在運行時使用createobject函數或vb.net中的其他更好的函數創建用戶控件對象。在運行時創建用戶控件對象

這裏是我的代碼:

Dim b As New Security.Sec_Role 
b.Name = "Sec_Role" 
b.visible = true 

,但我想使用此代碼:

dim b as object 
b = createobject("Security.Sec_Role") 

但它總是返回一個錯誤:

Cannot create ActiveX component. 

編輯:我搞清楚了..感謝很多..我使用這個代碼:

Dim asm As System.Reflection.Assembly = Assembly.Load("Security") 
Dim b As Object = Activator.CreateInstance(asm.GetType("Security.Sec_Role")) 
+1

你想做什麼? – SLaks 2012-01-05 04:06:18

+0

我有一個2個項目,一個是主要的,另一個是我也創建的usercontrols的集合。用戶控件的名稱保存在數據庫中,因此我可以輕鬆地調用該對象。但我如何在我的主要項目中創建它。 – illumi 2012-01-05 04:32:44

回答

2

如果它是.Net UserControl,您將無法使用CreateObject,除非它已根據MSDN頁面CreateObject作爲Com對象公開。使用New將是創建.Net UserControl的正確方法。

從上面的鏈接:

Creates and returns a reference to a COM object. CreateObject cannot be used to create instances of classes in Visual Basic unless those classes are explicitly exposed as COM components.

從這個MSDN Forum嘗試這樣使用System.Activator.CreateInstance

Dim oType As System.Type = Type.GetType("MyNamespace.ClassName") 
Dim obj = System.Activator.CreateInstance(oType) 
+0

你可以建議一個更好的解決方法,這種情況下? – illumi 2012-01-05 04:29:14

+0

我們在談論多少種不同的用戶控件?如果它是一個合理的數字,請嘗試創建一個具有返回對象的select語句的函數。 – 2012-01-05 04:39:02

+0

它的約30個控件...也可以稍後添加...但創建/調用它並放置在窗體中是我的問題。 – illumi 2012-01-05 04:42:44

1

.Net類不是ActiveX控件。
你不能那樣做。

您可能正在尋找反射或字典。

+0

你能幫我創建控制嗎? – illumi 2012-01-05 04:07:55

+0

你爲什麼使用字符串? – SLaks 2012-01-05 04:11:21

+0

因爲..控制是基於我檢索的數據庫中的數據...例如..我選擇數據庫中的sec_role ..然後它會調用一個名爲sec_role的控件。 – illumi 2012-01-05 04:28:13

1

你將要使用Activator.CreateInstance

Dim b as object 
b = Activator.CreateInstance(Nothing, "Sec_Role") 

這將是最簡單的如果這個方法是在程序集中有控制。否則,您將需要在第一個參數中提供程序集名稱。

+0

你能解釋更多更詳細的先生嗎? – illumi 2012-01-05 04:48:50

+0

哦,我明白了......我嘗試一下,儘快回覆。非常感謝。 – illumi 2012-01-05 04:53:16

+0

它返回一個錯誤 「無法從程序集'SimSolInc,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加載類型'Sec_Role'。」 – illumi 2012-01-05 05:03:31