2017-06-30 15 views
-1

VB.Netのフォームにusercontrolを動的に追加したいと思います。私はUserControlの名前(文字列)をデータベースから取得し、そのUserControlがプロジェクトに存在する場合はフォームに追加したいと思います。 プログラムでフォームにusercontrolを追加する方法を知っていますが、名前に文字列を使用する方法がわかりません。動的にUserControlをフォームに追加する

Dim userContName As UserControl = dtModules.Rows(k).Item("uc_Name") 
Panel1.Controls.Add(userContName) 

は私が

Public Sub LoadGroups() 
dtModules = Tbl_GroupModulesTableAdapter1.GetDataBy_spGetModuleByGroup(grp.Name) 
For k = 0 To dtModules.Rows.Count - 1 
    If grp.Name = dtModules.Rows(k).Item("Module_Group") Then 
     Dim fullyQualifiedClassName As String = dtModules.Rows(k).Item("Module_Name") 
     If fullyQualifiedClassName = Nothing Then 
     Else 
      Dim o = fetchInstance(fullyQualifiedClassName) 
      Dim b = CType(o, Control) 
      grp.Controls.Add(b) 
     End If 
    End If 
Next 
End Sub 

Public Function fetchInstance(ByVal fullyQualifiedClassName As String) As Object 
    Dim nspc As String = fullyQualifiedClassName.Substring(0, fullyQualifiedClassName.LastIndexOf("."c)) 
    Dim o As Object = Nothing 
    Try 
     For Each ay In Assembly.GetExecutingAssembly().GetReferencedAssemblies() 
      If (ay.Name = nspc) Then 
       o = Assembly.Load(ay).CreateInstance(fullyQualifiedClassName) 
       Exit For 
      End If 
     Next 
    Catch 
    End Try 
    Return o 
End Function 
+0

[Visual Basic:名前として文字列を使用してオブジェクトを動的に作成する](https://stackoverflow.com/questions/3432317/visual-basic-dynamically-create-objects-using-a-string-as) -名前) –

答えて

0

[OK]をこれで動作するようにそれを得た。このsoultionを試みました。

Dim ucName As String = Projectname.UserControlName 
Dim newType As Type = Type.[GetType](ucName, True, True) 
Dim o As Object = Activator.CreateInstance(newType) 
Form.Controls.Add(o) 

これを取得したら、かなり簡単でした。フィードバックをお寄せいただきありがとうございます!

関連する問題